From: Viljar Indus <in...@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(-) diff --git a/gcc/ada/sem_attr.adb b/gcc/ada/sem_attr.adb index 7a47abdb625..e00addd0152 100644 --- a/gcc/ada/sem_attr.adb +++ b/gcc/ada/sem_attr.adb @@ -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) -- 2.40.0