From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: by sourceware.org (Postfix, from userid 1914) id A071F3858014; Wed, 1 Dec 2021 10:27:26 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org A071F3858014 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 r12-5681] [Ada] Do not return freeze nodes for start of early call regions X-Act-Checkin: gcc X-Git-Author: Eric Botcazou X-Git-Refname: refs/heads/master X-Git-Oldrev: 9ce9322ccc4aa873d732554c895b821c90017511 X-Git-Newrev: bbafa6251ed34c3753d3efd821338b493cc957e0 Message-Id: <20211201102726.A071F3858014@sourceware.org> Date: Wed, 1 Dec 2021 10:27:26 +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: Wed, 01 Dec 2021 10:27:26 -0000 https://gcc.gnu.org/g:bbafa6251ed34c3753d3efd821338b493cc957e0 commit r12-5681-gbbafa6251ed34c3753d3efd821338b493cc957e0 Author: Eric Botcazou Date: Thu Nov 18 19:00:45 2021 +0100 [Ada] Do not return freeze nodes for start of early call regions gcc/ada/ * sem_elab.adb (Previous_Suitable_Construct): New function declared in the Early_Call_Region_Processor package. (Find_ECR): Call it to get the previous node at the start. (Include): Call it to get the previous node during the traversal. Diff: --- gcc/ada/sem_elab.adb | 26 ++++++++++++++++++++++++-- 1 file changed, 24 insertions(+), 2 deletions(-) diff --git a/gcc/ada/sem_elab.adb b/gcc/ada/sem_elab.adb index c9067081bf2..29f306994f7 100644 --- a/gcc/ada/sem_elab.adb +++ b/gcc/ada/sem_elab.adb @@ -6965,6 +6965,11 @@ package body Sem_Elab is -- Determine whether arbitrary node N denotes a suitable construct -- for inclusion into the early call region. + function Previous_Suitable_Construct (N : Node_Id) return Node_Id; + pragma Inline (Previous_Suitable_Construct); + -- Return the previous node suitable for inclusion into the early + -- call region. + procedure Transition_Body_Declarations (Bod : Node_Id; Curr : out Node_Id); @@ -7209,7 +7214,7 @@ package body Sem_Elab is begin -- The early call region starts at N - Curr := Prev (N); + Curr := Previous_Suitable_Construct (N); Start := N; -- Inspect each node in reverse declarative order while going in @@ -7286,7 +7291,7 @@ package body Sem_Elab is -- Otherwise the input node is still within some list else - Curr := Prev (Start); + Curr := Previous_Suitable_Construct (Start); end if; end Include; @@ -7378,6 +7383,23 @@ package body Sem_Elab is end case; end Is_Suitable_Construct; + --------------------------------- + -- Previous_Suitable_Construct -- + --------------------------------- + + function Previous_Suitable_Construct (N : Node_Id) return Node_Id is + P : Node_Id; + + begin + P := Prev (N); + + while Present (P) and then not Is_Suitable_Construct (P) loop + Prev (P); + end loop; + + return P; + end Previous_Suitable_Construct; + ---------------------------------- -- Transition_Body_Declarations -- ----------------------------------