]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
ada: Compiler crash on container aggregate with constant element choice
authorGary Dismukes <dismukes@adacore.com>
Fri, 25 Jul 2025 20:56:32 +0000 (20:56 +0000)
committerEric Botcazou <ebotcazou@adacore.com>
Thu, 11 Sep 2025 10:17:30 +0000 (12:17 +0200)
The compiler fails when compiling a container aggregate with
an element association with a key choice that denotes a constant
object.  The code for getting the value of the choice was only
accounting for the possibility of integer and enumeration literals,
and is corrected to handle static expressions generally.

gcc/ada/ChangeLog:

* exp_aggr.adb (Build_Container_Aggr_Code.To_Int): Replace existing
conditional expression with call to Expr_Value.

gcc/ada/exp_aggr.adb

index 29db1cd2fb12671a3d4985ed6289db886358afc3..f0cf8393c7e11d35838bec972c65511693b6041f 100644 (file)
@@ -7013,13 +7013,11 @@ package body Exp_Aggr is
       -- To_Int --
       ------------
 
-      --  The bounds of the discrete range are integers or enumeration literals
+      --  The bounds of the discrete range are static discrete values
 
       function To_Int (Expr : N_Subexpr_Id) return Int is
       begin
-         return UI_To_Int ((if Nkind (Expr) = N_Integer_Literal
-                            then Intval (Expr)
-                            else Enumeration_Pos (Entity (Expr))));
+         return UI_To_Int (Expr_Value (Expr));
       end To_Int;
 
       --  Local variables