1. 21 Aug, 2019 15 commits
  2. 20 Aug, 2019 25 commits
    • Do not try to process deleted headers with Doxygen · 9e3c41ab
      	* doc/doxygen/user.cfg.in (INPUT): Remove profile mode headers.
      
      From-SVN: r274758
      Jonathan Wakely committed
    • Fix markdown in Doxygen comments for std::reduce · eb0e8589
      	* include/std/numeric (reduce): Fix Doxygen markup.
      
      From-SVN: r274757
      Jonathan Wakely committed
    • 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