diff options
author | Eric Botcazou <ebotcazou@adacore.com> | 2021-11-18 19:00:45 +0100 |
---|---|---|
committer | Pierre-Marie de Rodat <derodat@adacore.com> | 2021-12-01 10:24:43 +0000 |
commit | bbafa6251ed34c3753d3efd821338b493cc957e0 (patch) | |
tree | ae688ab3dcd79d17e2dc70781d0c2ac660d8d91f /gcc/ada/sem_elab.adb | |
parent | 9ce9322ccc4aa873d732554c895b821c90017511 (diff) | |
download | gcc-bbafa6251ed34c3753d3efd821338b493cc957e0.zip gcc-bbafa6251ed34c3753d3efd821338b493cc957e0.tar.gz gcc-bbafa6251ed34c3753d3efd821338b493cc957e0.tar.bz2 |
[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.
Diffstat (limited to 'gcc/ada/sem_elab.adb')
-rw-r--r-- | gcc/ada/sem_elab.adb | 26 |
1 files changed, 24 insertions, 2 deletions
diff --git a/gcc/ada/sem_elab.adb b/gcc/ada/sem_elab.adb index c906708..29f3069 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 -- ---------------------------------- |