diff options
author | Ed Schonberg <schonberg@adacore.com> | 2008-04-08 08:49:26 +0200 |
---|---|---|
committer | Arnaud Charlet <charlet@gcc.gnu.org> | 2008-04-08 08:49:26 +0200 |
commit | fc534c1c8033713fafc5caa06c095285826d35c4 (patch) | |
tree | 36d245f088a115a8d65e90355e6a66a55c481816 /gcc/ada | |
parent | 2dcf2584dbcefb4c3148a2c4ec776598d2004c1c (diff) | |
download | gcc-fc534c1c8033713fafc5caa06c095285826d35c4.zip gcc-fc534c1c8033713fafc5caa06c095285826d35c4.tar.gz gcc-fc534c1c8033713fafc5caa06c095285826d35c4.tar.bz2 |
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
Diffstat (limited to 'gcc/ada')
-rw-r--r-- | gcc/ada/exp_aggr.adb | 18 |
1 files changed, 9 insertions, 9 deletions
diff --git a/gcc/ada/exp_aggr.adb b/gcc/ada/exp_aggr.adb index c334150..c815369 100644 --- a/gcc/ada/exp_aggr.adb +++ b/gcc/ada/exp_aggr.adb @@ -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 |