diff options
author | Robert Dewar <dewar@adacore.com> | 2009-04-10 09:58:35 +0000 |
---|---|---|
committer | Arnaud Charlet <charlet@gcc.gnu.org> | 2009-04-10 11:58:35 +0200 |
commit | 24357840f1d9fbeb5f604b33b541479786d9910a (patch) | |
tree | 60b600a4905a739ecc00f1a2f5f76492813fd691 /gcc | |
parent | 4f64abad80d072773ac390c9a93470dd57da4c31 (diff) | |
download | gcc-24357840f1d9fbeb5f604b33b541479786d9910a.zip gcc-24357840f1d9fbeb5f604b33b541479786d9910a.tar.gz gcc-24357840f1d9fbeb5f604b33b541479786d9910a.tar.bz2 |
sem_aux.ads, [...] (Nearest_Current_Scope): New function.
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).
From-SVN: r145881
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ada/ChangeLog | 8 | ||||
-rwxr-xr-x | gcc/ada/sem_aux.adb | 15 | ||||
-rwxr-xr-x | gcc/ada/sem_aux.ads | 5 | ||||
-rw-r--r-- | gcc/ada/sem_res.adb | 3 |
4 files changed, 29 insertions, 2 deletions
diff --git a/gcc/ada/ChangeLog b/gcc/ada/ChangeLog index c8a1785..4aced67 100644 --- a/gcc/ada/ChangeLog +++ b/gcc/ada/ChangeLog @@ -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 diff --git a/gcc/ada/sem_aux.adb b/gcc/ada/sem_aux.adb index 4acfb1d..94db312 100755 --- a/gcc/ada/sem_aux.adb +++ b/gcc/ada/sem_aux.adb @@ -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 -- ------------------------ diff --git a/gcc/ada/sem_aux.ads b/gcc/ada/sem_aux.ads index 53bad53..f846744 100755 --- a/gcc/ada/sem_aux.ads +++ b/gcc/ada/sem_aux.ads @@ -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 diff --git a/gcc/ada/sem_res.adb b/gcc/ada/sem_res.adb index 9ff9d80..a6c5aad 100644 --- a/gcc/ada/sem_res.adb +++ b/gcc/ada/sem_res.adb @@ -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)))) |