[COMMITTED] ada: Evaluate static expressions in Range attributes
Checks
Commit Message
From: Viljar Indus <indus@adacore.com>
Gigi assumes that the value of range expressions is an integer literal.
Force evaluation of such expressions since static non-literal expressions
are not always evaluated to a literal form by gnat.
gcc/ada/
* sem_attr.adb (analyze_attribute.check_array_type): Replace valid
indexes with their staticly evaluated values.
Tested on x86_64-pc-linux-gnu, committed on master.
---
gcc/ada/sem_attr.adb | 16 +++++++++++++---
1 file changed, 13 insertions(+), 3 deletions(-)
@@ -2013,10 +2013,20 @@ package body Sem_Attr is
Flag_Non_Static_Expr
("expression for dimension must be static!", E1);
Error_Attr;
-
- elsif Expr_Value (E1) > D or else Expr_Value (E1) < 1 then
- Error_Attr ("invalid dimension number for array type", E1);
end if;
+
+ declare
+ Value : constant Uint := Expr_Value (E1);
+ begin
+
+ if Value > D or else Value < 1 then
+ Error_Attr ("invalid dimension number for array type", E1);
+ end if;
+
+ -- Replace the static value to simplify the tree for gigi
+ Fold_Uint (E1, Value, True);
+ end;
+
end if;
if (Style_Check and Style_Check_Array_Attribute_Index)