OSDN Git Service

2009-04-10 Robert Dewar <dewar@adacore.com>
authorcharlet <charlet@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 10 Apr 2009 09:58:35 +0000 (09:58 +0000)
committercharlet <charlet@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 10 Apr 2009 09:58:35 +0000 (09:58 +0000)
* sem_aux.ads, sem_aux.adb (Nearest_Current_Scope): New function.

* sem_res.adb (Resolve_Call): Fix test for
Suppress_Value_Tracking_On_Call (was wrong for the case of a call from
a non-dynamic scope).

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@145881 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ada/ChangeLog
gcc/ada/sem_aux.adb
gcc/ada/sem_aux.ads
gcc/ada/sem_res.adb

index c8a1785..4aced67 100644 (file)
@@ -1,5 +1,13 @@
 2009-04-10  Robert Dewar  <dewar@adacore.com>
 
+       * sem_aux.ads, sem_aux.adb (Nearest_Current_Scope): New function.
+
+       * sem_res.adb (Resolve_Call): Fix test for
+       Suppress_Value_Tracking_On_Call (was wrong for the case of a call from
+       a non-dynamic scope).
+
+2009-04-10  Robert Dewar  <dewar@adacore.com>
+
        * make.adb: Add comment.
        Minor reformatting
 
index 4acfb1d..94db312 100755 (executable)
@@ -158,7 +158,7 @@ package body Sem_Aux is
    -----------------------------
 
    function Enclosing_Dynamic_Scope (Ent : Entity_Id) return Entity_Id is
-      S  : Entity_Id;
+      S : Entity_Id;
 
    begin
       --  The following test is an error defense against some syntax
@@ -710,6 +710,19 @@ package body Sem_Aux is
       end if;
    end Is_Limited_Type;
 
+   ---------------------------
+   -- Nearest_Dynamic_Scope --
+   ---------------------------
+
+   function Nearest_Dynamic_Scope (Ent : Entity_Id) return Entity_Id is
+   begin
+      if Is_Dynamic_Scope (Ent) then
+         return Ent;
+      else
+         return Enclosing_Dynamic_Scope (Ent);
+      end if;
+   end Nearest_Dynamic_Scope;
+
    ------------------------
    -- Next_Tag_Component --
    ------------------------
index 53bad53..f846744 100755 (executable)
@@ -180,6 +180,11 @@ package Sem_Aux is
    --  composite containing a limited component, or a subtype of any of
    --  these types).
 
+   function Nearest_Dynamic_Scope (Ent : Entity_Id) return Entity_Id;
+   --  This is similar to Enclosing_Dynamic_Scope except that if Ent is itself
+   --  a dynamic scope, then it is returned. Otherwise the result is the same
+   --  as that returned by Enclosing_Dynamic_Scope.
+
    function Next_Tag_Component (Tag : Entity_Id) return Entity_Id;
    --  Tag must be an entity representing a _Tag field of a tagged record.
    --  The result returned is the next _Tag field in this record, or Empty
index 9ff9d80..a6c5aad 100644 (file)
@@ -5150,7 +5150,8 @@ package body Sem_Res is
 
       if Inside_Freezing_Actions = 0
         and then (not Is_Library_Level_Entity (Nam)
-                   or else Suppress_Value_Tracking_On_Call (Current_Scope))
+                   or else Suppress_Value_Tracking_On_Call
+                             (Nearest_Dynamic_Scope (Current_Scope)))
         and then (Comes_From_Source (Nam)
                    or else (Present (Alias (Nam))
                              and then Comes_From_Source (Alias (Nam))))