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.
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