Commit cf284c75 by Robert Dewar Committed by Arnaud Charlet

exp_attr.adb (Expand_N_Attribute_Reference, case Size): Fix error in handling…

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
parent 4a76b687
...@@ -3756,13 +3756,29 @@ package body Exp_Attr is ...@@ -3756,13 +3756,29 @@ package body Exp_Attr is
-- Common processing for record and array component case -- Common processing for record and array component case
if Siz /= No_Uint and then Siz /= 0 then 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));
-- 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.
-- The result is not a static expression -- 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_Is_Static_Expression (N, False); Set_Etype (N, Typ);
Set_Is_Static_Expression (N, False);
if CS then
Apply_Constraint_Check (N, Typ);
end if;
end;
end if; end if;
end Size; end Size;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment