From: Eric Botcazou Date: Thu, 18 Nov 2021 18:00:45 +0000 (+0100) Subject: [Ada] Do not return freeze nodes for start of early call regions X-Git-Tag: basepoints/gcc-13~2632 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=bbafa6251ed34c3753d3efd821338b493cc957e0;p=thirdparty%2Fgcc.git [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 --git a/gcc/ada/sem_elab.adb b/gcc/ada/sem_elab.adb index c9067081bf2e..29f306994f73 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 -- ----------------------------------