[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.
This commit is contained in:
Eric Botcazou 2021-11-18 19:00:45 +01:00 committed by Pierre-Marie de Rodat
parent 9ce9322ccc
commit bbafa6251e
1 changed files with 24 additions and 2 deletions

View File

@ -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 --
----------------------------------