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.
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)