summaryrefslogtreecommitdiff
path: root/gcc/ada/sem_ch12.adb
diff options
context:
space:
mode:
authorbosch <bosch@138bc75d-0d04-0410-961f-82ee72b054a4>2001-12-03 19:21:33 +0000
committerbosch <bosch@138bc75d-0d04-0410-961f-82ee72b054a4>2001-12-03 19:21:33 +0000
commit5edbb398f6685dd578292a0529bc1763d420a173 (patch)
tree6e9f6c7b7364bbc29a8601292577541921ec75e7 /gcc/ada/sem_ch12.adb
parent684359128e4da5eefe42173ee6909fcf2bca36a7 (diff)
downloadgcc-5edbb398f6685dd578292a0529bc1763d420a173.tar.gz
2001-12-03 Ed Schonberg <schonber@gnat.com>
* sem_ch12.adb (Inline_Instance_Body): Use Save_Scope_Stack and push Standard on the stack before analyzing the instance body, in order to have a clean visibility environment. * sem_ch12.adb (Inline_Instance_Body): Remove redundant code. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@47559 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/ada/sem_ch12.adb')
-rw-r--r--gcc/ada/sem_ch12.adb39
1 files changed, 10 insertions, 29 deletions
diff --git a/gcc/ada/sem_ch12.adb b/gcc/ada/sem_ch12.adb
index 811644d2d3c..b7c880422a2 100644
--- a/gcc/ada/sem_ch12.adb
+++ b/gcc/ada/sem_ch12.adb
@@ -2728,6 +2728,11 @@ package body Sem_Ch12 is
then
Removed := True;
+ -- Remove entities in current scopes from visibility, so
+ -- than instance body is compiled in a clean environment.
+
+ Save_Scope_Stack;
+
if Is_Child_Unit (S) then
-- Remove child unit from stack, as well as inner scopes.
-- Removing the context of a child unit removes parent
@@ -2755,8 +2760,11 @@ package body Sem_Ch12 is
S := Scope (S);
end loop;
+ New_Scope (Standard_Standard);
Instantiate_Package_Body
((N, Act_Decl, Expander_Active, Current_Sem_Unit));
+ Pop_Scope;
+
-- Restore context.
@@ -2771,37 +2779,8 @@ package body Sem_Ch12 is
end loop;
if Removed then
- -- Make local entities not visible, so that when the context of
- -- unit is restored, there are not spurious hidings of use-
- -- visible entities (which appear in the environment before the
- -- current scope).
-
- if Current_Scope /= Standard_Standard then
- S := First_Entity (Current_Scope);
-
- while Present (S) loop
- if Is_Overloadable (S) then
- Set_Is_Immediately_Visible (S, False);
- end if;
-
- Next_Entity (S);
- end loop;
- end if;
-
Install_Context (Curr_Comp);
- if Current_Scope /= Standard_Standard then
- S := First_Entity (Current_Scope);
-
- while Present (S) loop
- if Is_Overloadable (S) then
- Set_Is_Immediately_Visible (S);
- end if;
-
- Next_Entity (S);
- end loop;
- end if;
-
if Present (Curr_Scope)
and then Is_Child_Unit (Curr_Scope)
then
@@ -2814,6 +2793,8 @@ package body Sem_Ch12 is
New_Scope (Inner_Scopes (J));
end loop;
end if;
+
+ Restore_Scope_Stack;
end if;
for J in reverse 1 .. Num_Scopes loop