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:
Ed Schonberg 2008-04-08 08:49:26 +02:00 committed by Arnaud Charlet
parent 2dcf2584db
commit fc534c1c80
1 changed files with 9 additions and 9 deletions

View File

@ -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