exp_attr.adb (Expand_N_Attribute_Reference, case Size): Fix error in handling compile time known size of record or array (case of front...

2007-12-19  Robert Dewar  <dewar@adacore.com>

	* exp_attr.adb (Expand_N_Attribute_Reference, case Size): Fix error in
	handling compile time known size of record or array (case of front end
	layout active, e.g. in GNAAMP).

From-SVN: r131072
This commit is contained in:
Robert Dewar 2007-12-19 17:23:09 +01:00 committed by Arnaud Charlet
parent 4a76b687c4
commit cf284c756a

View File

@ -3756,13 +3756,29 @@ package body Exp_Attr is
-- Common processing for record and array component case
if Siz /= No_Uint and then Siz /= 0 then
Rewrite (N, Make_Integer_Literal (Loc, Siz));
declare
CS : constant Boolean := Comes_From_Source (N);
Analyze_And_Resolve (N, Typ);
begin
Rewrite (N, Make_Integer_Literal (Loc, Siz));
-- The result is not a static expression
-- This integer literal is not a static expression. We do not
-- call Analyze_And_Resolve here, because this would activate
-- the circuit for deciding that a static value was out of
-- range, and we don't want that.
Set_Is_Static_Expression (N, False);
-- So just manually set the type, mark the expression as non-
-- static, and then ensure that the result is checked properly
-- if the attribute comes from source (if it was internally
-- generated, we never need a constraint check).
Set_Etype (N, Typ);
Set_Is_Static_Expression (N, False);
if CS then
Apply_Constraint_Check (N, Typ);
end if;
end;
end if;
end Size;