180945 Commits

Author SHA1 Message Date
Nathan Sidwell
ba6498124c core: Rename DECL_IS_BUILTIN -> DECL_IS_UNDECLARED_BUILTIN
In cleaning up C++'s handling of hidden decls, I renamed its
DECL_BUILTIN_P, which checks for loc == BUILTINS_LOCATION to
DECL_UNDECLARED_BUILTIN_P, because the location gets updated, if user
source declares the builtin, and the predicate no longer holds.  The
original name was confusing me.  (The builtin may still retain builtin
properties in the redeclaration, and other predicates can still detect
that.)

I discovered that tree.h had its own variant 'DECL_IS_BUILTIN', which
behaves in (almost) the same manner.  And therefore has the same
mutating behaviour.

This patch deletes the C++ one, and renames tree.h's to
DECL_IS_UNDECLARED_BUILTIN, to emphasize its non-constantness.  I
guess _IS_ wins over _P

	gcc/
	* tree.h (DECL_IS_BUILTIN): Rename to ...
	(DECL_IS_UNDECLARED_BUILTIN): ... here.  No need to use SOURCE_LOCUS.
	* calls.c (maybe_warn_alloc_args_overflow): Adjust for rename.
	* cfgexpand.c (pass_expand::execute): Likewise.
	* dwarf2out.c (base_type_die, is_naming_typedef_decl): Likewise.
	* godump.c (go_decl, go_type_decl): Likewise.
	* print-tree.c (print_decl_identifier): Likewise.
	* tree-pretty-print.c (dump_generic_node): Likewise.
	* tree-ssa-ccp.c (pass_post_ipa_warn::execute): Likewise.
	* xcoffout.c (xcoff_assign_fundamental_type_number): Likewise.
	gcc/c-family/
	* c-ada-spec.c (collect_ada_nodes): Rename
	DECL_IS_BUILTIN->DECL_IS_UNDECLARED_BUILTIN.
	(collect_ada_node): Likewise.
	(dump_forward_type): Likewise.
	* c-common.c (set_underlying_type): Rename
	DECL_IS_BUILTIN->DECL_IS_UNDECLARED_BUILTIN.
	(user_facing_original_type, c_common_finalize_early_debug): Likewise.
	gcc/c/
	* c-decl.c (diagnose_mismatched_decls): Rename
	DECL_IS_BUILTIN->DECL_IS_UNDECLARED_BUILTIN.
	(warn_if_shadowing, implicitly_declare, names_builtin_p)
	(collect_source_refs): Likewise.
	* c-typeck.c (inform_declaration, inform_for_arg)
	(convert_for_assignment): Likewise.
	gcc/cp/
	* cp-tree.h (DECL_UNDECLARED_BUILTIN_P): Delete.
	* cp-objcp-common.c (names_bultin_p): Rename
	DECL_IS_BUILTIN->DECL_IS_UNDECLARED_BUILTIN.
	* decl.c (decls_match): Likewise.  Replace
	DECL_UNDECLARED_BUILTIN_P with DECL_IS_UNDECLARED_BUILTIN.
	(duplicate_decls): Likewise.
	* decl2.c (collect_source_refs): Likewise.
	* name-lookup.c (anticipated_builtin_p, print_binding_level)
	(do_nonmember_using_decl): Likewise.
	* pt.c (builtin_pack_fn_p): Likewise.
	* typeck.c (error_args_num): Likewise.
	gcc/lto/
	* lto-symtab.c (lto_symtab_merge_decls_1): Rename
	DECL_IS_BUILTIN->DECL_IS_UNDECLARED_BUILTIN.
	gcc/go/
	* go-gcc.cc (Gcc_backend::call_expression): Rename
	DECL_IS_BUILTIN->DECL_IS_UNDECLARED_BUILTIN.
	libcc1/
	* libcc1plugin.cc (address_rewriter): Rename
	DECL_IS_BUILTIN->DECL_IS_UNDECLARED_BUILTIN.
	* libcp1plugin.cc (supplement_binding): Likewise.
2020-11-06 10:50:51 -08:00
David Candler
05f1883cfd aarch64: Use intrinsics for upper saturating shift right
The use of vqshrn_high_n_s32 was triggering an unneeded register move, because
sqshrn2 is destructive but was declared as inline assembly in arm_neon.h. This
patch implements sqshrn2 and uqshrn2 as actual intrinsics which do not trigger
the unnecessary move, along with new tests to cover them.

gcc/ChangeLog

2020-11-06  David Candler  <david.candler@arm.com>

	* config/aarch64/aarch64-builtins.c
	(TYPES_SHIFT2IMM): Add define.
	(TYPES_SHIFT2IMM_UUSS): Add define.
	(TYPES_USHIFT2IMM): Add define.
	* config/aarch64/aarch64-simd.md
	(aarch64_<sur>q<r>shr<u>n2_n<mode>): Add new insn for upper saturating shift right.
	* config/aarch64/aarch64-simd-builtins.def: Add intrinsics.
	* config/aarch64/arm_neon.h:
	(vqrshrn_high_n_s16): Expand using intrinsic rather than inline asm.
	(vqrshrn_high_n_s32): Likewise.
	(vqrshrn_high_n_s64): Likewise.
	(vqrshrn_high_n_u16): Likewise.
	(vqrshrn_high_n_u32): Likewise.
	(vqrshrn_high_n_u64): Likewise.
	(vqrshrun_high_n_s16): Likewise.
	(vqrshrun_high_n_s32): Likewise.
	(vqrshrun_high_n_s64): Likewise.
	(vqshrn_high_n_s16): Likewise.
	(vqshrn_high_n_s32): Likewise.
	(vqshrn_high_n_s64): Likewise.
	(vqshrn_high_n_u16): Likewise.
	(vqshrn_high_n_u32): Likewise.
	(vqshrn_high_n_u64): Likewise.
	(vqshrun_high_n_s16): Likewise.
	(vqshrun_high_n_s32): Likewise.
	(vqshrun_high_n_s64): Likewise.

gcc/testsuite/ChangeLog

2020-11-06  David Candler  <david.candler@arm.com>

	* gcc.target/aarch64/advsimd-intrinsics/vqrshrn_high_n.c: New testcase.
	* gcc.target/aarch64/advsimd-intrinsics/vqrshrun_high_n.c: Likewise.
	* gcc.target/aarch64/advsimd-intrinsics/vqshrn_high_n.c: Likewise.
	* gcc.target/aarch64/advsimd-intrinsics/vqshrun_high_n.c: Likewise.
	* gcc.target/aarch64/narrow_high-intrinsics.c: Update expected assembler
	for sqshrun2, sqrshrun2, sqshrn2, uqshrn2, sqrshrn2 and uqrshrn2.
2020-11-06 17:53:03 +00:00
Nathan Sidwell
4b5f564a5d libcpp: Provide date routine
Joseph pointed me at cb_get_source_date_epoch, which allows repeatable
builds and solves a FIXME I had on the modules branch.  Unfortunately
it's used exclusively to generate __DATE__ and __TIME__ values, which
fallback to using a time(2) call.  It'd be nicer if the preprocessor
made whatever time value it determined available to the rest of the
compiler.  So this patch adds a new cpp_get_date function, which
abstracts the call to the get_source_date_epoch hook, or uses time
directly.  The value is cached.  Thus the timestamp I end up putting
on CMI files matches __DATE__ and __TIME__ expansions.  That seems
worthwhile.

	libcpp/
	* include/cpplib.h (enum class CPP_time_kind): New.
	(cpp_get_date): Declare.
	* internal.h (struct cpp_reader): Replace source_date_epoch with
	time_stamp and time_stamp_kind.
	* init.c (cpp_create_reader): Initialize them.
	* macro.c (_cpp_builtin_macro_text): Use cpp_get_date.
	(cpp_get_date): Broken out from _cpp_builtin_macro_text and
	genericized.
2020-11-06 08:59:20 -08:00
Richard Sandiford
6c3ce63b04 aarch64: Support permutes on unpacked SVE vectors
This patch adds support for permuting unpacked SVE vectors using:

- DUP
- EXT
- REV[BHW]
- REV
- TRN[12]
- UZP[12]
- ZIP[12]

This involves rewriting the REV[BHW] permute code so that the inputs
and outputs of the insn pattern have the same mode as the vectors
being permuted.  This is different from the ACLE form, where the
reversal happens within individual elements rather than within
groups of multiple elements.

The patch does not add a conditional version of REV[BHW].  I'll come
back to that once we have partial-vector comparisons and selects.

The patch is really just enablement, adding an extra tool to the
toolbox.  It doesn't bring any significant vectorisation opportunities
on its own.  However, the patch does have one artificial example that
is now vectorised in a better way than before.

gcc/
	* config/aarch64/aarch64-modes.def (VNx2BF, VNx4BF): Adjust nunits
	and alignment based on the current VG.
	* config/aarch64/iterators.md (SVE_ALL, SVE_24, SVE_2, SVE_4): Add
	partial SVE BF modes.
	(UNSPEC_REVBHW): New unspec.
	(Vetype, Vesize, Vctype, VEL, Vel, vwcore, V_INT_CONTAINER)
	(v_int_container, VPRED, vpred): Handle partial SVE BF modes.
	(container_bits, Vcwtype): New mode attributes.
	* config/aarch64/aarch64-sve.md
	(@aarch64_sve_revbhw_<SVE_ALL:mode><PRED_HSD:mode>): New pattern.
	(@aarch64_sve_dup_lane<mode>): Extended from SVE_FULL to SVE_ALL.
	(@aarch64_sve_rev<mode>, @aarch64_sve_<perm_insn><mode>): Likewise.
	(@aarch64_sve_ext<mode>): Likewise.
	* config/aarch64/aarch64.c (aarch64_classify_vector_mode): Handle
	E_VNx2BFmode and E_VNx4BFmode.
	(aarch64_evpc_rev_local): Base the analysis on the container size
	instead of the element size.  Use the new aarch64_sve_revbhw
	patterns for SVE.
	(aarch64_evpc_dup): Handle partial SVE data modes.  Use the
	container size instead of the element size when applying the
	SVE immediate limit.  Fix a previously incorrect bounds check.
	(aarch64_expand_vec_perm_const_1): Handle partial SVE data modes.

gcc/testsuite/
	* gcc.target/aarch64/sve/dup_lane_2.c: New test.
	* gcc.target/aarch64/sve/dup_lane_3.c: Likewise.
	* gcc.target/aarch64/sve/ext_4.c: Likewise.
	* gcc.target/aarch64/sve/rev_2.c: Likewise.
	* gcc.target/aarch64/sve/revhw_1.c: Likewise.
	* gcc.target/aarch64/sve/revhw_2.c: Likewise.
	* gcc.target/aarch64/sve/slp_perm_8.c: Likewise.
	* gcc.target/aarch64/sve/trn1_2.c: Likewise.
	* gcc.target/aarch64/sve/trn2_2.c: Likewise.
	* gcc.target/aarch64/sve/uzp1_2.c: Likewise.
	* gcc.target/aarch64/sve/uzp2_2.c: Likewise.
	* gcc.target/aarch64/sve/zip1_2.c: Likewise.
	* gcc.target/aarch64/sve/zip2_2.c: Likewise.
2020-11-06 16:49:28 +00:00
Martin Liska
9b11203e33 Add -fbit-tests option.
gcc/ChangeLog:

	* common.opt: Add new -fbit-tests option.
	* doc/invoke.texi: Document the option.
	* tree-switch-conversion.c (bit_test_cluster::find_bit_tests):
	Use the option.
	* tree-switch-conversion.h (is_enabled): New function.

gcc/testsuite/ChangeLog:

	* gcc.dg/tree-ssa/switch-4.c: New test.
2020-11-06 16:54:26 +01:00
Richard Biener
d398949230 make PRE constant value IDs negative
This separates constant and non-constant value-ids to allow for
a more efficient constant_value_id_p and for more efficient bit-packing
inside the bitmap sets which never contain any constant values.

There's further optimization opportunities but at this stage
I'll do small refactorings.

2020-11-06  Richard Biener  <rguenther@suse.de>

	* tree-ssa-sccvn.h (get_max_constant_value_id): Declare.
	(get_next_constant_value_id): Likewise.
	(value_id_constant_p): Inline and simplify.
	* tree-ssa-sccvn.c (constant_value_ids): Remove.
	(next_constant_value_id): Add.
	(get_or_alloc_constant_value_id): Adjust.
	(value_id_constant_p): Remove definition.
	(get_max_constant_value_id): Define.
	(get_next_value_id): Add assert for overflow.
	(get_next_constant_value_id): Define.
	(run_rpo_vn): Adjust.
	(free_rpo_vn): Likewise.
	(do_rpo_vn): Initialize next_constant_value_id.
	* tree-ssa-pre.c (constant_value_expressions): New.
	(add_to_value): Split into constant/non-constant value
	handling.  Avoid exact re-allocation.
	(vn_valnum_from_value_id): Adjust.
	(phi_translate_1): Remove spurious exact re-allocation.
	(bitmap_find_leader): Adjust.  Make sure we return
	a CONSTANT value for a constant value id.
	(do_pre_regular_insertion): Use 2 auto-elements for avail.
	(do_pre_partial_partial_insertion): Likewise.
	(init_pre): Allocate constant_value_expressions.
	(fini_pre): Release constant_value_expressions.
2020-11-06 15:41:04 +01:00
Richard Biener
22175d0dc6 tree-optimization/97706 - handle PHIs in pattern recog mask precison
This adds handling of PHIs to mask precision compute which is
eventually needed to detect a bool pattern when the def chain
contains such a PHI node.

2020-11-06  Richard Biener  <rguenther@suse.de>

	PR tree-optimization/97706
	* tree-vect-patterns.c (possible_vector_mask_operation_p):
	PHIs are possible mask operations.
	(vect_determine_mask_precision): Handle PHIs.
	(vect_determine_precisions): Walk PHIs in BB analysis.

	* gcc.dg/vect/bb-slp-pr97706.c: New testcase.
2020-11-06 15:00:37 +01:00
Nathan Sidwell
1db815f4f3 c++: Parser tweaks
We need to adjust the wording for 'export'.  Between c++11 and c++20
it is deprecated.  Outside those ranges it is unsupported (at the
moment).  While here, there's also an unneeded setting of a bool --
it's inside an if block that just checked it was true.

	gcc/cp/
	* parser.c (cp_parser_template_declaration): Adjust 'export' warning.
	(cp_parser_explicit_specialization): Remove unneeded bool setting.
2020-11-06 06:00:14 -08:00
Kewen Lin
15bcd01a94 testsuite: fix malloc alignment in test
gcc/testsuite/ChangeLog:

	PR gcov-profile/97461
	* gcc.dg/tree-prof/pr97461.c: Return aligned memory.
2020-11-06 14:47:44 +01:00
Thomas Schwinge
4c27f90095 [Fortran] Remove OpenACC 'loop' inside 'parallel' special-case code
Instead, use the generic middle-end code, like already used for Fortran OpenACC
'loop' inside other compute constructs, orphaned 'loop' constructs, and C, C++
generally.

	gcc/fortran/
	* openmp.c (oacc_is_parallel, resolve_oacc_params_in_parallel):
	Remove.
	(resolve_oacc_loop_blocks): Don't call the former.
	gcc/testsuite/
	* gfortran.dg/goacc/loop-2-parallel-3.f95: Adjust.
2020-11-06 14:01:35 +01:00
Thomas Schwinge
52b7446217 Remove 'gfortran.dg/goacc/loop-6.f95'
What it's testing is adequately covered in other
'gfortran.dg/goacc/loop-2-parallel-*.f95' testcases.

	gcc/testsuite/
	* gfortran.dg/goacc/loop-6.f95: Remove.
2020-11-06 14:00:49 +01:00
Thomas Schwinge
4dfa1789ab Remove 'gfortran.dg/goacc/loop-5.f95'
What it's testing is adequately covered in other
'gfortran.dg/goacc/loop-2-*-tile.f95' testcases.

	gcc/testsuite/
	* gfortran.dg/goacc/loop-5.f95: Remove.
2020-11-06 14:00:14 +01:00
Martin Liska
f176773bc2 gcc-changelog: prevent double cherry-pick line
contrib/ChangeLog:

	* gcc-changelog/git_commit.py: Add new check.
	* gcc-changelog/test_email.py: Test it.
	* gcc-changelog/test_patches.txt: Add new patch.
2020-11-06 13:33:41 +01:00
Richard Biener
b88fdcc1c3 refactor SLP analysis
This passes down the graph entry kind down to vect_analyze_slp_instance
which simplifies it and makes it a shallow wrapper around
vect_build_slp_instance.

2020-11-06  Richard Biener  <rguenther@suse.de>

	* tree-vect-slp.c (vect_analyze_slp): Pass down the
	SLP graph entry kind.
	(vect_analyze_slp_instance): Simplify.
	(vect_build_slp_instance): Adjust.
	(vect_slp_check_for_constructors): Perform more
	eligibility checks here.
2020-11-06 13:33:19 +01:00
Jan Hubicka
7144270e2d Move ipa-refs from ggc to heap.
gcc/ChangeLog:

	* ipa-ref.h (enum ipa_ref_use): Remove GTY marker.
	(struct ipa_ref): Remove GTY marker; reorder for better packing.
	(struct ipa_ref_list): Remove GTY marker; turn references
	nad referring to va_heap, vl_ptr vectors; update accesors.
	* cgraph.h (symtab_node::iterate_reference): Update.
	* ipa-ref.c (ipa_ref::remove_reference): Update.
	* symtab.c (symtab_node::create_reference): Update.
	(symtab_node::remove_all_references): Update.
	(symtab_node::resolve_alias): Update.

gcc/cp/ChangeLog:

	* tree.c (cp_fix_function_decl_p): Do not access ipa_ref_list dirrectly.
2020-11-06 13:30:39 +01:00
Jakub Jelinek
8a2fd716c9 ipa-modref: Fix comment typos
2020-11-06  Jakub Jelinek  <jakub@redhat.com>

	* ipa-modref-tree.h: Fix comment typos.
	* ipa-modref.c: Likewise.
2020-11-06 13:20:51 +01:00
Andreas Krebbel
b92e4be3a6 IBM Z: Remove override of inline params
We have pretty aggressive values for inline-min-speedup and
max-inline-insns-auto. This unfortunately made more maybe
uninitialized warnings to appear when building on Z.

With the patch we go back to the default values.

gcc/ChangeLog:

	* config/s390/s390.c (s390_option_override_internal): Remove
	override of inline params.
2020-11-06 12:59:15 +01:00
Richard Biener
7307d8e107 tree-optimization/97706 - part one, refactor vect_determine_mask_precision
This computes vect_determine_mask_precision in a RPO forward walk
rather than in a backward walk and using a worklist.  It will make
fixing PR97706 easier but for bisecting I wanted it to be separate.

2020-11-06  Richard Biener  <rguenther@suse.de>

	PR tree-optimization/97706
	* tree-vect-patterns.c (vect_determine_mask_precision):
	Remove worklist operation.
	(vect_determine_stmt_precisions): Do not call
	vect_determine_mask_precision here.
	(vect_determine_precisions): Compute mask precision
	in a forward walk.
2020-11-06 12:43:33 +01:00
Tobias Burnus
c2e9f586fd OpenACC/Fortran: Reject '!$acc atomic update capture'
gcc/fortran/ChangeLog:

	* openmp.c (gfc_match_oacc_atomic): No longer accept 'update capture'.

gcc/testsuite/ChangeLog:

	* gfortran.dg/goacc-gomp/goacc-gomp.exp: New.
	* gfortran.dg/goacc-gomp/atomic.f90: New test.
	* gfortran.dg/goacc/atomic.f90: New test.
2020-11-06 12:30:20 +01:00
Tobias Burnus
a2c11935b0 OpenACC (C/C++): Fix 'acc atomic' parsing
gcc/c/ChangeLog:

	* c-parser.c (c_parser_omp_atomic): Add openacc parameter and update
	OpenACC matching.
	(c_parser_omp_construct): Update call.

gcc/cp/ChangeLog:

	* parser.c (cp_parser_omp_atomic): Add openacc parameter and update
	OpenACC matching.
	(cp_parser_omp_construct): Update call.

gcc/testsuite/ChangeLog:

	* c-c++-common/goacc-gomp/atomic.c: New test.
	* c-c++-common/goacc/atomic.c: New test.
2020-11-06 11:13:47 +01:00
Richard Biener
8ebedfcd86 tree-optimization/97732 - fix init of SLP induction vectorization
This PR exposes two issues - one that the vector builder treats
&x as eligible for VECTOR_CST elements and one that SLP induction
vectorization forgets to convert init elements to the vector
component type which makes a difference for pointer vs. integer.

2020-11-06  Richard Biener  <rguenther@suse.de>

	PR tree-optimization/97732
	* tree-vect-loop.c (vectorizable_induction): Convert the
	init elements to the vector component type.
	* gimple-fold.c (gimple_build_vector): Use CONSTANT_CLASS_P
	rather than TREE_CONSTANT to determine if elements are
	eligible for VECTOR_CSTs.

	* gcc.dg/vect/bb-slp-pr97732.c: New testcase.
2020-11-06 11:10:23 +01:00
Olivier Hainque
f11b1f9d15 Add dg-require-profiling directives to gcc.target/i386 tests
This patch adds /* { dg-require-profiling "-pg" } */
to a few tests in gcc.target/i386 that use -pg explicitly, to
prevent them from failing during runs for VxWorks targets.

2020-10-29  Olivier Hainque  <hainque@adacore.com>

gcc/testsuite/
	* gcc.target/i386/fentryname1.c: Add dg-require-profiling.
	* gcc.target/i386/fentryname2.c: Likewise.
	* gcc.target/i386/fentryname3.c: Likewise.
	* gcc.target/i386/returninst1.c: Likewise.
	* gcc.target/i386/returninst2.c: Likewise.
	* gcc.target/i386/returninst3.c: Likewise.
2020-11-06 09:55:16 +00:00
Olivier Hainque
ff47c61f07 Add dg-require-effective-target fpic to g++ tests
Add missing dg-require-effective-target fpic to few
g++.dg tests.

2020-11-02  Olivier Hainque  <hainque@adacore.com>

gcc/testsuite/
	* g++.dg/pr57878.C: Add dg-require-effective-target fpic.
	* g++.dg/pr65032.C: Likewise.
	* g++.dg/pr84279.C: Likewise.
	* g++.dg/inherit/thunk8.C: Likewise.
	* g++.dg/opt/pr64411.C: Likewise.
2020-11-06 09:55:16 +00:00
Jan Hubicka
6cef01c328 Add fnspec handling to ipa mode of ipa-modef.
gcc/:

	* attr-fnspec.h (attr_fnspec::get_str): New accessor
	* ipa-fnsummary.c (read_ipa_call_summary): Store also parm info
	for builtins.
	* ipa-modref.c (class fnspec_summary): New type.
	(class fnspec_summaries_t): New type.
	(modref_summary::modref_summary): Initialize writes_errno.
	(struct modref_summary_lto): Add writes_errno.
	(modref_summary_lto::modref_summary_lto): Initialize writes_errno.
	(modref_summary::dump): Check for NULL pointers.
	(modref_summary_lto::dump): Dump writes_errno.
	(collapse_loads): Move up in source file.
	(collapse_stores): New function.
	(process_fnspec): Handle also internal calls.
	(analyze_call): Likewise.
	(analyze_stmt): Store fnspec string if needed.
	(analyze_function): Initialize fnspec_sumarries.
	(modref_summaries_lto::duplicate): Copy writes_errno.
	(modref_write): Store writes_errno and fnspec summaries.
	(read_section): Read writes_errno and fnspec summaries.
	(modref_read): Initialize fnspec summaries.
	(update_signature): Fix formating.
	(compute_parm_map): Return true if sucessful.
	(get_parm_type): New function.
	(get_access_for_fnspec): New function.
	(propagate_unknown_call): New function.
	(modref_propagate_in_scc): Use it.
	(pass_ipa_modref::execute): Delete fnspec_summaries.
	(ipa_modref_c_finalize): Delete fnspec_summaries.
	* ipa-prop.c: Include attr-fnspec.h.
	(ipa_compute_jump_functions_for_bb):  Also compute jump functions
	for functions with fnspecs.
	(ipa_read_edge_info): Read jump functions for builtins.

gcc/testsuite/ChangeLog:

	* gcc.dg/ipa/modref-2.c: New test.
	* gcc.dg/lto/modref-2_0.c: New test.
2020-11-06 10:23:58 +01:00
Jan Hubicka
366099ff08 Move size time tables from GGC to heap
this patch moves size time tables out of ggc allocated memory.  This makes
sources bit cleaner and saves about 60MB of GGC memory that turns to about 45MB
of heap memory for cc1plus LTO build.

	* ipa-fnsummary.h (class size_time_entry): Do not GTY annotate.
	(class ipa_fnsummary): Turn size_time_table to auto_vec and
	call_size_time_table to effecient vec; update constructors.
	* ipa-fnsummary.c (ipa_fn_summary::account_size_time): Update.
	(ipa_fn_summary::~ipa_fn_summary): Update.
	(ipa_fn_summary_t::duplicate): Update.
	(ipa_dump_fn_summary): Update.
	(set_switch_stmt_execution_predicate): Update.
	(analyze_function_body): Update.
	(estimate_calls_size_and_time): Update.
	(ipa_call_context::estimate_size_and_time): Update.
	(ipa_merge_fn_summary_after_inlining): Update.
	(ipa_update_overall_fn_summary): Update.
	(inline_read_section): Update.
	(ipa_fn_summary_write): Update.
2020-11-06 10:05:11 +01:00
Jakub Jelinek
344106a966 c-common: Remove DEBUG_FUNCTION from verify_sequence_points
While perhaps the function name might suggest that it is a verification/debugging
only routine, it is actually implementation of the -Wsequence-point warning
and so doesn't need the DEBUG_FUNCTION macro on it.

2020-11-06  Jakub Jelinek  <jakub@redhat.com>

	* c-common.c (verify_sequence_points): Remove DEBUG_FUNCTION.
2020-11-06 09:52:59 +01:00
Richard Biener
2210bf6dec tree-optimization/97733 - fix SLP of reductions with zero relevant
This adds a missing check.

2020-11-06  Richard Biener  <rguenther@suse.de>

	PR tree-optimization/97733
	* tree-vect-slp.c (vect_analyze_slp_instance): If less
	than two reductions were relevant or live do nothing.
2020-11-06 08:34:16 +01:00
Tobias Burnus
c283a711c8 Fortran: Fix type-decl for PDT / wrong-code pdt_14.f03 issue [PR97652]
Parameterized derived types are handled in a special way and start with 'Pdt'.
If the 'P' is not uppercase, gfc_get_derived_type (which calls
gfc_get_module_backend_decl) does not find the existing declaration and
builds a new type. The middle end then sees those types as being different
and nonalising, creating an endless loop for pdt_14.f03.

gcc/fortran/ChangeLog:

	PR fortran/97652
	* module.c (mio_symbol): Fix symbol name for pdt_type.
2020-11-06 08:26:51 +01:00
Jeff Law
32ee472864 Improve overflow check
Convert
x < (short) ((unsigned short)x + const)
to
x <= SHORT_MAX – const
(and similarly for other integral types) if const is not 0.

gcc/
	PR tree-optimization/97223
	* match.pd (overflow detection and optimization): Handle conversions.

gcc/testsuite/

	* gcc.dg/no-strict-overflow-4.c: Adjust expected output.
2020-11-05 20:46:00 -07:00
Eugene Rozenfeld
6483f05989 Simplify x >> x to 0. This fixes PR96701.
gcc/
	* match.pd (x >> x): New pattern.

gcc/testsuite

	* gcc.dg/self-right-shift.c: New test.
2020-11-05 20:35:45 -07:00
Kito Cheng
56ecdc2f02 RISC-V: Mark non-export symbol static and const in riscv-common.c
gcc/ChangeLog:

	* common/config/riscv/riscv-common.c (riscv_implied_info):
	Add static and const.
	(riscv_subset_list::handle_implied_ext): Add const due to
	riscv_implied_info changed to const.
2020-11-06 11:20:20 +08:00
Kito Cheng
65e82636bc PR target/96307: Fix KASAN option checking.
- Disable kasan if target is unsupported and -fasan-shadow-offset= is not
   given, no matter `--param asan-stack=1` is given or not.

 - Moving KASAN option checking testcase to gcc.dg, those testcase could be
   useful for all other target which not support asan.

 - Verifed on riscv and x86.

gcc/ChangeLog:

	PR target/96307
	* toplev.c (process_options): Remove param_asan_stack checking for kasan
	option checking.

gcc/testsuite/ChangeLog:

	PR target/96307
	* gcc.dg/pr96307.c: New.
	* gcc.target/riscv/pr96260.c: Move this test case from here to ...
	* gcc.dg/pr96260.c: ... here.
	* gcc.target/riscv/pr91441.c: Move this test case from here to ...
	* gcc.dg/pr91441.c: ... here.
	* lib/target-supports.exp (check_effective_target_no_fsanitize_address):
	New proc.
2020-11-06 11:08:52 +08:00
liuhongt
f72af3af8d MAINTAINERS: Add myself for write after approval.
ChangeLog:

2019-03-17  Hongtao Liu  <hongtao.liu@intel.com>

	* MAINTAINERS (Write After Approval): Add myself.
2020-11-06 09:28:29 +08:00
GCC Administrator
0cfd9109e5 Daily bump. 2020-11-06 00:16:34 +00:00
Marek Polacek
44e1f63e20 c++: Add auto_diagnostic_group to check_handlers_1.
This was missing.

gcc/cp/ChangeLog:

	* except.c (check_handlers_1): Add auto_diagnostic_group.
2020-11-05 18:24:19 -05:00
Marek Polacek
e6fd02cc6d c++: Fix decltype(auto) deduction with rvalue ref [PR78209]
Here's a small deficiency in decltype(auto).  [dcl.type.auto.deduct]/5:
If the placeholder-type-specifier is of the form decltype(auto), [...]
the type deduced for T is determined [...] as though E had been the operand
of the decltype.  So:

  int &&i = 0;
  decltype(auto) j = i; // should behave like int &&j = i; error

We deduce j's type in do_auto_deduction via finish_decltype_type which
takes an 'id' argument.  Currently we compute 'id' as false, because
stripped_init is *i (a REFERENCE_REF_P).  But it seems to me we should
rather set 'id' to true here, by looking through the REFERENCE_REF_P,
so that finish_decltype_type DTRT.

gcc/cp/ChangeLog:

	PR c++/78209
	* pt.c (do_auto_deduction): If init is REFERENCE_REF_P, use its
	first operand.

gcc/testsuite/ChangeLog:

	PR c++/78209
	* g++.dg/cpp1y/decltype-auto1.C: New test.
2020-11-05 16:34:22 -05:00
Marek Polacek
1d87302a8e c++: Add -Wexceptions warning option [PR97675]
This PR asks that we add a warning option for an existing (very old)
warning, so that it can be disabled selectively.  clang++ uses
-Wexceptions for this, so I added this new option rather than using
e.g. -Wnoexcept.

gcc/c-family/ChangeLog:

	PR c++/97675
	* c.opt (Wexceptions): New option.

gcc/cp/ChangeLog:

	PR c++/97675
	* except.c (check_handlers_1): Use OPT_Wexceptions for the
	warning.  Use inform for the second part of the warning.

gcc/ChangeLog:

	PR c++/97675
	* doc/invoke.texi: Document -Wexceptions.

gcc/testsuite/ChangeLog:

	PR c++/97675
	* g++.old-deja/g++.eh/catch10.C: Adjust dg-warning.
	* g++.dg/warn/Wexceptions1.C: New test.
	* g++.dg/warn/Wexceptions2.C: New test.
2020-11-05 15:57:22 -05:00
Marek Polacek
5b2003105b c++: Implement -Wvexing-parse [PR25814]
This patch implements the -Wvexing-parse warning to warn about the
sneaky most vexing parse rule in C++: the cases when a declaration
looks like a variable definition, but the C++ language requires it
to be interpreted as a function declaration.  This warning is on by
default (like clang++).  From the docs:

  void f(double a) {
    int i();        // extern int i (void);
    int n(int(a));  // extern int n (int);
  }

  Another example:

  struct S { S(int); };
  void f(double a) {
    S x(int(a));   // extern struct S x (int);
    S y(int());    // extern struct S y (int (*) (void));
    S z();         // extern struct S z (void);
  }

You can find more on this in [dcl.ambig.res].

I spent a fair amount of time on fix-it hints so that GCC can recommend
various ways to resolve such an ambiguity.  Sometimes that's tricky.
E.g., suggesting default-initialization when the class doesn't have
a default constructor would not be optimal.  Suggesting {}-init is also
not trivial because it can use an initializer-list constructor if no
default constructor is available (which ()-init wouldn't do).  And of
course, pre-C++11, we shouldn't be recommending {}-init at all.

I also uncovered a bug in cp_parser_declarator, where we were setting
*parenthesized_p to true despite the comment saying the exact opposite.

gcc/c-family/ChangeLog:

	PR c++/25814
	* c.opt (Wvexing-parse): New option.

gcc/cp/ChangeLog:

	PR c++/25814
	* cp-tree.h (enum cp_tree_index): Add CPTI_EXPLICIT_VOID_LIST.
	(explicit_void_list_node): Define.
	(PARENTHESIZED_LIST_P): New macro.
	(struct cp_declarator): Add function::parens_loc.
	* decl.c (cxx_init_decl_processing): Initialize explicit_void_list_node.
	(grokparms): Also break when explicit_void_list_node.
	* parser.c (make_call_declarator): New location_t parameter.  Use it
	to set declarator->u.function.parens_loc.
	(cp_parser_lambda_declarator_opt): Pass UNKNOWN_LOCATION to
	make_call_declarator.
	(warn_about_ambiguous_parse): New function.
	(cp_parser_init_declarator): Call warn_about_ambiguous_parse.
	(cp_parser_declarator): Set *parenthesized_p to false rather than to
	true.
	(cp_parser_direct_declarator): Create a location for the function's
	parentheses and pass it to make_call_declarator.
	(cp_parser_parameter_declaration_clause): Return explicit_void_list_node
	for (void).
	(cp_parser_parameter_declaration_list): Set PARENTHESIZED_LIST_P
	in the parameters tree.

gcc/ChangeLog:

	PR c++/25814
	* doc/invoke.texi: Document -Wvexing-parse.

gcc/testsuite/ChangeLog:

	PR c++/25814
	* g++.dg/cpp2a/fn-template16.C: Add a dg-warning.
	* g++.dg/cpp2a/fn-template7.C: Likewise.
	* g++.dg/lookup/pr80891-5.C: Likewise.
	* g++.dg/lto/pr79050_0.C: Add extern.
	* g++.dg/lto/pr84805_0.C: Likewise.
	* g++.dg/parse/pr58898.C: Add a dg-warning.
	* g++.dg/template/scope5.C: Likewise.
	* g++.old-deja/g++.brendan/recurse.C: Likewise.
	* g++.old-deja/g++.jason/template4.C: Likewise.
	* g++.old-deja/g++.law/arm4.C: Likewise.
	* g++.old-deja/g++.mike/for2.C: Likewise.
	* g++.old-deja/g++.other/local4.C: Likewise.
	* g++.old-deja/g++.pt/crash3.C: Likewise.
	* g++.dg/warn/Wvexing-parse.C: New test.
	* g++.dg/warn/Wvexing-parse2.C: New test.
	* g++.dg/warn/Wvexing-parse3.C: New test.
	* g++.dg/warn/Wvexing-parse4.C: New test.
	* g++.dg/warn/Wvexing-parse5.C: New test.
	* g++.dg/warn/Wvexing-parse6.C: New test.
	* g++.dg/warn/Wvexing-parse7.C: New test.

libstdc++-v3/ChangeLog:

	PR c++/25814
	* testsuite/20_util/reference_wrapper/lwg2993.cc: Add a dg-warning.
	* testsuite/25_algorithms/generate_n/87982_neg.cc: Likewise.
2020-11-05 15:55:14 -05:00
Andrew MacLeod
22984f3f09 Pass multi-range from range_query::value_* routines
fix range-ops equal/not_equal to not reuse the result range as intermediary.
value_query::value routines should pasa multi-range in as some other rangeop
routines build into this result, so we may need better precision.

	gcc/
	PR tree-optimization/97725
	* range-op.cc (operator_equal::fold_range): Use new tmp value.
	(operator_not_equal::fold_range): Ditto.
	* value-query.cc (range_query::value_of_expr): Use int_range_max
	not a value_range.
	(range_query::value_on_edge): Ditto.
	(range_query::value_of_stmt): Ditto.
	gcc/testsuite/
	* gcc.dg/pr97725.c: New.
2020-11-05 15:26:49 -05:00
Jonathan Wakely
d16d45655d libstdc++: Fix typo in ChangeLog entry 2020-11-05 19:35:34 +00:00
Jonathan Wakely
cdd2d448d8 libstdc++: Fix constraints on std::optional comparisons [PR 96269]
The relational operators for std::optional were using the wrong types
in the declval expressions used to constrain them. Instead of using
const lvalues they were using non-const rvalues, which meant that a type
might satisfy the constraints but then give an error when the function
body was instantiated.

libstdc++-v3/ChangeLog:

	PR libstdc++/96269
	* include/std/optional (operator==, operator!=, operator<)
	(operator>, operator<=, operator>=): Fix types used in
	SFINAE constraints.
	* testsuite/20_util/optional/relops/96269.cc: New test.
2020-11-05 19:09:22 +00:00
Kwok Cheung Yeung
10508db867 openmp: Mark deprecated symbols in OpenMP 5.0
2020-11-05  Ulrich Drepper  <drepper@redhat.com>
	    Kwok Cheung Yeung  <kcy@codesourcery.com>

	libgomp/
	* Makefile.am (%.mod): Add -cpp and -fopenmp to compile flags.
	* Makefile.in: Regenerate.
	* fortran.c: Wrap uses of omp_set_nested and omp_get_nested with
	pragmas to ignore -Wdeprecated-declarations warnings.
	* icv.c: Likewise.
	* omp.h.in (__GOMP_DEPRECATED_5_0): Define.
	Mark omp_lock_hint_* enum values, omp_lock_hint_t, omp_set_nested,
	and omp_get_nested with __GOMP_DEPRECATED_5_0.
	* omp_lib.f90.in: Mark omp_get_nested and omp_set_nested as
	deprecated.
	* testsuite/libgomp.c++/affinity-1.C: Add -Wno-deprecated-declarations
	to test options.
	* testsuite/libgomp.c/affinity-1.c: Likewise.
	* testsuite/libgomp.c/affinity-2.c: Likewise.
	* testsuite/libgomp.c/appendix-a/a.15.1.c: Likewise.
	* testsuite/libgomp.c/lib-1.c: Likewise.
	* testsuite/libgomp.c/nested-1.c: Likewise.
	* testsuite/libgomp.c/nested-2.c: Likewise.
	* testsuite/libgomp.c/nested-3.c: Likewise.
	* testsuite/libgomp.c/pr32362-1.c: Likewise.
	* testsuite/libgomp.c/pr32362-2.c: Likewise.
	* testsuite/libgomp.c/pr32362-3.c: Likewise.
	* testsuite/libgomp.c/pr35549.c: Likewise.
	* testsuite/libgomp.c/pr42942.c: Likewise.
	* testsuite/libgomp.c/pr61200.c: Likewise.
	* testsuite/libgomp.c/sort-1.c: Likewise.
	* testsuite/libgomp.c/target-5.c: Likewise.
	* testsuite/libgomp.c/target-6.c: Likewise.
	* testsuite/libgomp.c/teams-1.c: Likewise.
	* testsuite/libgomp.c/thread-limit-1.c: Likewise.
	* testsuite/libgomp.c/thread-limit-2.c: Likewise.
	* testsuite/libgomp.c/thread-limit-4.c: Likewise.
	* testsuite/libgomp.fortran/affinity1.f90: Likewise.
	* testsuite/libgomp.fortran/lib1.f90: Likewise.
	* testsuite/libgomp.fortran/lib2.f: Likewise.
	* testsuite/libgomp.fortran/nested1.f90: Likewise.
	* testsuite/libgomp.fortran/teams1.f90: Likewise.
2020-11-05 10:32:56 -08:00
Olivier Hainque
7fa1b2c8da Handle use of r18 as a TCB pointer on aarch64-vxworks
Pick an alternate static chain regnum and document that
the port needs to be configured to issue -ffixed-r18 by
default.  The current definition of TARGET_OS_USES_R18 is
not honored by the common part of the back-end.

2020-11-04  Olivier Hainque  <hainque@adacore.com>

gcc/
	* config/aarch64/aarch64-vxworks.h (TARGET_OS_USES_R18):
	Remove definition.
	(STATIC_CHAIN_REGNUM): Redefine to 9.
2020-11-05 18:31:28 +00:00
Jonathan Wakely
2f93a2a03a libstdc++: Use non-throwing increment in recursive_directory_iterator [PR 97731]
As described in the PR, the recursive_directory_iterator constructor
calls advance(ec), but ec is a pointer so it calls _Dir::advance(bool).
The intention was to either call advance() or advance(*ec) depending
whether the pointer is null or not.

This fixes the bug and renames the parameter to ecptr to make similar
mistakes less likely in future.

libstdc++-v3/ChangeLog:

	PR libstdc++/97731
	* src/filesystem/dir.cc (recursive_directory_iterator): Call the
	right overload of _Dir::advance.
	* testsuite/experimental/filesystem/iterators/97731.cc: New test.
2020-11-05 18:01:26 +00:00
Jonathan Wakely
710508c7b1 libstdc++: Fix multiple definitions of std::exception_ptr functions [PR 97729]
This fixes some multiple definition errors caused by the changes for
PR libstdc++/90295. The previous solution for inlining the members of
std::exception_ptr but still exporting them from the library was to
suppress the 'inline' keyword on those functions when compiling
libsupc++/eh_ptr.cc, so they get defined in that file. That produces ODR
violations though, because there are now both inline and non-inline
definitions in the library, due to the use of std::exception_ptr in
other files sucg as src/c++11/future.cc.

The new solution is to define all the relevant members as 'inline'
unconditionally, but use __attribute__((used)) to cause definitions to
be emitted in libsupc++/eh_ptr.cc as before. This doesn't quite work
however, because PR c++/67453 means the attribute is ignored on
constructors and destructors. As a workaround, the old solution
(conditionally inline) is still used for those members, but they are
given the always_inline attribute so that they aren't emitted in
src/c++11/future.o as inline definitions.

libstdc++-v3/ChangeLog:

	PR libstdc++/97729
	* include/std/future (__basic_future::_M_get_result): Use
	nullptr for null pointer constant.
	* libsupc++/eh_ptr.cc (operator==, operator!=): Remove
	definitions.
	* libsupc++/exception_ptr.h (_GLIBCXX_EH_PTR_USED): Define
	macro to conditionally add __attribute__((__used__)).
	(operator==, operator!=, exception_ptr::exception_ptr())
	(exception_ptr::exception_ptr(const exception_ptr&))
	(exception_ptr::~exception_ptr())
	(exception_ptr::operator=(const exception_ptr&))
	(exception_ptr::swap(exception_ptr&)): Always define as
	inline. Add macro to be conditionally "used".
2020-11-05 18:01:25 +00:00
Jonathan Wakely
50b840ac5e libstdc++: Export basic_stringbuf constructor [PR 97729]
libstdc++-v3/ChangeLog:

	PR libstdc++/97729
	* config/abi/pre/gnu.ver (GLIBCXX_3.4.29): Add exports.
	* src/c++20/sstream-inst.cc (basic_stringbuf): Instantiate
	private constructor taking __xfer_bufptrs.
2020-11-05 18:01:25 +00:00
Olivier Hainque
8f027412f6 Add dg-require-effective-target fpic to gcc.dg test
The test uses -fpic and doesn't query the target support
for that option otherwise, resulting in failure on configurations
not supporting -fpic such as VxWorks for kernel mode.

2020-11-03  Olivier Hainque  <hainque@adacore.com>

gcc/testsuite/
	* gcc.dg/sms-12.c: Add dg-require-effective-target fpic.
2020-11-05 17:49:20 +00:00
Olivier Hainque
5773855c3f Move and adjust PROBE_STACK reg definitions for aarch64
The change moves the definitions of PROBE_STACK_FIRST_REG
and PROBE_STACK_SECOND_REG to a more appropriate place for such
items (here, in aarch64.md as suggested by Richard), and adjusts
their value from r9/r10 to r10/r11 to free r9 for a possibly
more general purpose (e.g. as a static chain at least on targets
which have a private use of r18, such as Windows or Vxworks).

2020-11-07  Olivier Hainque  <hainque@adacore.com>

gcc/
	* config/aarch64/aarch64.md: Define PROBE_STACK_FIRST_REGNUM
	and PROBE_STACK_SECOND_REGNUM constants, designating r10/r11.
	Replacements for the PROBE_STACK_FIRST/SECOND_REG constants in
	aarch64.c.
	* config/aarch64/aarch64.c (PROBE_STACK_FIRST_REG): Remove.
	(PROBE_STACK_SECOND_REG): Remove.
	(aarch64_emit_probe_stack_range): Adjust to the _REG -> _REGNUM
	suffix update for PROBE_STACK register numbers.
2020-11-05 17:28:58 +00:00
Jan Hubicka
58c9de4654 Add fnspecs for C++ new and delete operators
gcc/ChangeLog:

	* gimple.c (gimple_call_fnspec): Handle C++ new and delete.
	* gimple.h (gimple_call_from_new_or_delete): Constify parameter.

gcc/testsuite/ChangeLog:

	* g++.dg/ipa/devirt-24.C: Update template.
2020-11-05 18:19:07 +01:00
Tamar Christina
9f87fcf303 middle-end: guard slp-11b.c testcase on vec_lanes
They say third time is the charm.. It looks like the testcase
disables the cost model and so AArch64 we end up being able to
do the permute but on x86 we can't.  However when analyzing the
testcase I didn't disable the cost model hence the difference.

So I now guard the testcase on vect_load_lanes as there's not a
"can do any permute" test directive and load lanes is what I will
be fixing up next year so this should catch it.

gcc/testsuite/ChangeLog:

	* gcc.dg/vect/slp-11b.c: Guard statements.
2020-11-05 17:02:19 +00:00