aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEric Botcazou <ebotcazou@adacore.com>2022-04-23 12:28:28 +0200
committerPierre-Marie de Rodat <derodat@adacore.com>2022-05-30 08:29:02 +0000
commit567bf44932542b8f861dc7880dba3273fb5838ce (patch)
tree7589a33afa115dfedb033469f9ca3d869a979dce
parent878ded4f9a974bbcf90346d746daa5eeebdd7bd6 (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.adb16
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