From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: by sourceware.org (Postfix, from userid 1914) id 881E53815FE6; Mon, 30 May 2022 08:30:47 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 881E53815FE6 MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Type: text/plain; charset="utf-8" From: Pierre-Marie de Rodat To: gcc-cvs@gcc.gnu.org Subject: [gcc r13-836] [Ada] Fix expansion of aggregate for discriminated limited extension X-Act-Checkin: gcc X-Git-Author: Eric Botcazou X-Git-Refname: refs/heads/master X-Git-Oldrev: 878ded4f9a974bbcf90346d746daa5eeebdd7bd6 X-Git-Newrev: 567bf44932542b8f861dc7880dba3273fb5838ce Message-Id: <20220530083047.881E53815FE6@sourceware.org> Date: Mon, 30 May 2022 08:30:47 +0000 (GMT) X-BeenThere: gcc-cvs@gcc.gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gcc-cvs mailing list List-Unsubscribe: , List-Archive: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 30 May 2022 08:30:47 -0000 https://gcc.gnu.org/g:567bf44932542b8f861dc7880dba3273fb5838ce commit r13-836-g567bf44932542b8f861dc7880dba3273fb5838ce Author: Eric Botcazou Date: Sat Apr 23 12:28:28 2022 +0200 [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: --- 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 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