https://gcc.gnu.org/g:b97c46eebe72992ec4cc21df36b272ad431b92ca

commit r15-10315-gb97c46eebe72992ec4cc21df36b272ad431b92ca
Author: Gary Dismukes <dismu...@adacore.com>
Date:   Thu Aug 21 18:48:12 2025 +0000

    ada: Compiler crash on container aggregate association with nonstatic key 
choice
    
    The compiler blows up on a container aggregate with a container element
    association that has a key_choice given by a nonstatic key expression.
    This happens in the size computation for the aggregate due to calling
    Update_Choices with the nonstatic expression.  The fix is simply to
    condition the call to Update_Choices on whether the choice expression
    is static.
    
    gcc/ada/ChangeLog:
    
            * exp_aggr.adb (Build_Container_Aggr_Code.Build_Size_Expr): In the 
case
            of an association with a single choice, only call Update_Choices 
when
            the choice expression is nonstatic.

Diff:
---
 gcc/ada/exp_aggr.adb | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/gcc/ada/exp_aggr.adb b/gcc/ada/exp_aggr.adb
index f0cf8393c7e1..f35e16b67616 100644
--- a/gcc/ada/exp_aggr.adb
+++ b/gcc/ada/exp_aggr.adb
@@ -6789,7 +6789,9 @@ package body Exp_Aggr is
                --  Choice is a single discrete value
 
                elsif Is_Discrete_Type (Etype (Choice)) then
-                  Update_Choices (Choice, Choice);
+                  if Is_Static_Expression (Choice) then
+                     Update_Choices (Choice, Choice);
+                  end if;
 
                   Temp_Siz_Exp := Make_Integer_Literal (Loc, 1);
                   Set_Is_Static_Expression (Temp_Siz_Exp);

Reply via email to