mirror of
git://gcc.gnu.org/git/gcc.git
synced 2025-03-19 03:40:26 +08:00
exp_aggr.adb (Static_Array_Aggregate): Use Max_Aggr_Size to determine whether an array aggregate with static bounds...
2008-04-08 Ed Schonberg <schonberg@adacore.com> * exp_aggr.adb (Static_Array_Aggregate): Use Max_Aggr_Size to determine whether an array aggregate with static bounds and scalar components should be expanded into a static constant. From-SVN: r134025
This commit is contained in:
parent
2dcf2584db
commit
fc534c1c80
@ -300,7 +300,7 @@ package body Exp_Aggr is
|
||||
Hiv : Uint;
|
||||
|
||||
-- The following constant determines the maximum size of an
|
||||
-- aggregate produced by converting named to positional
|
||||
-- array aggregate produced by converting named to positional
|
||||
-- notation (e.g. from others clauses). This avoids running
|
||||
-- away with attempts to convert huge aggregates, which hit
|
||||
-- memory limits in the backend.
|
||||
@ -1170,9 +1170,9 @@ package body Exp_Aggr is
|
||||
-- If the component is itself an array of controlled types, whose
|
||||
-- value is given by a sub-aggregate, then the attach calls have
|
||||
-- been generated when individual subcomponent are assigned, and
|
||||
-- and must not be done again to prevent malformed finalization
|
||||
-- chains (see comments above, concerning the creation of a block
|
||||
-- to hold inner finalization actions).
|
||||
-- must not be done again to prevent malformed finalization chains
|
||||
-- (see comments above, concerning the creation of a block to hold
|
||||
-- inner finalization actions).
|
||||
|
||||
if Present (Comp_Type)
|
||||
and then Controlled_Type (Comp_Type)
|
||||
@ -1677,10 +1677,6 @@ package body Exp_Aggr is
|
||||
-- Build_Record_Aggr_Code --
|
||||
----------------------------
|
||||
|
||||
----------------------------
|
||||
-- Build_Record_Aggr_Code --
|
||||
----------------------------
|
||||
|
||||
function Build_Record_Aggr_Code
|
||||
(N : Node_Id;
|
||||
Typ : Entity_Id;
|
||||
@ -6350,7 +6346,8 @@ package body Exp_Aggr is
|
||||
else
|
||||
-- The aggregate is static if all components are literals, or
|
||||
-- else all its components are static aggregates for the
|
||||
-- component type.
|
||||
-- component type. We also limit the size of a static aggregate
|
||||
-- to prevent runaway static expressions.
|
||||
|
||||
if Is_Array_Type (Comp_Type)
|
||||
or else Is_Record_Type (Comp_Type)
|
||||
@ -6364,6 +6361,9 @@ package body Exp_Aggr is
|
||||
|
||||
elsif Nkind (Expression (Expr)) /= N_Integer_Literal then
|
||||
return False;
|
||||
|
||||
elsif not Aggr_Size_OK (Typ) then
|
||||
return False;
|
||||
end if;
|
||||
|
||||
-- Create a positional aggregate with the right number of
|
||||
|
Loading…
x
Reference in New Issue
Block a user