From: Viljar Indus Date: Wed, 21 Jun 2023 13:22:37 +0000 (+0300) Subject: ada: Evaluate static expressions in Range attributes X-Git-Tag: basepoints/gcc-15~7779 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=15e2d19ff46527d56407eaea64161943efc3e2b7;p=thirdparty%2Fgcc.git ada: Evaluate static expressions in Range attributes 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. --- diff --git a/gcc/ada/sem_attr.adb b/gcc/ada/sem_attr.adb index 7a47abdb625c..e00addd0152f 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)