1. 10 Oct, 2019 34 commits
    • [Ada] Fix inlining of subprograms with deep param/result in GNATprove · 5913d1b7
      2019-10-10  Yannick Moy  <moy@adacore.com>
      
      gcc/ada/
      
      	* inline.adb (Can_Be_Inlined_In_GNATprove_Mode): Do not peek
      	under private types whose completion is SPARK_Mode Off.
      
      From-SVN: r276833
      Yannick Moy committed
    • [Ada] Various minor typo fixes · 60f66f34
      2019-10-10  Gary Dismukes  <dismukes@adacore.com>
      
      gcc/ada/
      
      	* exp_ch4.adb, sem_cat.adb, sem_ch12.adb, sem_ch3.adb,
      	sem_ch6.adb, sem_prag.adb, sem_util.adb, sem_util.ads: Minor
      	typo fixes.
      
      From-SVN: r276832
      Gary Dismukes committed
    • [Ada] Spurious warning on call with out parameter in expression function · 4e866f08
      2019-10-10  Ed Schonberg  <schonberg@adacore.com>
      
      gcc/ada/
      
      	* sem_warn.adb (Warn_On_Useless_Assignment): Do not warn if the
      	second assignment is at the same source position as the first.
      
      From-SVN: r276831
      Ed Schonberg committed
    • [Ada] Unnesting issues with entry families and accept statements · 6c142b14
      2019-10-10  Gary Dismukes  <dismukes@adacore.com>
      
      gcc/ada/
      
      	* sem_util.adb (Enclosing_Subprogram): Handle the case of
      	E_Entry_Family, returning the entry family's associated
      	Protected_Body_Subprogram (as was already done for E_Entry).
      	* exp_ch9.adb (Expand_N_Accept_Statement): Call Reset_Scopes_To
      	on the block created for an accept statement to reset the scopes
      	of any local entities to the block scope.
      
      From-SVN: r276830
      Gary Dismukes committed
    • [Ada] Spurious visibility error on formal package with Abstract_State · 55160f6c
      2019-10-10  Ed Schonberg  <schonberg@adacore.com>
      
      gcc/ada/
      
      	* sem_ch12.adb (Analyze_Formal_Package_Declaration): Propagate
      	an aspect specification for Abstract_State from generic package
      	to formal package, so that it is available when analyzing the
      	constructed formal.
      
      From-SVN: r276829
      Ed Schonberg committed
    • [Ada] Fix awkward placement of freeze node for actual subtype · dfdd3de1
      2019-10-10  Eric Botcazou  <ebotcazou@adacore.com>
      
      gcc/ada/
      
      	* sem_ch6.adb (Set_Actual_Subtypes): Put the freeze node of the
      	actual subtype after its declaration when the type of the formal
      	has a predicate.
      
      From-SVN: r276828
      Eric Botcazou committed
    • [Ada] Get rid of spurious error for _Tag on extension with reverse bit order · ab9e2084
      2019-10-10  Eric Botcazou  <ebotcazou@adacore.com>
      
      gcc/ada/
      
      	* sem_ch13.adb (Adjust_Record_For_Reverse_Bit_Order): Do not use
      	the Esize of the component to compute its layout, but only the
      	Component_Clause.  Do not issue a warning for the _Tag
      	component.  Also set the Esize of the component at the end of
      	the layout.
      	(Analyze_Record_Representation_Clause): Remove Hbit local
      	variable.  Lay out the Original_Record_Component only if it's
      	distinct from the component.
      	(Check_Record_Representation_Clause): Fix off-by-one bug for the
      	Last_Bit of the artificial clause built for the _Tag component.
      
      From-SVN: r276827
      Eric Botcazou committed
    • [Ada] Debug procedure for printing ancestors · a871b0aa
      2019-10-10  Bob Duff  <duff@adacore.com>
      
      gcc/ada/
      
      	* treepr.ads, treepr.adb (ppar): New procedure.
      
      From-SVN: r276826
      Bob Duff committed
    • [Ada] 'others' in conditional_expressions · f18344b7
      2019-10-10  Bob Duff  <duff@adacore.com>
      
      gcc/ada/
      
      	* sem_aggr.adb (Resolve_Aggregate): Add missing cases in the
      	Others_Allowed => True case -- N_Case_Expression_Alternative and
      	N_If_Expression.  Use Nkind_In.
      	* atree.adb, atree.ads, sinfo.adb, sinfo.ads (Nkind_In): New
      	16-parameter version.
      
      From-SVN: r276824
      Bob Duff committed
    • [Ada] Missing Predicated_Parent link on array Itype · a096f12e
      2019-10-10  Ed Schonberg  <schonberg@adacore.com>
      
      gcc/ada/
      
      	* sem_aggr.adb (Resolve_Array_Aggregate): Set properly the
      	Predicated_Parent link of an itype created for an aggregate, so
      	that the predicate_function of the parent can support proofs on
      	the object that it initializes.
      
      From-SVN: r276823
      Ed Schonberg committed
    • [Ada] Plug minor loophole for integer named number · f200341c
      2019-10-10  Eric Botcazou  <ebotcazou@adacore.com>
      
      gcc/ada/
      
      	* sem_ch3.adb (Analyze_Number_Declaration): Set
      	Debug_Info_Needed in the case where the expression is an integer
      	literal.
      
      From-SVN: r276822
      Eric Botcazou committed
    • [Ada] Do not inline subprograms with deep parameter/result in GNATprove · 9d98b6d8
      2019-10-10  Yannick Moy  <moy@adacore.com>
      
      gcc/ada/
      
      	* inline.adb (Can_Be_Inlined_In_GNATprove_Mode): Add subprograms
      	with deep parameter or result type as not candidates for
      	inlining.
      
      From-SVN: r276821
      Yannick Moy committed
    • [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 6 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