diff options
author | Eric Botcazou <ebotcazou@adacore.com> | 2022-04-23 12:28:28 +0200 |
---|---|---|
committer | Pierre-Marie de Rodat <derodat@adacore.com> | 2022-05-30 08:29:02 +0000 |
commit | 567bf44932542b8f861dc7880dba3273fb5838ce (patch) | |
tree | 7589a33afa115dfedb033469f9ca3d869a979dce | |
parent | 878ded4f9a974bbcf90346d746daa5eeebdd7bd6 (diff) |
[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.
-rw-r--r-- | gcc/ada/exp_aggr.adb | 16 |
1 files changed, 13 insertions, 3 deletions
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 |