1. 20 Aug, 2019 40 commits
    • PR libstdc++/91371 make std::is_function handle other calling conventions · 72459cfd
      The x86 attributes such as ms_abi, stdcall, fastcall etc. alter the
      function type, which means that functions with one of those attributes
      do not match any of the partial specializations of std::is_function.
      
      Rather than duplicating the list for every calling convention, use a
      much simpler definition of std::is_function.
      
      Also redefine __is_referenceable to not rely on partial specializations
      for each type of referenceable function.
      
      	PR libstdc++/91371
      	* include/std/type_traits (is_function): Simplify definition. Remove
      	partial specializations for function types.
      	(__is_referenceable): Simplify definition.
      	* testsuite/20_util/bind/91371.cc: New test.
      	* testsuite/20_util/is_function/91371.cc: New test.
      	* testsuite/20_util/is_function/value.cc: Check more pointer types.
      	* testsuite/20_util/is_member_function_pointer/91371.cc: New test.
      	* testsuite/20_util/is_object/91371.cc: New test.
      
      From-SVN: r274756
      Jonathan Wakely committed
    • compiler, runtime: implement shifts by signed amounts · 43055d23
          
          Shifting by signed types is a new language feature in Go 1.13.
          
          This requires a patch to the testsuite.
          
          Updates golang/go#19113
          
          Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/190977
      
      	* go.test/test/fixedbugs/bug073.go: Update for language changes.
      
      From-SVN: r274755
      Ian Lance Taylor committed
    • function.c (assign_parm_find_stack_rtl): Use known_eq instead of ==. · 5ba5ad30
      2019-08-20  Bernd Edlinger  <bernd.edlinger@hotmail.de>
      
              * function.c (assign_parm_find_stack_rtl): Use known_eq instead of ==.
      
      From-SVN: r274751
      Bernd Edlinger committed
    • tree-ssa-dse.c (dse_optimize_redundant_stores): Improved check to catch more… · 529f3048
      tree-ssa-dse.c (dse_optimize_redundant_stores): Improved check to catch more redundant zero initialization cases.
      
      2019-08-19  Matthew Beliveau  <mbelivea@redhat.com>
      
      	* tree-ssa-dse.c (dse_optimize_redundant_stores): Improved check to
      	catch more redundant zero initialization cases.
      	(dse_dom_walker::dse_optimize_stmt): Likewise.
      
      From-SVN: r274749
      Matthew Beliveau committed
    • re PR lto/91307 (-flto causes binary to vary) · 00f7060a
      2019-08-20  Richard Biener  <rguenther@suse.de>
      
      	PR lto/91307
      	* ipa.c (cgraph_build_static_cdtor_1): Use names not recognizable
      	by collect2 when targetm.have_ctors_dtors which avoids dragging
      	in temporary filenames from LTO input objects.
      
      From-SVN: r274748
      Richard Biener committed
    • re PR tree-optimization/37242 (missed FRE opportunity because of signedness of addition) · 3ed01d54
      2019-08-20  Richard Biener  <rguenther@suse.de>
      
      	PR tree-optimization/37242
      	* tree-ssa-sccvn.c (visit_nary_op): Also CSE (T)(a + b)
      	to (T)a + (T)b if we know that a + b does not overflow.
      
      	* gcc.dg/tree-ssa/ssa-fre-80.c: New testcase.
      
      From-SVN: r274746
      Richard Biener committed
    • Intrinsic documentation changes. · a53aa4da
      Add notes to DIM, MOD and MODULE stating that as a GNU extension,
      integers of different kinds are allowed as arguments and that the
      return value has the larger kind.
      
      From-SVN: r274744
      Mark Eggleston committed
    • [Ada] Unnesting: take inlining (-gnatn) into account · dd241b94
      This affects only LLVM-based compilation.
      
      2019-08-20  Arnaud Charlet  <charlet@adacore.com>
      
      gcc/ada/
      
      	* exp_unst.adb (Unnest_Subprograms, Unnest_Subprogram): Take
      	inlining (-gnatn) into account.
      
      From-SVN: r274743
      Arnaud Charlet committed
    • [Ada] Crash on a Storage_Size aspect depending on attr. of another type · b82f1618
      This patch fixes a crash on an aspect specification for Storage_Size for
      a type T when the expression for the aspect depends on attributes of a
      previously declared type that is not frozen yet. The  temporary
      declaration that captures the value of the aspect must be part of the
      actions attached to the freeze node for T.
      
      2019-08-20  Ed Schonberg  <schonberg@adacore.com>
      
      gcc/ada/
      
      	* exp_ch13.adb (Expand_N_Attribute_Definition_Clause, case
      	Storage_Size): If the expression for Storage_Size is not static
      	it may depend on characterstics of another type that may bot be
      	frozen yet, so the elaboration of the expression for the aspect
      	must be attached directly to the freeze actions of the type to
      	which it applies.
      
      gcc/testsuite/
      
      	* gnat.dg/storage_size1.adb: New testcase.
      
      From-SVN: r274742
      Ed Schonberg committed
    • [Ada] Inconsistent scope chain due to quantified expression · aa090e20
      Routine Build_DIC_Procedure_Declaration appears to be heavily inspired
      by Build_Invariant_Procedure_Declaration; they both wrap an expression
      attached to a type inside an internal procedure. Initially none of them
      were calling Set_Last_Entity.
      
      For Build_Invariant_Procedure_Declaration this was fixed previously.
      For Build_DIC_Procedure_Declaration this is fixed here.
      
      The issue affects the GNATprove tool and is not visible to end users of
      the GNAT compiler. No simple test is available because this would
      require a debug session.
      
      2019-08-20  Piotr Trojanek  <trojanek@adacore.com>
      
      gcc/ada/
      
      	* exp_util.adb (Build_DIC_Procedure_Declaration): Set the last
      	entity of the generated Default_Initial_Condition procedure in
      	order to construct a proper entity chain.
      
      From-SVN: r274741
      Piotr Trojanek committed
    • [Ada] Adapt GNATprove expansion for slices with access prefix · dd6e65c6
      The special expansion done in GNATprove mode should be adapted to slices
      where the prefix has access type, like indexed expressions.
      
      There is no impact on compilation.
      
      2019-08-20  Yannick Moy  <moy@adacore.com>
      
      gcc/ada/
      
      	* exp_spark.adb (Expand_SPARK_N_Slice_Or_Indexed_Component):
      	Renaming of function to apply to slices as well.
      	(Expand_SPARK): Expand prefix of slices of access type.
      
      From-SVN: r274740
      Yannick Moy committed
    • [Ada] Improve efficiency of aggregates with <> · d4e4e88a
      The generated code has been improved so that aggregates with <> are more
      efficient.  No change in behavior; no test.
      
      2019-08-20  Bob Duff  <duff@adacore.com>
      
      gcc/ada/
      
      	* exp_aggr.adb (Expand_Array_Aggregate): Use build-in-place in
      	the nonlimited case in STEP 4. This improves the efficiency of
      	things like (1 .. 1000 => <>).  We still generate some code for
      	that, unfortunately, but it is much improved.
      	(Aggr_Assignment_OK_For_Backend): Return false if <> components
      	are present.
      
      From-SVN: r274739
      Bob Duff committed
    • [Ada] Improve speed of discriminated return types · cf0e5ca7
      The compiler now generates faster code for functions that return
      discriminated types in many cases where the size is known at compile
      time.
      
      2019-08-20  Bob Duff  <duff@adacore.com>
      
      gcc/ada/
      
      	* exp_ch6.adb (Needs_BIP_Alloc_Form): Call
      	Requires_Transient_Scope rather than checking constrainedness
      	and so forth.  We have previously improved
      	Requires_Transient_Scope to return False in various cases,
      	notably a limited record with an access discriminant. This
      	change takes advantage of that to avoid using the secondary
      	stack for functions returning such types.
      	(Make_Build_In_Place_Call_In_Allocator): Be consistent by
      	calling Needs_BIP_Alloc_Form rather than Is_Constrained and so
      	forth.
      	* sem_ch4.adb (Analyze_Allocator): The above change causes the
      	compiler to generate code that is not legal Ada, in particular
      	an uninitialized allocator for indefinite subtype.  This is
      	harmless, so we suppress the error message in this case.
      
      From-SVN: r274738
      Bob Duff committed
    • [Ada] Minor reformattings · 31fde973
      2019-08-20  Gary Dismukes  <dismukes@adacore.com>
      
      gcc/ada/
      
      	* ali.adb, ali.ads, aspects.adb, checks.ads, checks.adb,
      	doc/gnat_rm/implementation_defined_pragmas.rst,
      	doc/gnat_ugn/building_executable_programs_with_gnat.rst,
      	einfo.ads, exp_aggr.adb, exp_ch11.adb, exp_ch3.ads, exp_ch4.adb,
      	exp_disp.adb, inline.adb, libgnat/a-locale.ads,
      	libgnat/s-soflin.ads, par_sco.adb, repinfo.adb, sem_ch5.adb,
      	sem_disp.adb, sem_elab.adb, sem_eval.adb, sem_spark.adb,
      	sem_spark.ads, sinfo.ads: Minor reformattings, typo fixes and
      	and rewordings.
      
      From-SVN: r274737
      Gary Dismukes committed
    • [Ada] Set GNAT.OS_Lib.GM_Split's granularity back to 1 second · 8d3e8018
      The modification to round time up to even second was added decades ago.
      It was done to avoid unneeded recompilations when the project was built
      on non-FAT filesystems and then moved to FAT filesystems. Such a
      situation is now very rare and does not deserve time distortion.
      
      2019-08-20  Dmitriy Anisimkov  <anisimko@adacore.com>
      
      gcc/ada/
      
      	* adaint.c (__gnat_to_gm_time): On _WIN32, don't round time up
      	to even second.
      
      From-SVN: r274736
      Dmitriy Anisimkov committed
    • [Ada] Fix propagation of compiler internal flag · b08f42ae
      No change in behavior for GCC-based compilations.
      
      2019-08-20  Ed Schonberg  <schonberg@adacore.com>
      
      gcc/ada/
      
      	* sem_ch3.adb (Analyze_Object_Declaration): If actual type is
      	private and distinct from nominal type in declaration, propagate
      	flags Is_Constr_Subt_For_U_Nominal and _UN_Aliased to full view
      	of private type.
      
      From-SVN: r274735
      Ed Schonberg committed
    • [Ada] Crash on Loop_Entry for while_loop involving substrings · b6b011dd
      When expanding a loop entry attribute for a while_loop we construct a
      function that incorporates the expanded condition of the loop. The
      itypes that may be generated in that expansion must carry the scope of
      the constructed function for proper handling in the backend.
      
      2019-08-20  Ed Schonberg  <schonberg@adacore.com>
      
      gcc/ada/
      
      	* exp_attr.adb (Expand_Loop_Entry_Attribute): When expanding a
      	loop entry attribute for a while_loop we construct a function
      	that incorporates the expanded condition of the loop. The itypes
      	that may be generated in that expansion must carry the scope of
      	the constructed function for proper handling in gigi.
      
      gcc/testsuite/
      
      	* gnat.dg/loop_entry2.adb: New testcase.
      
      From-SVN: r274734
      Ed Schonberg committed
    • [Ada] Spurious error in dispatching call with class-wide precondition · 1233757a
      This patch fixes a spurious visibility error on a dispatching call to
      a subprogram with a classwide precondition, when the call qppears in
      the same declarative part as the subprogram declaration itself.
      
      2019-08-20  Ed Schonberg  <schonberg@adacore.com>
      
      gcc/ada/
      
      	* exp_disp.adb (Build_Class_Wide_Check, Replace_Formals): When a
      	dispatching call tp a subprogram with a class-wide precondition
      	occurrs in the same declarative part as the ancestor subprogram
      	being called, the`expression for the precondition has not been
      	analyzed yet. Such a call may appear, e.g. in an expression
      	function. In that case, the replacement of formals by actuals in
      	the call cannot use the formal entities of the subprogram being
      	called, and the occurrence of the formals in the expression must
      	be located by name (Chars fields) as would be done at a later
      	freeze point, when the expression is resolved in the context of
      	the subprogram itself.
      
      gcc/testsuite/
      
      	* gnat.dg/tagged5.adb, gnat.dg/tagged5.ads: New testcase.
      
      From-SVN: r274733
      Ed Schonberg committed
    • [Ada] Suppress Initialize_Scalars for Persistent_BSS · 9740c244
      If a variable has pragma Persistent_BSS, the compiler now automatically
      suppresses implicit initializations caused by Initialize_Scalars and
      Normalize_Scalars. Variables with Persistent_BSS cannot be initialized,
      and previously a pragma Suppress_Initialization was required before the
      pragma Persistent_BSS.
      
      2019-08-20  Bob Duff  <duff@adacore.com>
      
      gcc/ada/
      
      	* sem_prag.adb (Persistent_BSS): If an initialization is present
      	because of Initialize_Scalars or Normalize_Scalars, generate an
      	implicit pragma Suppress_Initialization to remove that, because
      	initialization is not allowed for these variables. Other
      	initializations remain illegal.
      
      From-SVN: r274732
      Bob Duff committed
    • [Ada] Illegal limited function call accepted in a type conversion · e0ea5d16
      It's illegal to call a function with a result of an immutably limited
      type inside a type conversion that's used in one of the special contexts
      that allow such a function call by itself (see RM 7.5 (2.1-2.10)), such
      as in the initialization expression of an object declaration. The
      compiler was recursively applying OK_For_Limited_Init_In_05 to the
      expression inside of a rewritten type conversion, rather than directly
      to the Original_Node itself (which is what was cased on to get to the
      type conversion case alternative), which allowed such illegal
      initialization, and that's corrected by this fix. However, when the
      expression is not a rewriting of a user-written conversion, the
      recursive call to OK_For_Limited_Init_In_05 must be applied to the
      Expression of the conversion.
      
      2019-08-20  Gary Dismukes  <dismukes@adacore.com>
      
      gcc/ada/
      
      	* sem_ch3.adb (OK_For_Limited_Init_In_05): In the case of type
      	conversions, apply the recursive call to the Original_Node of
      	the expression Exp rather than the Expression of the
      	Original_Node, in the case where Exp has been rewritten;
      	otherwise, when Original_Node is the same as Exp, apply the
      	recursive call to the Expression.
      	(Check_Initialization): Revise condition for special check on
      	type conversions of limited function calls to test Original_Node
      	(avoiding spurious errors on expanded unchecked conversions
      	applied to build-in-place dispatching calls).
      
      gcc/testsuite/
      
      	* gnat.dg/type_conv2.adb, gnat.dg/type_conv2.ads: New testcase.
      
      From-SVN: r274731
      Gary Dismukes committed
    • [Ada] New pragma Aggregate_Individually_Assign · efc00a88
      Where possible GNAT will store the binary representation of a record
      aggregate in memory for space and performance reasons. This
      configuration pragma changes this behaviour so that record aggregates
      are instead always converted into individual assignment statements.
      
      The following package pack.ads:
      
      -- pack.ads
      
      pragma Aggregate_Individually_Assign;
      pragma Restrictions (No_Multiple_Elaboration);
      
      package Pack is
         type A_Rec is record
            A, B, C, D : Boolean;
         end record;
      
         A : A_Rec := (True, False, True, True);
      end Pack;
      
      when compiled with
      
      gcc -c -gnatdg pack.ads
      
      should produce the following output:
      
      Source recreated from tree for Pack (spec)
      ------------------------------------------
      
      pragma aggregate_individually_assign;
      pragma restrictions (no_multiple_elaboration);
      
      package pack is
         type pack__a_rec is record
            a : boolean;
            b : boolean;
            c : boolean;
            d : boolean;
         end record;
         freeze pack__a_rec [
            procedure pack__a_recIP (_init : out pack__a_rec) is
            begin
               %push_constraint_error_label ()
               %push_program_error_label ()
               %push_storage_error_label ()
               null;
               %pop_constraint_error_label
               %pop_program_error_label
               %pop_storage_error_label
               return;
            end pack__a_recIP;
         ]
         pack__a : pack__a_rec := (
            a => true,
            b => false,
            c => true,
            d => true);
         pack__a.a := true;
         pack__a.b := false;
         pack__a.c := true;
         pack__a.d := true;
         null;
      end pack;
      
      2019-08-20  Patrick Bernardi  <bernardi@adacore.com>
      
      gcc/ada/
      
      	* exp_aggr.adb (Expand_Record_Aggregate): Always convert a
      	record Aggregate to assignment statements if the option
      	Aggregate_Individually_Assign is set.
      	* opt.ads (Aggregate_Individually_Assign): New option.
      	* par-prag.adb (Prag): Add Pragma_Aggregate_Individually_Assign.
      	* sem_prag.adb (Analyze_Pragma): Likewise.
      	* snames.ads-tmpl: Add Pragma_Aggregate_Individually_Assign and
      	Name_Aggregate_Individually_Assign.
      	* doc/gnat_rm/implementation_defined_pragmas.rst: Document
      	pragma Aggregate_Individually_Assign.
      	* gnat_rm.texi: Regenerate.
      
      From-SVN: r274730
      Patrick Bernardi committed
    • [Ada] Enable delta_aggregate only in Ada 2020 mode · 32501d71
      If the delta_aggregate feature is used, the -gnat2020 or -gnatX switch
      must be given.
      
      The following test must get an error if neither
      -gnat2020 nor -gnatX is specified:
      
      gcc -c delta_aggregate.ads -gnat2012
      
      delta_aggregate.ads:4:18: delta_aggregate is an Ada 202x feature
      delta_aggregate.ads:4:18: compile with -gnatX
      
      package Delta_Aggregate is
      
         X : String := "Hello";
         Y : String := (X with delta 1 => 'h');
      
      end Delta_Aggregate;
      
      2019-08-20  Bob Duff  <duff@adacore.com>
      
      gcc/ada/
      
      	* par-ch4.adb: Minor wording change in error messages.
      	* sem_aggr.adb (Resolve_Delta_Aggregate): Emit an error for Ada
      	versions prior to Ada 2020.
      
      From-SVN: r274729
      Bob Duff committed
    • [Ada] Improve generated code for initialization of atomics · 7e7f0b0a
      This patch makes the temp for initialization of an atomic variable be
      constant.
      
      No change in behavior; no test.
      
      2019-08-20  Bob Duff  <duff@adacore.com>
      
      gcc/ada/
      
      	* freeze.adb (Is_Atomic_VFA_Aggregate): Make the temp for
      	initialization of the atomic variable be constant. This is
      	cleaner, and might improve efficiency.
      
      From-SVN: r274728
      Bob Duff committed
    • [Ada] More complete information level for -gnatR4 output · 76ccee8f
      This instructs -gnatR4 to also list the Etype of a user-declared record
      subtype if it is compiler-generated, for example in:
      
      package P is
      
         type U_Arr is array (Integer range <>) of Character;
      
         type Rec1 (D1, D2 : Integer) is record
            C : U_Arr (D1 .. D2);
         end record;
      
         type Rec_N is new Rec1 (1, 2);
      
      end P;
      
      2019-08-20  Eric Botcazou  <ebotcazou@adacore.com>
      
      gcc/ada/
      
      	* repinfo.adb (List_Record_Info): In -gnatR4 mode, set the
      	relevant flag on the implicit base type of a record subtype.
      
      From-SVN: r274727
      Eric Botcazou committed
    • [Ada] Fix a folding issue with System'To_Address · f2a35a2f
      2019-08-20  Bob Duff  <duff@adacore.com>
      
      gcc/ada/
      
      	* sem_eval.adb (Expr_Value): Implement the case of an unchecked
      	conversion of a static expression.
      
      From-SVN: r274726
      Bob Duff committed
    • [Ada] Warn on Unchecked_Conversion to zero-sized array · d21ae867
      The compiler usually warns on Unchecked_Conversion between types with
      mismatched sizes. This warning is now extended to the case where the
      target type is a zero-sized array.
      
      2019-08-20  Bob Duff  <duff@adacore.com>
      
      gcc/ada/
      
      	* sem_ch13.adb (Is_Null_Array): New function, used to detect the
      	null array case; used to warn about uncheckedly converting to a
      	zero-sized array.  It is unfortunate that we can't just check
      	the size, and warn on all cases of converting from a
      	nonzero-sized type to a zero-sized one. That's because "0" means
      	two different things: "size is zero" and "size is unknown".
      	Until we fix that design flaw, we need this more targeted fix.
      
      gcc/testsuite/
      
      	* gnat.dg/unchecked_convert14.adb: New testcase.
      
      From-SVN: r274725
      Bob Duff committed
    • [Ada] Efficiency improvement in bounded ordered containers · cbdb0df1
      The Delete operations in the bounded ordered containers have been
      substantially sped up.  No change in semantics, so no test.
      
      2019-08-20  Bob Duff  <duff@adacore.com>
      
      gcc/ada/
      
      	* libgnat/a-cborma.adb, libgnat/a-cborse.adb (Clear): Repeatedly
      	call Delete. This avoids clearing the free list, which
      	substantially speeds up future Delete operations.
      
      From-SVN: r274724
      Bob Duff committed
    • [Ada] Warning for out-of-order record representation clauses · 94f76dc1
      The compiler can now warn for out-of-order record representation
      clauses. A warning is given if the order of component declarations,
      component clauses, and bit-level layout do not all agree.  The warning
      is disabled by default, and may be enabled by the -gnatw_r switch.
      
      2019-08-20  Bob Duff  <duff@adacore.com>
      
      gcc/ada/
      
      	* sem_ch13.adb (Component_Order_Check): New procedure to check
      	for out-of-order clauses.
      	* warnsw.ads, warnsw.adb: New -gnatw_r switch.
      	* doc/gnat_ugn/building_executable_programs_with_gnat.rst:
      	Document new switch.
      	* gnat_ugn.texi: Regenerate.
      
      From-SVN: r274723
      Bob Duff committed
    • [Ada] Object_Size clause specifying 0 bits is illegal · afdc7598
      The patch gives an error message on "for T'Object_Size use 0;".
      
      2019-08-20  Bob Duff  <duff@adacore.com>
      
      gcc/ada/
      
      	* sem_ch13.adb (Object_Size): Give an error for zero. It really
      	rubs me the wrong way that we don't honor "for T'Object_Size use
      	0;", but it's not important enough to fix. In any case, if we're
      	not going to obey the clause, we should give an error.
      
      gcc/testsuite/
      
      	* gnat.dg/object_size1.adb: New testcase.
      
      From-SVN: r274722
      Bob Duff committed
    • [Ada] Pragma Warning_As_Error works for style warnings · 6cd8f5b0
      Pragma Warning_As_Error now works for style warnings (messages that
      start with "(style)", enabled by -gnaty) the same way it works for
      regular warnings enabled by -gnatw.
      
      The following test should fail to build with style checks:
      
      gnat.adc:
      
      pragma Warning_As_Error ("two spaces required");
      
      style.adb:
      
      procedure Style is
         X : Integer;
      begin
         null;
         --Hello
      end;
      
      gnatmake -q -f -g style.adb -gnaty
      
      should get:
      
      style.adb:2:04: warning: variable "X" is never read and never assigned
      style.adb:5:06: error: (style) two spaces required [warning-as-error]
      style.adb:6:01: (style) "end Style" required
      gnatmake: "style.adb" compilation error
      
      and no executable should be created.
      
      2019-08-20  Bob Duff  <duff@adacore.com>
      
      gcc/ada/
      
      	* errout.adb (Error_Msg_Internal): Set Warn_Err in case of
      	Is_Style_Msg.
      	* erroutc.adb (Output_Msg_Text): Do Warnings_Treated_As_Errors
      	processing and [warning-as-error] modification for style
      	messages.  Clean up code, simplify, remove unnecessary block
      	statement, add renaming of table entry.
      	* erroutc.ads (Warning_Treated_As_Error): Fix comment: no such
      	thing as Set_Warning_As_Error.
      	* opt.ads: Clean up comments and move related declarations near
      	each other.
      	* par-prag.adb: Process Warning_As_Error. This is necessary
      	because many style warning happen during parsing.
      	* sem_prag.adb: Use new Acquire_Warning_Match_String.
      	* sem_util.ads, sem_util.adb (Acquire_Warning_Match_String): New
      	function shared by par-prag.adb and sem_prag.adb. Replaces the
      	procedure in sem_prag.adb. Avoid use of global variables.
      	* stringt.ads, stringt.adb (To_String): New function to convert
      	String_Id to String.
      	* doc/gnat_rm/implementation_defined_pragmas.rst: Document the
      	new feature.
      	* gnat_rm.texi: Regenerate.
      
      From-SVN: r274721
      Bob Duff committed
    • [Ada] Get rid of linear searches in Lib · 98cbc7e4
      This change is aimed at removing a couple of linear searches in the
      units management code that can become problematic performance-wise when
      the number of loaded units is in the several hundreds, which can happen
      for large files even at -O0 without any inlining.
      
      It introduces an auxiliary hash table to record a mapping between the
      name of units and their entry in the units table, and then replaces the
      linear searches by lookups in this names table.  This can save up to 2%
      of the compilation time spent in the front-end in some cases.
      
      There should be no functional changes, except in the error message
      issued for circular unit dependencies in very peculiar and convoluted
      cases.
      
      2019-08-20  Eric Botcazou  <ebotcazou@adacore.com>
      
      gcc/ada/
      
      	* lib.ads: Add with clause for GNAT.HTable.
      	Add pragma Inline for Is_Loaded and alphabetize the list.
      	(Unit_Name_Table_Size): New constant.
      	(Unit_Name_Header_Num): New subtype.
      	(Unit_Name_Hash): New function declaration.
      	(Unit_Names): New simple hash table.
      	(Init_Unit_Name): New procedure declaration.
      	* lib.adb (Set_Unit_Name): Unregister the old name in the table,
      	if any, and then register the new name.
      	(Init_Unit_Name): New procedure.
      	(Is_Loaded): Reimplement using a lookup in the names table.
      	(Remove_Unit): Unregister the name.
      	(Unit_Name_Hash): New function.
      	* lib-load.adb (Create_Dummy_Package_Unit): Call Init_Unit_Name.
      	(Load_Unit): Use a lookup in the names table to find out whether
      	the unit has already been loaded.  Call Init_Unit_Name and then
      	Remove_Unit if the loading has failed.
      	(Make_Child_Decl_Unit): Call Init_Unit_Name.
      	(Make_Instance_Unit): Likewise.
      	* lib-writ.adb (Ensure_System_Dependency): Likewise.
      
      From-SVN: r274720
      Eric Botcazou committed
    • [Ada] Sem_Ch13: fix uninitialized parameter static analysis warning · a89a0dd3
      No functional change.
      
      2019-08-20  Bob Duff  <duff@adacore.com>
      
      gcc/ada/
      
      	* sem_ch13.adb (Record_Hole_Check): Initialize After_Last.
      
      From-SVN: r274719
      Bob Duff committed
    • [Ada] Revert change for gnatprove that is no longer needed · b6ad3c08
      Years ago, we adapted Get_Kind_Of_Unit so that gnatprove could use it to
      detect both bodies and specs of predefined units.
      
      However, this wasn't really needed: gnatprove could simply reuse
      Lib.In_Predefined_Unit and now it does. This patch simply reverts two
      commits mentioned above.
      
      No frontend test provided, because the removed comment is clear that this
      doesn't affect the compiler. Other tools similarly should not be affected
      (at least they were not when this change was introduced in 2012).
      
      2019-08-20  Piotr Trojanek  <trojanek@adacore.com>
      
      gcc/ada/
      
      	* impunit.adb (Get_Kind_Of_Unit): Revert change for adapting
      	this routine for gnatprove.
      
      From-SVN: r274718
      Piotr Trojanek committed
    • [Ada] Document requirements for Pragma Lock_Free · 2beee64a
      2019-08-20  Arnaud Charlet  <charlet@adacore.com>
      
      gcc/ada/
      
      	* doc/gnat_rm/implementation_defined_pragmas.rst: Document
      	requirements for Pragma Lock_Free.
      	* gnat_rm.texi: Regenerate.
      
      From-SVN: r274717
      Arnaud Charlet committed
    • [Ada] Initialize gnat_argc/gnat_argv only the first time · fdacd614
      2019-08-20  Philippe Gil  <gil@adacore.com>
      
      gcc/ada/
      
      	* bindgen.adb (Gen_Main): Set gnat_argc/gnat_argv to argc/argv
      	only when still uninitialized.
      
      From-SVN: r274716
      Philippe Gil committed
    • [Ada] Fix documentation for GNAT.Command_Line.Exit_From_Command_Line · e1976249
      2019-08-20  Bob Duff  <duff@adacore.com>
      
      gcc/ada/
      
      	* libgnat/g-comlin.ads (Exit_From_Command_Line): Fix
      	documentation for GNAT.Command_Line.
      
      From-SVN: r274715
      Bob Duff committed
    • [Ada] Add missing dot at the end of lang.opt doc for -fdump-scos · ca19ff23
      2019-08-20  Pierre-Marie de Rodat  <derodat@adacore.com>
      
      gcc/ada/
      
      	PR ada/91492
      	* gcc-interface/lang.opt (-fdump-scos): Add missing dot at the
      	end of the documentation.
      
      From-SVN: r274714
      Pierre-Marie de Rodat committed
    • re PR rtl-optimization/91347 (hppa: wrong code generated with tail call optimisation) · 7ee98586
      	PR rtl-optimization/91347
      	* dse.c (scan_insn): Call add_wild_read for non-const/memset tail calls
      	before reload if HARD_FRAME_POINTER_IS_ARG_POINTER.
      
      From-SVN: r274708
      Eric Botcazou committed
    • Add a pass_by_reference flag to function_arg_info · 257caa55
      This patch adds a flag that tells targets whether an argument
      has been converted to pass-by-reference form.  This replaces
      assign_parm_data_one::passed_pointer in function.c.
      
      The flag is set automatically for places that call
      apply_pass_by_reference_rules.  Places that apply
      pass-by-reference manually need to set it themselves.
      
      (After previous changes, no targets apply pass-by-reference
      manually.  They all go through apply_pass_by_reference_rules.)
      
      2019-08-20  Richard Sandiford  <richard.sandiford@arm.com>
      
      gcc/
      	* calls.h (function_arg_info): Add a pass_by_reference field,
      	defaulting to false.
      	* calls.c (apply_pass_by_reference_rules): Set pass_by_reference
      	when applying pass-by-reference semantics.
      	(initialize_argument_information): Likewise.
      	(emit_library_call_value_1): Likewise.
      	* function.c (assign_parm_data_one): Remove passed_pointer field.
      	(assign_parm_find_data_types): Don't set it.
      	(assign_parm_find_stack_rtl, assign_parm_adjust_stack_rtl)
      	(assign_parm_setup_reg, assign_parms, gimplify_parameters): Use
      	arg.pass_by_reference instead of passed_pointer.
      
      From-SVN: r274707
      Richard Sandiford committed
    • Make calls.c use function_arg_info internally · cf0d189e
      This patch makes the two main calls.c argument-processing
      routines track the state of the argument in a function_arg_info
      instead of using separate mode variables.
      
      2019-08-20  Richard Sandiford  <richard.sandiford@arm.com>
      
      gcc/
      	* calls.c (emit_library_call_value_1): Merge arg and orig_arg
      	into a single function_arg_info, updating its fields when we
      	apply pass-by-reference and promotion semantics.  Use the
      	function_arg_info to track the mode rather than keeping it in
      	a separate local variable.
      	(initialize_argument_information): Likewise.  Base the final
      	arg_to_skip on this new function_arg_info rather than creating
      	a new one from scratch.
      
      From-SVN: r274706
      Richard Sandiford committed