From: Eric Botcazou Date: Sat, 23 Apr 2022 10:28:28 +0000 (+0200) Subject: [Ada] Fix expansion of aggregate for discriminated limited extension X-Git-Tag: basepoints/gcc-14~6371 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=567bf44932542b8f861dc7880dba3273fb5838ce;p=thirdparty%2Fgcc.git [Ada] Fix expansion of aggregate for discriminated limited extension The presence of the discriminants prevents the values associated with the components of the parent type from being put into the sub-aggregate built for the _Parent component. gcc/ada/ * exp_aggr.adb (Expand_Record_Aggregate.Build_Back_End_Aggregate): Skip the discriminants at the start of the component list before looking for the components inherited from the parent in the case of a tagged extension. --- diff --git a/gcc/ada/exp_aggr.adb b/gcc/ada/exp_aggr.adb index 13be987b3e6..4828406647c 100644 --- a/gcc/ada/exp_aggr.adb +++ b/gcc/ada/exp_aggr.adb @@ -8474,11 +8474,21 @@ package body Exp_Aggr is Parent_Name : Node_Id; begin - -- Remove the inherited component association from the - -- aggregate and store them in the parent aggregate - First_Comp := First (Component_Associations (N)); Parent_Comps := New_List; + + -- First skip the discriminants + + while Present (First_Comp) + and then Ekind (Entity (First (Choices (First_Comp)))) + = E_Discriminant + loop + Next (First_Comp); + end loop; + + -- Then remove the inherited component association from the + -- aggregate and store them in the parent aggregate + while Present (First_Comp) and then Scope (Original_Record_Component