gcc/d/ChangeLog:
PR d/88722
* modules.cc: Include diagnostic.h.
(register_moduleinfo): Use sorry instead of gcc_assert for targets
without named sections.
From-SVN: r274769
Don't crash when compiling for 16-bit platforms.
Reviewed-on: https://github.com/dlang/dmd/pull/10306
gcc/d/ChangeLog:
* d-target.cc: Include diagnostic.h.
(Target::_init): Set Tsize_t and Tptrdiff_t as D ushort and short if
the target pointer size is 2. Add sorry if the pointer size is not
either 2, 4, or 8.
From-SVN: r274768
gcc/d/ChangeLog:
PR d/90445
* d-builtins.cc (d_build_c_type_nodes): Test UINTMAX_TYPE for setting
uintmax_type_node. Set signed_size_type_node as the signed_type_for
size_type_node.
From-SVN: r274766
gcc/d/ChangeLog:
PR d/90444
* d-builtins.cc (build_frontend_type): Build anonymous RECORD_TYPE
nodes as well, push all fields to the struct members.
(d_build_builtins_module): Push anonymous va_list structs to the
builtins module, naming them __builtin_va_list.
(d_init_builtins): Use sorry instead of gcc_unreachable if va_list did
not succeed in being represented as a D type.
From-SVN: r274765
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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