From 567bf44932542b8f861dc7880dba3273fb5838ce Mon Sep 17 00:00:00 2001 From: Eric Botcazou Date: Sat, 23 Apr 2022 12:28:28 +0200 Subject: [PATCH] [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. --- gcc/ada/exp_aggr.adb | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/gcc/ada/exp_aggr.adb b/gcc/ada/exp_aggr.adb index 13be987..4828406 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 -- 2.7.4