Commit 93ba65d5 by Ed Schonberg Committed by Pierre-Marie de Rodat

[Ada] Fix scopes for local variables in task/protected bodies

No impact on compilation with GCC.

2019-07-09  Ed Schonberg  <schonberg@adacore.com>

gcc/ada/

	* sem_util.adb (Scope_Within_Or_Same): Handle properly task
	bodies and protected bodies, so that local variables within have
	their proper scopes after these constructs have been rewritten
	during expansion. This patch resembles but is not identical to
	the code in Scope_Within.

From-SVN: r273269
parent 9ae497cb
2019-07-09 Ed Schonberg <schonberg@adacore.com>
* sem_util.adb (Scope_Within_Or_Same): Handle properly task
bodies and protected bodies, so that local variables within have
their proper scopes after these constructs have been rewritten
during expansion. This patch resembles but is not identical to
the code in Scope_Within.
2019-07-09 Arnaud Charlet <charlet@adacore.com> 2019-07-09 Arnaud Charlet <charlet@adacore.com>
* gnat1drv.adb (Adjust_Global_Switches): Set * gnat1drv.adb (Adjust_Global_Switches): Set
......
...@@ -24268,13 +24268,32 @@ package body Sem_Util is ...@@ -24268,13 +24268,32 @@ package body Sem_Util is
(Inner : Entity_Id; (Inner : Entity_Id;
Outer : Entity_Id) return Boolean Outer : Entity_Id) return Boolean
is is
Curr : Entity_Id; Curr : Entity_Id := Inner;
begin begin
Curr := Inner; -- Similar to the above, but check for scope identity first.
while Present (Curr) and then Curr /= Standard_Standard loop while Present (Curr) and then Curr /= Standard_Standard loop
if Curr = Outer then if Curr = Outer then
return True; return True;
elsif Ekind (Curr) = E_Task_Type
and then Outer = Task_Body_Procedure (Curr)
then
return True;
elsif Is_Subprogram (Curr)
and then Outer = Protected_Body_Subprogram (Curr)
then
return True;
elsif Is_Private_Type (Curr)
and then Present (Full_View (Curr))
then
if Full_View (Curr) = Outer then
return True;
else
return Scope_Within (Full_View (Curr), Outer);
end if;
end if; end if;
Curr := Scope (Curr); Curr := Scope (Curr);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment