aboutsummaryrefslogtreecommitdiff
path: root/gcc/ada/sem_elab.adb
diff options
context:
space:
mode:
authorEric Botcazou <ebotcazou@adacore.com>2021-11-18 19:00:45 +0100
committerPierre-Marie de Rodat <derodat@adacore.com>2021-12-01 10:24:43 +0000
commitbbafa6251ed34c3753d3efd821338b493cc957e0 (patch)
treeae688ab3dcd79d17e2dc70781d0c2ac660d8d91f /gcc/ada/sem_elab.adb
parent9ce9322ccc4aa873d732554c895b821c90017511 (diff)
downloadgcc-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.adb26
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 --
----------------------------------