1. 10 Oct, 2019 22 commits
    • [Ada] Define default value for Process field · eb73a3a9
      2019-10-10  Vadim Godunko  <godunko@adacore.com>
      
      gcc/ada/
      
      	* libgnat/g-exptty.ads (TTY_Process_Descriptor): Set default
      	value for Process.
      
      From-SVN: r276820
      Vadim Godunko committed
    • [Ada] T'Size in pragma Compile_Time_Error · 81ffc744
      2019-10-10  Bob Duff  <duff@adacore.com>
      
      gcc/ada/
      
      	* sem_prag.adb (Defer_Compile_Time_Warning_Error_To_BE): In
      	addition to saving the pragma for further processing, copy the
      	pragma into the main unit if necessary.
      
      From-SVN: r276819
      Bob Duff committed
    • [Ada] Assertion_Policy (Ignore) ignores invariants · 08f66419
      2019-10-10  Bob Duff  <duff@adacore.com>
      
      gcc/ada/
      
      	* einfo.ads, einfo.adb (Invariants_Ignored): New flag on types.
      	This leaves just one unused flag.
      	* sem_prag.adb (Invariant): Set the flag if appropriate.
      	* exp_util.adb (Make_Invariant_Call): Check the flag.
      
      From-SVN: r276818
      Bob Duff committed
    • [Ada] Fix handling of -gnatceg on incomplete unit · d145e562
      2019-10-10  Arnaud Charlet  <charlet@adacore.com>
      
      gcc/ada/
      
      	* gnat1drv.adb (Gnat1drv): Skip code generation when handling an
      	incomplete unit with -gnatceg.
      
      From-SVN: r276817
      Arnaud Charlet committed
    • [Ada] Generation of procedures for blocks occurring in elaboration code for LLVM · f68289d8
      2019-10-10  Gary Dismukes  <dismukes@adacore.com>
      
      gcc/ada/
      
      	* exp_ch7.adb (Check_Unnesting_Elaboration_Code): Various
      	cleanups.
      	(Set_Elab_Proc): New procedure to create the defining identifier
      	for a procedure created to encapsulate top-level blocks
      	occurring as a part of library package elaboration.
      	(First_Local_Scope): Function replaced by
      	Reset_Scopes_To_Elab_Proc.
      	(Reset_Scopes_To_Elab_Proc): New recursive procedure based on
      	First_Local_Scope, which it replaces, that is called to traverse
      	the statements of a library package body to locate top-level
      	blocks and determine whether they contain nested subprograms
      	that might address library-level objects of the package. Such
      	blocks (and loops) and certain top-level subprograms within the
      	statements will have their Scope reset here to match an
      	encapsulating procedure created by
      	Check_Unnesting_Elaboration_Code that will contain the
      	statements.
      	(Check_Unnesting_In_Decls_Or_Stmts): Code for handling blocks
      	factored out into Unnest_Block. Add handling for package
      	declarations and bodies, making recursive calls for
      	visible/private declarations, body declarations, statements, and
      	exception handlers. Also remove test for Is_Compilation_Unit:
      	caller tests for Is_Library_Level_Entity instead.  Also, this
      	proc's name was changed from Check_Unnesting_In_Declarations.
      	(Check_Unnesting_In_Handlers): New procedure to traverse a
      	sequence of exception handlers, calling
      	Check_Unnesting_In_Decls_Or_Stmts on the statements of each
      	handler.
      	(Expand_N_Package_Body): Call Check_Unnesting_* routines only
      	when Unnest_Subprogram_Mode is set and the current scope is a
      	library-level entity (which includes packages and instantiations
      	nested directly within a library unit).
      	(Expand_N_Package_Declaration): Call Check_Unnesting_* routines
      	only when Unnest_Subprogram_Mode is set and the current scope is
      	a library-level entity (which includes packages and
      	instantiations nested directly within a library unit).
      	(Unnest_Block): New procedure factored out of
      	Check_Unnesting_In_Decls_Or_Stmts, for creating a new procedure
      	to replace a block statement and resetting the Scope fields of
      	the block's top-level entities.
      
      From-SVN: r276816
      Gary Dismukes committed
    • [Ada] Mention GNAT Studio instead of GPS · d408dbfe
      2019-10-10  Anthony Leonardo Gracio  <leonardo@adacore.com>
      
      gcc/ada/
      
      	* doc/gnat_ugn/about_this_guide.rst,
      	doc/gnat_ugn/building_executable_programs_with_gnat.rst,
      	doc/gnat_ugn/getting_started_with_gnat.rst,
      	doc/gnat_ugn/gnat_and_program_execution.rst, errout.ads,
      	exp_ch3.adb, gnatls.adb, impunit.adb, lib-writ.ads, opt.ads,
      	sem_ch7.adb, sem_prag.adb, sem_res.adb, sem_warn.adb,
      	terminals.c: Replace GPS by GNAT Studio.
      	* gnat_ugn.texi: Regenerate.
      
      From-SVN: r276815
      Anthony Leonardo Gracio committed
    • [Ada] Spurious restriction violation on Ghost code · 95a79822
      2019-10-10  Ed Schonberg  <schonberg@adacore.com>
      
      gcc/ada/
      
      	* exp_ch6.adb (Expand_Simple_Function_Return_Statement): If the
      	function to which the return statement applies is an
      	Ignored_Ghost_Function, do not indicate that it uses the
      	secondary stack when the return type is unconstrained.
      
      From-SVN: r276814
      Ed Schonberg committed
    • [Ada] Replace in Ordered_Maps gets tampering failure · 2f26abcc
      2019-10-10  Bob Duff  <duff@adacore.com>
      
      gcc/ada/
      
      	* libgnat/a-cbdlli.adb, libgnat/a-cbhama.adb,
      	libgnat/a-cbhase.adb, libgnat/a-cbmutr.adb,
      	libgnat/a-cborma.adb, libgnat/a-cborse.adb,
      	libgnat/a-cdlili.adb, libgnat/a-cidlli.adb,
      	libgnat/a-cihama.adb, libgnat/a-cihase.adb,
      	libgnat/a-cimutr.adb, libgnat/a-ciorma.adb,
      	libgnat/a-ciorse.adb, libgnat/a-cobove.adb,
      	libgnat/a-cohama.adb, libgnat/a-cohase.adb,
      	libgnat/a-coinve.adb, libgnat/a-comutr.adb,
      	libgnat/a-conhel.adb, libgnat/a-convec.adb,
      	libgnat/a-coorma.adb, libgnat/a-coorse.adb (Reference,
      	Constant_Reference): Use Busy instead of Lock, so we forbid
      	tampering with cursors, rather than tampering with elements.
      
      From-SVN: r276813
      Bob Duff committed
    • [Ada] Spurious visibility error in predicate in generic instance · c223b764
      2019-10-10  Ed Schonberg  <schonberg@adacore.com>
      
      gcc/ada/
      
      	* sem_cat.adb (Set_Categorization_From_Pragma): Do not modify
      	any visibility settings if there are no compilation_unit pragmas
      	following the package declaration. Add comments for future
      	cleanup.
      
      From-SVN: r276812
      Ed Schonberg committed
    • [Ada] Flag Sec_Stack_Used incorrectly set by ghost code · 92219bab
      2019-10-10  Patrick Bernardi  <bernardi@adacore.com>
      
      gcc/ada/
      
      	* bindgen.adb (System_Secondary_Stack_Package_In_Closure):
      	Renamed flag System_Secondary_Stack_Used to be clearer of what
      	it represents.
      	(Gen_Adainit): Refactor secondary stack related code to make it
      	clearer.
      	* rtsfind.adb (Load_RTU): Don't set Sec_Stack_Used flag here
      	(RTE): Set Sec_Stack_Used if the System.Secondary_Stack is
      	referenced, but not if we're ignoring ghost code.
      
      From-SVN: r276811
      Patrick Bernardi committed
    • [Ada] Use declared type for deciding on SPARK pointer rules · f4f50084
      2019-10-10  Piotr Trojanek  <trojanek@adacore.com>
      
      gcc/ada/
      
      	* sem_prag.adb (Analyze_Global_In_Decl_Part): Simplify previous
      	test, just like in a recent commit we simplified a similar test
      	for Depends contract.
      
      From-SVN: r276810
      Piotr Trojanek committed
    • re PR target/88630 (Incorrect float negating together with convertion to int on ST-40) · f466596d
      gcc/
      	PR target/88630
      	* config/sh/sh.h (TARGET_FPU_SH4_300): New macro.
      	* config/sh/sh.c (sh_option_override): Enable fsca and fsrra insns
      	also for TARGET_FPU_SH4_300.
      	(sh_emit_mode_set): Check for TARGET_FPU_SH4_300 instead of
      	TARGET_SH4_300.
      	* config/sh/sh.md (toggle_pr): Add TARGET_FPU_SH4_300 condition.
      	(negsf2): Expand to either negsf2_fpscr or negsf2_no_fpscr.
      	(*negsf2_i): Split into ...
      	(negsf2_fpscr, negsf2_no_fpscr): ... these new patterns.
      	(abssf2): Expand to either abssf2_fpsc or abssf2_no_fpsc.
      	(**abssf2_i): Split into ...
      	(abssf2_fpscr, abssf2_no_fpscr): ... these new patterns.
      	(negdf2): Expand to either negdf2_fpscr or negdf2_no_fpscr.
      	(*negdf2_i): Split into ...
      	(negdf2_fpscr, negdf2_no_fpscr): ... these new patterns.
      	(absdf2): Expand to either absdf2_fpscr or absdf2_no_fpsc.
      	(**abssf2_i): Split into ...
      	(absdf2_fpscr, absdf2_no_fpscr): ... these new patterns.
      
      From-SVN: r276809
      Oleg Endo committed
    • Make comp_ptr_ttypes_real return bool. · 73dc68b9
      comp_ptr_ttypes_real could use bool instead of int since it only returns
      0 or 1.
      
      	* typeck.c (comp_ptr_ttypes_real): Change the return type to bool.
      	Use false instead of 0.
      
      From-SVN: r276808
      Marek Polacek committed
    • re PR middle-end/92046 (Command line options (that are per-functions) are… · 247afa98
      re PR middle-end/92046 (Command line options (that are per-functions) are affecting --params which are global.)
      
      2019-10-10  Richard Biener  <rguenther@suse.de>
      
      	PR middle-end/92046
      	* opts.c (finish_options): Do not influence global --params
      	from options that are adjustable per function.
      	* tree-vect-data-refs.c (vect_enhance_data_refs_alignment):
      	Apply --param adjustment based on active cost-model.
      	* tree-ssa-phiopt.c (cond_if_else_store_replacement): Disable
      	further store-sinking when vectorization or if-conversion
      	are not enabled.
      
      From-SVN: r276807
      Richard Biener committed
    • re PR middle-end/92037 (LTO bootstrap broken in selftests) · 019f36a6
      	PR middle-end/92037
      	* cgraph.c (symbol_table_test::symbol_table_test): Use ggc_alloc
      	rather than ggc_alloc_cleared to alloc symbol table.
      	* toplev.c (general_init): Likewise.
      	* cgraph.h (symbol_table): Explicitly construct every field.
      
      From-SVN: r276804
      Jan Hubicka committed
    • lto-common.c (unify_scc): Do not merge anonymous NAMESPACE_DECLs. · 9142736e
      2019-10-10  Richard Biener  <rguenther@suse.de>
      
      	* lto-common.c (unify_scc): Do not merge anonymous NAMESPACE_DECLs.
      
      From-SVN: r276796
      Richard Biener committed
    • S/390: Add support for z15 as CPU name. · 80f8cd77
      So far z15 was identified as arch13. After the machine has been
      announced we can now add the real name.
      
      gcc/ChangeLog:
      
      2019-10-10  Andreas Krebbel  <krebbel@linux.ibm.com>
      
      	* common/config/s390/s390-common.c (PF_ARCH13): Rename to...
      	(PF_Z15): ... this.
      	* config.gcc: Add z15 as option for --with-arch and --with-tune
      	configure switches.
      	* config/s390/s390-c.c (s390_resolve_overloaded_builtin): Add
      	error reporting for unsupported builtins.
      	* config/s390/s390-opts.h (enum processor_type): Rename
      	PROCESSOR_8561_ARCH13 to PROCESSOR_8561_Z15.
      	* config/s390/8561.md: Rename arch13 to z15 throughout the file.
      	* config/s390/driver-native.c (s390_host_detect_local_cpu):
      	Likewise.
      	* config/s390/s390-builtins.def: Likewise.
      	* config/s390/s390.c (processor_table): Add z15 as option and keep arch13 as alternative.
      	(s390_expand_builtin): Add missing check for unsupported builtins.
      	(s390_canonicalize_comparison): Rename TARGET_ARCH13 to TARGET_Z15.
      	(s390_rtx_costs): Likewise.
      	(s390_get_sched_attrmask): Rename arch13 to z15.
      	(s390_get_unit_mask): Likewise.
      	(s390_is_fpd): Likewise.
      	(s390_is_fxd): Likewise.
      	* config/s390/s390.h (enum processor_flags): Likewise.
      	* config/s390/s390.md: Likewise.
      	* config/s390/vector.md: Likewise.
      	* config/s390/vx-builtins.md: Likewise.
      	* config/s390/s390.opt: Add z15 to processor_type value.
      
      From-SVN: r276792
      Andreas Krebbel committed
    • [Fortran, OpenMP] Actually pass use_device_addr on to the middle end · 4a9150d0
              * trans-openmp.c (gfc_trans_omp_clauses): Actually pass
              use_device_addr on to the middle end.
      
      From-SVN: r276791
      Tobias Burnus committed
    • S/390: PR91035 Fix call to __morestack · 051fb43f
      For the call to __morestack we use a special ABI in the S/390 back-end
      which requires us to emit a parameter block to the .rodata section.
      It contains the label whereto __morestack needs to return.  The
      parameter block needs to be explicit in RTL since we also need to take
      the address of it loaded into r1 in order to pass its address to
      __morestack.  In order to express correctly what __morestack does its
      RTX also contained the return label. Hence we had the return label to
      occur twice in the insn stream.  This is problematic when it comes to
      redirecting edges.  The correlation between these two occurrences of
      the label cannot be expressed so when doing a redirect only the label
      in the jump RTX gets modified while the parameter block label stays as
      is.
      
      The patch avoids having two instancs of the label by merging the
      parameter block generation and the __morestack call RTX into one. By
      doing this I could also get rid of the unspec which was required for
      the parameter block generation so far.
      
      gcc/ChangeLog:
      
      2019-10-10  Andreas Krebbel  <krebbel@linux.ibm.com>
      
      	PR target/91035
      	* config/s390/s390-protos.h (s390_output_split_stack_data): Add
      	prototype.
      	* config/s390/s390.md (UNSPECV_SPLIT_STACK_DATA): Remove.
      	("split_stack_data", "split_stack_call")
      	("split_stack_call_<mode>", "split_stack_cond_call")
      	("split_stack_cond_call_<mode>"): Remove.
      	("@split_stack_call<mode>", "@split_stack_cond_call<mode>"): New
      	insn definition.
      	* config/s390/s390.c (s390_output_split_stack_data): New function.
      	(s390_expand_split_stack_prologue): Use the merged expander.
      
      From-SVN: r276790
      Andreas Krebbel committed
    • c-common.h (c_omp_check_context_selector, [...]): Declare. · 94e7f906
      c-family/
      	* c-common.h (c_omp_check_context_selector,
      	c_omp_get_context_selector): Declare.
      	* c-omp.c (c_omp_declare_simd_clauses_to_numbers): Fix spelling
      	in diagnostic message.
      	(c_omp_check_context_selector, c_omp_get_context_selector): New
      	functions.
      	* c-attribs.c (c_common_attribute_table): Add "omp declare variant"
      	attribute.
      	(handle_omp_declare_variant_attribute): New function.
      c/
      	* c-parser.c (c_parser_omp_all_clauses): Add NESTED_P argument, if
      	true, terminate processing on closing paren and don't skip to end of
      	pragma line.
      	(c_parser_omp_declare_simd): Handle also declare variant.
      	(omp_construct_selectors, omp_device_selectors,
      	omp_implementation_selectors, omp_user_selectors): New variables.
      	(c_parser_omp_context_selector,
      	c_parser_omp_context_selector_specification,
      	c_finish_omp_declare_variant): New functions.
      	(c_finish_omp_declare_simd): Handle both declare simd and
      	declare variant.
      	(c_parser_omp_declare): Handle declare variant.
      cp/
      	* parser.h (struct cp_omp_declare_simd_data): Add variant_p member.
      	* parser.c (cp_ensure_no_omp_declare_simd): Handle both declare simd
      	and declare variant.
      	(cp_parser_oacc_all_clauses): Formatting fix.
      	(cp_parser_omp_all_clauses): Add NESTED_P argument, if true, terminate
      	processing on closing paren and don't skip to end of pragma line.
      	(cp_parser_omp_declare_simd): Add VARIANT_P argument.  Handle also
      	declare variant.
      	(omp_construct_selectors, omp_device_selectors,
      	omp_implementation_selectors, omp_user_selectors): New variables.
      	(cp_parser_omp_context_selector,
      	cp_parser_omp_context_selector_specification,
      	cp_finish_omp_declare_variant): New functions.
      	(cp_parser_late_parsing_omp_declare_simd): Handle also declare variant.
      	(cp_parser_omp_declare): Handle declare variant.
      testsuite/
      	* c-c++-common/gomp/declare-variant-1.c: New test.
      	* c-c++-common/gomp/declare-variant-2.c: New test.
      	* c-c++-common/gomp/declare-variant-3.c: New test.
      	* g++.dg/gomp/this-1.C: Adjust for diagnostic message spelling fix.
      	* gcc.dg/gomp/declare-variant-1.c: New test.
      	* gcc.dg/gomp/declare-variant-2.c: New test.
      
      From-SVN: r276789
      Jakub Jelinek committed
    • Daily bump. · 66ef6ac5
      From-SVN: r276786
      GCC Administrator committed
  2. 09 Oct, 2019 18 commits
    • PR tree-optimization/90879 - fold zero-equality of strcmp between a longer… · a7160771
      PR tree-optimization/90879 - fold zero-equality of strcmp between a longer string and a smaller array
      
      gcc/c-family/ChangeLog:
      
      	PR tree-optimization/90879
      	* c.opt (-Wstring-compare): New option.
      
      gcc/testsuite/ChangeLog:
      
      	PR tree-optimization/90879
      	* gcc.dg/Wstring-compare-2.c: New test.
      	* gcc.dg/Wstring-compare.c: New test.
      	* gcc.dg/strcmpopt_3.c: Scan the optmized dump instead of strlen.
      	* gcc.dg/strcmpopt_6.c: New test.
      	* gcc.dg/strlenopt-65.c: Remove uinnecessary declarations, add
      	test cases.
      	* gcc.dg/strlenopt-66.c: Run it.
      	* gcc.dg/strlenopt-68.c: New test.
      
      gcc/ChangeLog:
      
      	PR tree-optimization/90879
      	* builtins.c (check_access): Avoid using maxbound when null.
      	* calls.c (maybe_warn_nonstring_arg): Adjust to get_range_strlen change.
      	* doc/invoke.texi (-Wstring-compare): Document new warning option.
      	* gimple-fold.c (get_range_strlen_tree): Make setting maxbound
      	conditional.
      	(get_range_strlen): Overwrite initial maxbound when non-null.
      	* gimple-ssa-sprintf.c (get_string_length): Adjust to get_range_strlen
      	changes.
      	* tree-ssa-strlen.c (maybe_diag_stxncpy_trunc): Same.
      	(used_only_for_zero_equality): New function.
      	(handle_builtin_memcmp): Call it.
      	(determine_min_objsize): Return an integer instead of tree.
      	(get_len_or_size, strxcmp_eqz_result): New functions.
      	(maybe_warn_pointless_strcmp): New function.
      	(handle_builtin_string_cmp): Call it.  Fold zero-equality of strcmp
      	between a longer string and a smaller array.
      	(get_range_strlen_dynamic): Overwrite initial maxbound when non-null.
      
      From-SVN: r276773
      Martin Sebor committed
    • Implement C++20 P0388R4, DR 1307, and DR 330. · 89e0a492
      This patch implements P0388R4, Permit conversions to arrays of unknown bound,
      <http://wg21.link/p0388r4>.  CWG 393 allowed references to arrays of unknown
      bound and this C++20 feature allows conversions like
      
        void f(int(&)[]);
        int arr[1];
      
        void g() { f(arr); }
        int(&r)[] = arr;
      
      The proposal seemed fairly straightforward but it turned out to be quite
      shifty.  I found out that I needed to implement DR 2352 (done), and also
      DR 1307 (done in this patch).  The latter DR added wording for
      list-initialization ranking of references to arrays which this proposal
      extends.  DR 330 was also implemented in this patch.
      
      	PR c++/91364 - P0388R4: Permit conversions to arrays of	unknown bound.
      	PR c++/69531 - DR 1307: Differently bounded array parameters.
      	PR c++/88128 - DR 330: Qual convs and pointers to arrays of pointers.
      	* call.c (build_array_conv): Build ck_identity at the beginning
      	of the conversion.
      	(standard_conversion): Pass bounds_none to comp_ptr_ttypes_const.
      	(maybe_warn_array_conv): New.
      	(convert_like_real): Call it.  Add an error message about converting
      	from arrays of unknown bounds.
      	(conv_get_original_expr): New.
      	(nelts_initialized_by_list_init): New.
      	(conv_binds_to_array_of_unknown_bound): New.
      	(compare_ics): Implement list-initialization ranking based on
      	array sizes, as specified in DR 1307 and P0388R.
      	* cp-tree.h (comp_ptr_ttypes_const): Adjust declaration.
      	(compare_bounds_t): New enum.
      	* typeck.c (comp_array_types): New bool and compare_bounds_t
      	parameters.  Use them.
      	(structural_comptypes): Adjust the call to comp_array_types.
      	(similar_type_p): Handle ARRAY_TYPE.
      	(build_const_cast_1): Pass bounds_none to comp_ptr_ttypes_const.
      	(comp_ptr_ttypes_real): Don't check cv-quals of ARRAY_TYPEs.  Use
      	comp_array_types to compare array types.  Look through arrays as per
      	DR 330.
      	(comp_ptr_ttypes_const): Use comp_array_types to compare array types.
      	Look through arrays as per DR 330.
      
      	* g++.dg/conversion/qual1.C: New test.
      	* g++.dg/conversion/qual2.C: New test.
      	* g++.dg/conversion/qual3.C: New test.
      	* g++.dg/conversion/ref2.C: New test.
      	* g++.dg/conversion/ref3.C: New test.
      	* g++.dg/cpp0x/initlist-array3.C: Remove dg-error.
      	* g++.dg/cpp0x/initlist-array7.C: New test.
      	* g++.dg/cpp0x/initlist-array8.C: New test.
      	* g++.dg/cpp2a/array-conv1.C: New test.
      	* g++.dg/cpp2a/array-conv10.C: New test.
      	* g++.dg/cpp2a/array-conv11.C: New test.
      	* g++.dg/cpp2a/array-conv12.C: New test.
      	* g++.dg/cpp2a/array-conv13.C: New test.
      	* g++.dg/cpp2a/array-conv14.C: New test.
      	* g++.dg/cpp2a/array-conv15.C: New test.
      	* g++.dg/cpp2a/array-conv16.C: New test.
      	* g++.dg/cpp2a/array-conv17.C: New test.
      	* g++.dg/cpp2a/array-conv2.C: New test.
      	* g++.dg/cpp2a/array-conv3.C: New test.
      	* g++.dg/cpp2a/array-conv4.C: New test.
      	* g++.dg/cpp2a/array-conv5.C: New test.
      	* g++.dg/cpp2a/array-conv6.C: New test.
      	* g++.dg/cpp2a/array-conv7.C: New test.
      	* g++.dg/cpp2a/array-conv8.C: New test.
      	* g++.dg/cpp2a/array-conv9.C: New test.
      	* g++.old-deja/g++.bugs/900321_01.C: Adjust dg-error.
      
      	* testsuite/23_containers/span/lwg3255.cc: Adjust test to match the
      	post-P0388R4 behavior.
      
      From-SVN: r276771
      Marek Polacek committed
    • Fix typo in test name. · 3b29211a
      From-SVN: r276770
      Marek Polacek committed
    • [Darwin] Improve Objective-C NeXT ABI version check. · dee1497c
      We were missing a check for the case that user's ABI was > 2 and the
      codegen was for 64 bit.
      
      gcc/ChangeLog:
      
      2019-10-09  Iain Sandoe  <iain@sandoe.co.uk>
      
      	* config/darwin.c (darwin_override_options): Make the check for
      	Objective-C ABI version more specific for 64bit code.
      
      From-SVN: r276768
      Iain Sandoe committed
    • [Darwin, machopic 3/n] Set a SYMBOL flag for indirections. · a0e887be
      We are able to treat these specially where needed in legitimate address
      tests (specifically, they are guaranteed to be pointer-aligned).
      
      gcc/ChangeLog:
      
      2019-10-09  Iain Sandoe  <iain@sandoe.co.uk>
      
      	* config/darwin.c (machopic_indirect_data_reference): Set flag to
      	indicate that the new symbol is an indirection.
      	(machopic_indirect_call_target): Likewise.
      	* config/darwin.h (MACHO_SYMBOL_FLAG_INDIRECTION): New.
      	(MACHO_SYMBOL_INDIRECTION_P): New.
      	(MACHO_SYMBOL_FLAG_STATIC): Adjust bit number.
      
      From-SVN: r276767
      Iain Sandoe committed
    • PR c++/92032 - DR 1601: Promotion of enum with fixed underlying type. · e295e3d9
      I've been messing with compare_ics recently and noticed that we don't
      implement CWG 1601, which should be fairly easy.  Thus this patch.
      
      The motivating example is 
        enum E : char { e };
        void f(char);
        void f(int);
        void g() {
          f(e);
        }
      where the call to f was ambiguous but we should choose f(char).
      
      Currently we give f(int) cr_promotion in standard_conversion, while
      f(char) remains cr_std, which is worse than cr_promotion.  So I thought
      I'd give it cr_promotion also and then add a tiebreaker to compare_ics.
      
      	* call.c (standard_conversion): When converting an enumeration with
      	a fixed underlying type to the underlying type, give it the cr_promotion
      	rank.
      	(compare_ics): Implement a tiebreaker as per CWG 1601.
      
      	* g++.dg/cpp0x/scoped_enum10.C: New test.
      	* g++.dg/cpp0x/scoped_enum11.C: New test.
      
      From-SVN: r276766
      Marek Polacek committed
    • Update the concepts implementation to conform to C++20. · cb57504a
      gcc/c-family/
      	* c-cppbuiltin.c (c_cpp_builtins): Use new feature test values for
      	concepts when -std=c++2a. Bump __cpp_concepts to 201907.
      	* c.opt: Add -Wconcepts-ts.
      	* c-opts.c (c_common_post_options): Warn when -fconcepts is used
      	with -std=c++2a. Disable warning for -fconcepts in C++20 mode.
      	(set_std_cxx2a): Enable concepts by default.
      gcc/cp/
      	* call.c (build_new_function_call): Don't evaluate concepts here.
      	(constraint_failure): Don't record the template.
      	(print_z_candidate): Don't extract the template.
      	* class.c (add_method): When overloading, hide ineligible special
      	member fns.
      	(check_methods): Set TYPE_HAS_COMPLEX_* here.
      	* constexpr.c (cxx_eval_constant_expression): Evaluate concepts.
      	(maybe_initialize_fundef_copies_table): Remove.
      	(get_fundef_copy): Use hash_map_safe_get_or_insert.
      	(clear_cv_and_fold_caches): Clear the satisfaction cache.
      	* constraint.cc (known_non_bool_p): New.
      	(parsing_constraint_expression_sentinel): Renamed from
      	expanding_constraint_sentinel.
      	(check_constraint_operands): New.
      	(check_constraint_atom): New.
      	(finish_constraint_binary_op): New.
      	(finish_constraint_or_expr): Likewise.
      	(finish_constraint_and_expr): Likewise.
      	(finish_constraint_primary_expr): Likewise.
      	(combine_constraint_expressions): New.
      	(finish_requires_expr): Add location parm.
      	(get_concept_definition): Return the initializer of concept definitions.
      	(get_template_head_requirements): New.
      	(get_trailing_function_requirements): New.
      	(deduce_constrained_parameter): Check if the identifier or template-id
      	is a concept definition.
      	(resolve_concept_definition_check): Removed.
      	(resolve_variable_concept_check): Removed.
      	(resolve_concept_check): New.
      	(resolve_constraint_check): Handle concept definitions.
      	converting arguments.
      	(function_concept_check_p): Removed.
      	(variable_concept_check_p): Removed.
      	(unpack_concept_check): New.
      	(get_concept_check_template): New.
      	(build_call_check): Moved and renamed to build_function_check.
      	(build_concept_check_arguments): make static.
      	(build_function_check): Always do overload resolution
      	in order to force conversion of template arguments (i.e., actually
      	check that the use of a concept is valid).
      	(build_standard_check): Renamed from build_real_concept_check.
      	(build_real_concept_check): Build checks for C++2a concepts by
      	(build_wildcard_concept_check): New.
      	(build_concept_check): Use build_real_concept_check. New overload.
      	(build_constraints): Save expressions, not normalized constraints.
      	(build_concept_id): New. Pass tf_warning_or_error.
      	(build_type_constraint): New.
      	(finish_type_constraints): New.
      	(associate_classtype_constraints): Also add constraints to union
      	types. Note the original declaration in errors. Don't return
      	error_mark_node in order to avoid an assertion later.
      	(push_down_pack_expansion): Remove.
      	(finish_shorthand_constraint): Make fold expressions, not naked
      	parameter packs. Always apply the constraint to each template argument.
      	(check_introduction_list): New. Fail if not enough
      	names are introduced.
      	(finish_template_introduction): Don't normalize constraints. Pass
      	tsubst flags. Check for insufficient introductions.
      	(placeholder_extract_concept_and_args): Handle the template-id case.
      	Unpack function concept checks correctly.
      	(tsubst_simple_requirement): Return errors if they occur. Don't
      	process as a template.
      	(tsubst_type_requirement): Likewise.
      	(type_deducible_p): New. Wrap the input expression in parens for the
      	purpose of deduction.
      	(expression_convertible_t): New.
      	(tsubst_compound_requirement): Use new deduction, conversion predicates.
      	(tsubst_nested_requirement): Return errors if they occur. Don't
      	process as a template. Instantiate and evaluate the nested requirement.
      	(tsubst_valid_expression_requirement): New.
      	(tsubst_simple_requirement): Use tsubst_valid_expression_requirement.
      	(tsubst_compound_requirement): Use tsubst_valid_expression_requirement.
      	(check_constaint_variables): New.
      	(tsubst_constraint_variables): Check that type substitutions are valid.
      	(tsubst_requires_expr): Likewise. Produce new requires-exprs during
      	template substitution. Copy the previous local specialization stack,
      	so references to non-local parameters can be found. Use cp_unevaluated.
      	(tsubst_constraint): New. Don't evaluate concept checks.
      	(subst_info): New.
      	(norm_info): New. Used to build a normalization tree for concept check
      	diagnostics.
      	(debug_parameter_mapping): New.
      	(debug_argument_list): New.
      	(expand_concept): Removed.
      	(normalize_logical_operation): Pass subst_info through call.
      	(normalize_pack_expansion): Remove.
      	(normalize_simple_requirement): Removed
      	(normalize_type_requirement): Removed
      	(normalize_compound_requirement): Removed
      	(normalize_nested_requirement): Removed
      	(normalize_requirement): Removed
      	(normalize_requirements): Removed
      	(normalize_requires_expression): Removed
      	(normalize_variable_concept_check): Removed.
      	(normalize_function_concept_check): Removed.
      	(normalize_concept_check): Merged all normalize_*_check here.
      	Substitute through written template arguments before normalizing the
      	definition. Only substitute the innermost template arguments.
      	(check_for_logical_overloads): Delete.
      	(map_arguments): New. Associate template parameters with arguments.
      	(build_parameter_mapping): New. Extract used parameters.
      	(normalize_expression): Rewrite.
      	(normalize_conjunction): Removed
      	(normalize_disjunction): Removed
      	(normalize_predicate_constraint): Removed
      	(normalize_parameterized_constraint): Removed
      	(normalized_map): New variable.
      	(get_normalized_constraints): New entry point for normalization.
      	Establishes a timer.
      	(get_normalized_constraints_from_info): New.
      	(get_normalized_constraints_from_decl): New. Turn on template processing
      	prior to normalization. Handle inheriting ctors. Build the
      	normalization arguments from the full set of template parameters of the
      	most general template. This guarantees that we have no concrete arguments
      	in the parameter mapping (e.g., from template members of class
      	templates). Cache normalizations.
      	(normalize_concept_definition): New. Cache normalizations.
      	(normalize_template_requirements): New.
      	(normalize_nontemplate_requirements): New.
      	(normalize_constraint_expression): New.
      	(tsubst_parameter_mapping): New.
      	(get_mapped_args): New.
      	(parameter_mapping_equivalent_p): New. Use template_args_equal.
      	(atomic_constraints_identical_p): New.
      	(hash_atomic_constraint): New.
      	(satisfying_constraint_p): New. Guard against recursive evaluation of
      	constraints during satisfaction.
      	(satisfy_conjunction): New.
      	(satisfy_disjunction): New.
      	(sat_entry): New class for hashing satisfaction results.
      	(sat_hasher): New hash traits.
      	(sat_cache): New.
      	(get_satisfaction): New. Returns cached satisfaction result.
      	(save_satisfaction): New. Caches a satisfaction result.
      	(clear_satisfaction_cache): New.
      	(satisfaction_cache): New. Helps manage satisfaction cache requests.
      	(decl_satisfied_cache): New.
      	(satisfy_atom): New.
      	(satisfy_constraint_r): New.
      	(satisfy_constraint): Use new satisfaction algorithm.
      	(evaluate_concept_check): New.
      	(evaluate_concept): Removed.
      	(evaluate_function_concept): Removed.
      	(evaluate_variable_concept): Removed.
      	(satisfy_constraint_expression): New.
      	(constraint_expression_satisfied_p): New.
      	(constraints_satisfied_p): Use strip_inheriting_ctors. Use
      	push_/pop_access_scope.
      	(more_constrained): Normalize before calling out to subsumption. Allow
      	classes as arguments.
      	(strictly_subsumes): Allow non-templates as arguments. Accept a new
      	template argument.
      	(weakly_subsumes): New.
      	(at_least_as_constrained): Removed.
      	(diagnose_other_expression): Removed.
      	(diagnose_predicate_constraint): Removed.
      	(diagnose_pack_expansion): Removed.
      	(diagnose_check_constraint): Removed.
      	(diagnose_logical_constraint): Removed.
      	(diagnose_expression_constraint): Removed.
      	(diagnose_type_constraint): Removed.
      	(diagnose_implicit_conversion_constraint): Removed.
      	(diagnose_argument_deduction_constraint): Removed.
      	(diagnose_exception_constraint): Removed.
      	(diagnose_parameterized_constraint): Removed.
      	(diagnose_argument_deduction_constraint): Removed.
      	(diagnose_argument_deduction_constraint): Removed.
      	(diagnose_argument_deduction_constraint): Removed.
      	(diagnose_trait_expr): New.
      	(diagnose_requires_expr): New.
      	(diagnose_atomic_constraint): New.
      	(diagnose_valid_expression) Stop wrongly diagnosing valid expressions.
      	Don't substitute as if in template decls. This causes substitution
      	to generate expressions that aren't suitable for use with the noexcept
      	routines.
      	(diagnose_valid_type) Likewise.
      	(diagnose_compound_requirement) Actually emit diagnostics for
      	the causes of errors.Call force_paren_expr_uneval.
      	(diagnose_declaration_constraints): Turn on template processing to
      	suppress certain analyses.
      	* cp-objcp-common.c (cp_common_init_ts): Make concepts typed.
      	(cp_get_debug_type): Use hash_map_safe_*.
      	* cp-tree.h: New function declarations for semantic actions, other
      	facilities. Remove declaration no longer used or needed. Remove
      	unused _CONSTR macros.
      	(LANG_DECL_HAS_MIN): Add CONCEPT_DECL.
      	(template_info_decl_check): Factor macro check into an inline function.
      	(DECL_TEMPLATE_INFO): Use new check facility.
      	(finish_concept_definition): New. Don't invalid concept declarations
      	with invalid initializers.
      	(find_template_parameters): New.
      	(concept_definition_p): New.
      	(concept_check_p): New.
      	(variable_concept_check_p): New.
      	(force_paren_expr_uneval): New.
      	(ovl_iterator::using_p): A USING_DECL by itself was also
      	introduced by a using-declaration.
      	(struct tree_template_info): Use tree_base instead of
      	tree_common. Add tmpl and args fields.
      	(TI_TEMPLATE, TI_ARGS): Adjust.
      	(DECLTYPE_FOR_INIT_CAPTURE): Remove.
      	(CONSTR_CHECK, CONSTR_INFO, CONSTR_EXPR, CONSTR_CONTEXT): New.
      	(ATOMIC_CONSTR_MAP, TRAIT_EXPR_LOCATION): New.
      	(struct tree_trait_expr): Add locus field.
      	(enum tsubst_flags): Add tf_norm as a hint to generate normalization
      	context when diagnosing constraint failure.
      	* cp-tree.def: Remove unused _CONSTR nodes and rename PRED_CONSTR
      	to ATOMIC_CONSTR.
      	(CONCEPT_DECL): New.
      	* cxx-pretty-print.c: Remove constraint printing code.
      	(pp_cxx_concept_definition): New.
      	(pp_cxx_template_declaration): Print concept definitions.
      	(pp_cxx_check_constraint): Update printing for concept definitions.
      	(pp_cxx_nested_name_specifier): Fix a weird
      	case where we're printing '::::' for concepts.
      	(simple_type_specifier): Print requirements for placeholder types.
      	(pp_cxx_constrained_type_spec): Print the associated requirements of
      	a placeholder type.
      	(pp_cxx_compound_requirement): Add space before the '->'.
      	(pp_cxx_parameter_mapping): Print the parameter mapping.
      	(pp_cxx_atomic_constraint): Use the function above.
      	* decl.c (redeclaration_error_message): New error for concepts.
      	(grokdeclarator): Check for and disallow decltype(auto) in parameter
      	declarations.
      	(grokfndecl): Don't normalize constraints. Add check for constraints
      	on declaration.
      	(grokvardecl): Don't normalize constraints.
      	(grok_special_member_properties): Don't set TYPE_HAS_COMPLEX_*.
      	(function_requirements_equivalent_p): New. Compare trailing
      	requires clauses. Compare combined constraints in pre-C++20 mode.
      	(decls_match): Compare trailing requires clauses. Compare template
      	heads for function templates. Remove old constraint comparison.
      	Simplify comparison of functions, function templates.
      	(duplicate_function_template_decls): New. Refactor a nasty if
      	condition into a single predicate.
      	(require_deduced_type): Don't complain if we already complained about
      	deduction failure.
      	(finish_function): Perform auto deduction to ensure that constraints
      	are checked even when functions contain no return statements. Only do
      	auto deduction if we haven't previously seen any return statements.
      	This prevents multiple diagnostics of the same error.
      	(store_decomp_type): Remove.
      	(cp_finish_decomp): Use hash_map_safe_put.
      	* error.c: Remove constraint printing code.
      	(dump_decl): Dump concept definitions. Handle wildcard declarations.
      	(dump_template_decl): Likewise.
      	(dump_type): Print associated requirements for placeholder
      	types.
      	(rebuild_concept_check): New.
      	(maybe_print_single_constraint_context): New.
      	(maybe_print_constraint_context): Recursively print nested contexts.
      	* init.c (get_nsdmi): Use hash_map_safe_*.
      	* lambda.c (maybe_add_lambda_conv_op): Bail if deduction failed.
      	(add_capture): Copy parameter packs from init.
      	(lambda_capture_field_type): Always use auto for init-capture.
      	* logic.cc: Completely rewrite.
      	(constraint_hash): New.
      	(clause/ctor): Save atoms in the hash table.
      	(replace): Save atoms during replacement.
      	(insert): Save atoms during insertion.
      	(contains): Only search the hash table for containment.
      	(clause): Keep a hash of atomic constraints.
      	(clause::clause): Explicitly copy the hash table when copying.
      	(disjunction_p, conjunction_p, atomic_p, dnf_size, cnf_size): New.
      	(diagnose_constraint_size): New.
      	(subsumes_constraints_nonnull): Compare the sizes of normalized formula
      	to determine the cheapest decomposition.
      	* name-lookup.c (diagnose_name_conflict): Diagnose name issues with
      	concepts.
      	(matching_fn_p): Check constraints.
      	(push_class_level_binding_1): Move overloaded functions case down,
      	accept FUNCTION_DECL as target_decl.
      	* parser.c (enum required_token): New required token for auto.
      	(make_location): Add overload taking lexer as last parm.
      	(cp_parser_required_error): Diagnose missing auto.
      	(cp_parser_diagnose_ungrouped_constraint_plain): New.
      	(cp_parser_diagnose_ungrouped_constraint_plain): New.
      	(cp_parser_constraint_primary_expression): New. Tentatively parse the
      	primary expression. If that fails tentatively parse a lower
      	precedence expression in order to diagnose the error.
      	(cp_parser_check_non_logical_constraint): New. Performs a trial
      	parse of the right-hand-side of non-logical operators in order to
      	generate good diagnostics.
      	(cp_parser_constraint_logical_and_expression): New.
      	(cp_parser_constraint_logical_or_expression): New.
      	(cp_parser_requires_clause_expression): New.
      	(cp_parser_requires_clause): Renamed to cp_parser_constraint_expression.
      	(cp_parser_requires_clause_opt): Parse the requires-clause differently
      	in -fconcepts and -std=c++2a modes.
      	(cp_parser_requirement_list): Rename to cp_parser_requirement_seq.
      	Rewrite so that semicolons are parsed
      	along with requirements, not the sequence.
      	(cp_parser_simple_requirement): Expect a semicolon at end.
      	(cp_parser_compound_requirement): Expect a semicolon at end. Only
      	allow trailing-return-type with -fconcepts-ts.
      	(cp_parser_nested_requirement): Expect a semicolon at end. Parse
      	constraint-expressions.
      	(cp_parser_concept_definition): New. Don't fail parsing the concept
      	definition if the initializer is ill-formed. Don't declare the concept
      	before parsing the initializer.
      	(cp_parser_constraint_expression): Declare earlier.
      	(cp_parser_type_requirement): Current scope is not valid.
      	(cp_parser_requires_expression): Commit to the tentative parse.
      	(cp_parser_decl_specifier_seq): Warn when concept appears to be used
      	as a decl-specifier.
      	(cp_parser_template_declaration_after_parameters): Parse concept
      	definitions.
      	(cp_parser_template_id): Don't try to resolve a concept template-id yet.
      	(cp_parser_template_id_expr): Resolve it as a concept check.
      	(cp_parser_decl_specifier_seq): Warn on 'concept bool'.
      	(cp_parser_type_parameter): Combine expressions not
      	constraints.
      	(cp_parser_explicit_template_declaration): Combine expressions not
      	constraints.
      	(cp_parser_maybe_concept_name): Removed.
      	(cp_parser_simple_type_specifier): Handle an error condition of
      	a bad constrained type specifier. Expect auto or decltype after
      	a concept name. Also handle the case where we have a template-id
      	as a concept check.
      	(cp_parser_template_introduction): Diagnose errors on invalid
      	introductions. Give up if it doesn't start with a concept name.
      	Pedwarn if not -fconcepts-ts.
      	(synthesize_implicit_template_parm): Don't do consistent binding.
      	Use a new flag for constrained parameters. Combine expressions,
      	not constraints. Fail if we get a placeholder in block scope.
      	Placeholders that do not constrain types are not allowed in parameter
      	declarations, so don't handle them.
      	(cp_parser_placeholder_type_specifier): New. Implement parsing of
      	placeholder type specifiers following a concept name or partial
      	concept check. Disallow decltype(auto) parameters.
      	(cp_parser_nested_name_specifier_opt): If the token is already
      	CPP_NESTED_NAME_SPECIFIER, leave it alone.
      	(cp_parser_id_expression, cp_parser_unqualified_id): Call
      	cp_parser_template_id_expr.
      	(cp_parser_placeholder_type_specifier): Add tentative parm.  Don't
      	expect a WILDCARD_DECL.
      	(cp_parser_trait_expr): Pass trait_loc down.
      	(cp_parser_postfix_expression): Do set location of dependent member
      	call.
      	* pt.c (finish_concept_definition): New.
      	(push_template_decl_real): Handle concept definitions.
      	(start_concept_definition): Let push_template_decl_real handle the
      	creation of the template.
      	(get_constraints): Return null if the table hasn't been initialized.
      	(tsubst_copy_and_build): Build template-id expressions for concept
      	checks.
      	[TRAIT_EXPR]: Pass trait_loc down.
      	(lookup_template_class_1): Add the template name to the constraint
      	failure diagnostic.
      	(lookup_and_finish_template_variable): Build concept checks
      	with the correct arguments.
      	(tsubst_function_decl): Don't substitute through constraints.
      	Always associate constraints with functions.
      	(template_parm_level_and_index): Make non-static.
      	(for_each_template_parm_r): Handle requires expressions.
      	(keep_template_parm): New.
      	(find_template_parameters): New.
      	(more_specialized_fn): Change how winners and losers are chosen.
      	(make_constrained_auto): Don't normalize constraints.
      	(template_parameters_equivalent_p): New. Compare template
      	parameters. Add a comparison for implicitly vs. explicitly declared
      	parameters.
      	(template_parameter_lists_equivalent_p): New. Compare template
      	parameter lists.
      	(template_requirements_equivalent_p): New.
      	(template_heads_equivalent_p): New. Compare template heads.
      	(template_parameter_constraints_equivalent_p): New.
      	(is_compatible_template_arg): Use weakly_subsumes.
      	(maybe_new_partial_specialization): Use new constraint comparison
      	for finding specializations.
      	(process_partial_specialization): Pass main template as argument.
      	(more_specialized_partial_spec): Don't immediately return when
      	detecting a winner.
      	(make_constrained_auto): Handle concept definitions.
      	(do_auto_deduction): Update auto deduction for new concept model.
      	Extract the function concept correctly; rename constr to check to
      	reflect the kind of node.
      	(tsubst): Adjust wildcard argument during substitution.
      	[DECLTYPE_TYPE]: Remove init-capture handling.
      	(tsubst_copy_and_build): Build concept checks, not template ids.
      	Defer checks of function concepts. Handle concepts before variable
      	templates. Handle calls to function concepts explicitly.
      	(coerce_template_parms): Use concept_definition_p. Handle a deduction
      	error where a potentially empty pack can be supplied after the last
      	parameter of a concept.
      	(finish_template_variable): Don't process concepts here.
      	(instantiation_dependent_r): Use concept_check_p.
      	(tsubst_template_args): Make non-static.
      	(make_constrained_placeholder_type): New. Refactored from
      	make_constrained_auto.
      	(make_constrained_auto) Use make_constrained_placeholder_type.
      	(make_constrained_decltype_auto) New.
      	(tsubst_function_parms): New.
      	(value_dependent_expression_p) [TEMPLATE_ID_EXPR]: Use
      	concept_definition_p.
      	(push_access_scope, pop_access_scope): No longer static.
      	(tsubst_template_parm): Substitute TEMPLATE_PARM_CONSTRAINTS.
      	(tsubst_friend_function): Use tsubst_constraint. Use generic_targs_for.
      	(get_underlying_template) Use generic_targs_for.
      	(uses_parameter_packs): Return tree.
      	(gen_elem_of_pack_expansion_instantiation): Don't push
      	local_specialization_stack.
      	(prepend_one_capture): New.
      	(tsubst_lambda_expr): Use prepend_one_capture.	Don't touch
      	local_specializations.
      	(template_parms_level_to_args): No longer static.
      	(add_outermost_template_args): Likewise.
      	(find_template_parameter_info): New. Provide context for finding
      	template parameters.
      	(keep_template_parm): Don't keep parameters declared at depth levels
      	greater than those of the template parameters of the source declaration.
      	Don't propagate cv-qualified types. Return 0, so we find all template
      	parameters, not the just first.
      	(any_template_parm_r): New. Handle cases that are mishandled by
      	for_each_template_parm_r.
      	(generic_targs_for): Factor out of coerce_template_args_for_ttp.
      	(tsubst_argument_pack): Factor out of tsubst_template_args.
      	(constraint_sat_entry): Removed.
      	(constraint_sat_hasher): Removed.
      	(concept_spec_entry): Removed.
      	(concept_spec_hasher): Removed.
      	(constraint_memos): Removed.
      	(concept_memos): Removed.
      	(lookup_constraint_satisfaction): Removed.
      	(memoize_constraint_satisfaction): Removed.
      	(lookup_concept_satisfaction): Removed.
      	(memoize_concept_satisfaction): Removed.
      	(concept_expansions): Removed.
      	(get_concept_expansion): Removed.
      	(save_concept_expansion): Removed.
      	(init_constraint_processing): Remove initialization of non-existing
      	resources.
      	(find_template_requirement): New. Search for the sub-requirement
      	within the associated constraints.
      	(convert_generic_types_to_packs): Also transform the associated
      	constraint and update the current template requirements.
      	(store_defaulted_ttp, lookup_defaulted_ttp): Remove.
      	(add_defaults_to_ttp): Use hash_map_safe_*.
      	* semantics.c (finish_call_expr): Diagnose calls to concepts.
      	Handle concept checks explicitly.
      	(finish_id_expression): Evaluate variable concepts as part of
      	id-expression processing. Don't treat variable concepts as variables,
      	and don't process function concepts as plain id-expressions.
      	(force_paren_expr): Add even_uneval parm.
      	(finish_trait_expr): Add location parm.
      	* tree.c (special_memfn_p): New.
      	(cp_expr_location): Handle TRAIT_EXPR.
      	* typeck.c (check_return_expr): Actually use the diagnostic kind
      	when performing return-type deduction.
      	* typeck2.c (build_functional_cast): Don't rely on the location of
      	'auto'.
      gcc/testsuite/
      	* lib/target-supports.exp (check_effective_target_concepts): Check
      	for std=c++2a.
      gcc/
      	* doc/invoke.texi: Document -fconcepts-ts.
      
      From-SVN: r276764
      Jason Merrill committed
    • decl.c (grok_ctor_properties): Use DECL_SOURCE_LOCATION. · 8cb6a775
      /cp
      2019-10-09  Paolo Carlini  <paolo.carlini@oracle.com>
      
      	* decl.c (grok_ctor_properties): Use DECL_SOURCE_LOCATION.
      	* typeck.c (cp_build_binary_op): Use the op_location_t argument
      	in many error messages.
      
      /testsuite
      2019-10-09  Paolo Carlini  <paolo.carlini@oracle.com>
      
      	* c-c++-common/Waddress-1.c: Test locations too.
      	* c-c++-common/Wpointer-compare-1.c: Likewise.
      	* c-c++-common/Wshift-count-negative-1.c: Likewise.
      	* c-c++-common/Wshift-count-overflow-1.c: Likewise.
      	* c-c++-common/Wshift-negative-value-1.c: Likewise.
      	* c-c++-common/Wshift-negative-value-2.c: Likewise.
      	* c-c++-common/Wshift-negative-value-5.c: Likewise.
      	* c-c++-common/pr48418.c: Likewise.
      	* c-c++-common/pr65830.c: Likewise.
      	* c-c++-common/pr69764.c: Likewise.
      	* g++.dg/cpp0x/constexpr-array-ptr10.C: Likewise.
      	* g++.dg/cpp0x/nullptr37.C: Likewise.
      	* g++.dg/template/crash126.C: Likewise.
      	* g++.dg/template/crash129.C: Likewise.
      	* g++.dg/warn/Wextra-3.C: Likewise.
      	* g++.dg/warn/Wfloat-equal-1.C: Likewise.
      	* g++.dg/warn/Wstring-literal-comparison-1.C: Likewise.
      	* g++.dg/warn/Wstring-literal-comparison-2.C: Likewise.
      	* g++.dg/warn/pointer-integer-comparison.C: Likewise.
      	* g++.old-deja/g++.jason/crash8.C: Likewise.
      
      From-SVN: r276763
      Paolo Carlini committed
    • PR libstdc++/91057 set locale::id::_M_index atomically · cc386cf2
      If two threads see _M_index==0 concurrently they will both try to set
      it, potentially storing the facet at two different indices in the array.
      
      Either set the _M_index data member using an atomic compare-exchange
      operation or while holding a mutex.
      
      Also move the LONG_DOUBLE_COMPAT code into a separate function to remove
      the visual noise it creates.
      
      	PR libstdc++/91057
      	* src/c++98/locale.cc (locale::id::_M_id()) [__GTHREADS]: Use atomic
      	compare-exchange or double-checked lock to ensure only one thread sets
      	the _M_index variable.
      	[_GLIBCXX_LONG_DOUBLE_COMPAT]: Call find_ldbl_sync_facet to detect
      	facets that share another facet's ID.
      	[_GLIBCXX_LONG_DOUBLE_COMPAT] (find_ldbl_sync_facet): New function.
      
      From-SVN: r276762
      Jonathan Wakely committed
    • tree-vect-loop.c (vect_is_simple_reduction): Simplify and allow stmts other than… · 4a8841c0
      tree-vect-loop.c (vect_is_simple_reduction): Simplify and allow stmts other than GIMPLE_ASSIGN in nested cycles.
      
      2019-10-09  Richard Biener  <rguenther@suse.de>
      
      	* tree-vect-loop.c (vect_is_simple_reduction): Simplify and
      	allow stmts other than GIMPLE_ASSIGN in nested cycles.
      
      	* gcc.dg/vect/vect-outer-call-1.c: New testcase.
      
      From-SVN: r276760
      Richard Biener committed
    • PR libstdc++/78552 only construct std::locale for C locale once · 531b0a31
      	PR libstdc++/78552
      	* src/c++98/locale_init.cc (locale::classic()): Do not construct a new
      	locale object for every call.
      	(locale::_S_initialize_once()): Construct C locale here.
      
      From-SVN: r276758
      Jonathan Wakely committed
    • [PR92036] Add 'libgomp.oacc-c-c++-common/data-firstprivate-1.c' · 6bbead0c
      	libgomp/
      	PR middle-end/92036
      	* testsuite/libgomp.oacc-c-c++-common/data-firstprivate-1.c: New
      	file.
      
      From-SVN: r276757
      Thomas Schwinge committed
    • avr-mmcu.texi: Re-generate because config/avr/avr-devices.c was changed in r269487. · e3423d76
      	* doc/avr-mmcu.texi: Re-generate because config/avr/avr-devices.c
      	was changed in r269487.
      
      From-SVN: r276756
      Georg-Johann Lay committed
    • * config/avr/avr.md: Fix typo in a comment. · 34a829a0
      From-SVN: r276755
      Georg-Johann Lay committed
    • re PR testsuite/91884 (libgomp testsuite: (not) using a specific driver for C++, Fortran) · eba3dee8
      2019-10-09  Tobias Burnus  <tobias@codesourcery.com>
      
              PR testsuite/91884
              * testsuite/libgomp.fortran/fortran.exp: Conditionally
              add -lquadmath.
              * testsuite/libgomp.oacc-fortran/fortran.exp: Ditto.
      
      From-SVN: r276754
      Tobias Burnus committed
    • re PR libgomp/92028 (OpenACC 'host_data' execution test regressions with nvptx offloading) · 7d48e14f
      	PR libgomp/92028
      	* target.c (gomp_map_vars_internal): Readd the previous
      	GOMP_MAP_USE_DEVICE_PTR handling code in the first loop,
      	though do that just in the !not_found_cnt case.
      
      From-SVN: r276753
      Jakub Jelinek committed
    • tree-vectorizer.h (_stmt_vec_info::reduc_vectype_in): New. · f7834799
      2019-10-08  Richard Biener  <rguenther@suse.de>
      
      	* tree-vectorizer.h (_stmt_vec_info::reduc_vectype_in): New.
      	(_stmt_vec_info::force_single_cycle): Likewise.
      	(STMT_VINFO_FORCE_SINGLE_CYCLE): New.
      	(STMT_VINFO_REDUC_VECTYPE_IN): Likewise.
      	* tree-vect-loop.c (vectorizable_reduction): Set
      	STMT_VINFO_REDUC_VECTYPE_IN and STMT_VINFO_FORCE_SINGLE_CYCLE.
      	(vect_transform_reduction): Use them to remove redundant code.
      	(vect_transform_cycle_phi): Likewise.
      
      From-SVN: r276752
      Richard Biener committed
    • use call-clobbered reg to disalign the stack · 4e78c688
      Some x86 tests of stack realignment, that disaligned the stack with
      pushes and pops, failed when the compiler was configured to tune for a
      target that preferred to accumulate outgoing arguments: the stack
      space is reserved before the asm push, the call sequence overwrites
      the saved register, and then the asm pop restores the overwritten
      value.  Since that's a call-preserved register in 32-bit mode, it
      should be preserved unchanged, but isn't.
      
      Merely changing the register to a call-clobbered one would be enough,
      but the tests would remain fragile and prone to failure due to other
      optimizations, so I arranged for the compiler to be made aware of the
      register used for the push and the pop, so it won't use it for
      something else, and forced the function to use a frame pointer, so
      that it won't use stack pointer offsets for local variables: the
      offsets would likely be wrong between the asm push and pop.
      
      
      for  gcc/testsuite/ChangeLog
      
      	* gcc.target/i386/20060512-1.c (sse2_test): Use a
      	call-clobbered register variable for stack-disaligning push
      	and pop.  Require a frame pointer.
      	* gcc.target/i386/20060512-3.c (sse2_test): Likewise.
      
      From-SVN: r276751
      Alexandre Oliva committed