[Ada] Improved support for aspect alignment in CCG
2020-06-02 Javier Miranda <miranda@adacore.com> gcc/ada/ * sem_ch3.adb (Analyze_Object_Declaration): Set attribute Expansion_Delayed on aggregates that initialize an object that has aspect alignment or address clause. Done to allow ther initialization by means of multiple assignments. * exp_ch3.adb (Expand_N_Object_Declaration): Resolve delayed aggregates. This patch complements the patch applied to sem_ch3.adb
This commit is contained in:
parent
b60be63da2
commit
e09092000a
@ -6610,9 +6610,13 @@ package body Exp_Ch3 is
|
||||
-- An aggregate that must be built in place is not resolved and
|
||||
-- expanded until the enclosing construct is expanded. This will
|
||||
-- happen when the aggregate is limited and the declared object
|
||||
-- has a following address clause.
|
||||
-- has a following address clause; it happens also when generating
|
||||
-- C code for an aggregate that has an alignment or address clause
|
||||
-- (see Analyze_Object_Declaration).
|
||||
|
||||
if Is_Limited_Type (Typ) and then not Analyzed (Expr) then
|
||||
if (Is_Limited_Type (Typ) or else Modify_Tree_For_C)
|
||||
and then not Analyzed (Expr)
|
||||
then
|
||||
Resolve (Expr, Typ);
|
||||
end if;
|
||||
|
||||
|
@ -4318,7 +4318,11 @@ package body Sem_Ch3 is
|
||||
-- If the aggregate is limited it will be built in place, and its
|
||||
-- expansion is deferred until the object declaration is expanded.
|
||||
|
||||
if Is_Limited_Type (T) then
|
||||
-- This is also required when generating C code to ensure that an
|
||||
-- object with an alignment or address clause can be initialized
|
||||
-- by means of component by component assignments.
|
||||
|
||||
if Is_Limited_Type (T) or else Modify_Tree_For_C then
|
||||
Set_Expansion_Delayed (E);
|
||||
end if;
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user