From: Ed Schonberg Date: Tue, 8 Apr 2008 06:49:26 +0000 (+0200) Subject: exp_aggr.adb (Static_Array_Aggregate): Use Max_Aggr_Size to determine whether an... X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=fc534c1c8033713fafc5caa06c095285826d35c4;p=gcc.git exp_aggr.adb (Static_Array_Aggregate): Use Max_Aggr_Size to determine whether an array aggregate with static bounds... 2008-04-08 Ed Schonberg * 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 --- diff --git a/gcc/ada/exp_aggr.adb b/gcc/ada/exp_aggr.adb index c334150b84a..c815369e821 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