public inbox for gcc-patches@gcc.gnu.org
 help / color / mirror / Atom feed
* [Ada] Fix scopes for local variables in task/protected bodies
@ 2019-07-09  7:52 Pierre-Marie de Rodat
  0 siblings, 0 replies; only message in thread
From: Pierre-Marie de Rodat @ 2019-07-09  7:52 UTC (permalink / raw)
  To: gcc-patches; +Cc: Ed Schonberg

[-- Attachment #1: Type: text/plain, Size: 429 bytes --]

No impact on compilation with GCC.

Tested on x86_64-pc-linux-gnu, committed on trunk

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.

[-- Attachment #2: patch.diff --]
[-- Type: text/x-diff, Size: 1082 bytes --]

--- gcc/ada/sem_util.adb
+++ gcc/ada/sem_util.adb
@@ -24268,13 +24268,32 @@ package body Sem_Util is
      (Inner : Entity_Id;
       Outer : Entity_Id) return Boolean
    is
-      Curr : Entity_Id;
-
+      Curr : Entity_Id := Inner;
    begin
-      Curr := Inner;
+      --  Similar to the above, but check for scope identity first.
+
       while Present (Curr) and then Curr /= Standard_Standard loop
          if Curr = Outer then
             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;
 
          Curr := Scope (Curr);


^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2019-07-09  7:52 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2019-07-09  7:52 [Ada] Fix scopes for local variables in task/protected bodies Pierre-Marie de Rodat

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).