sem_ch10.adb (Install_Withed_Unit): If the unit is a generic instance that is the...
authorEd Schonberg <schonber@gnat.com>
Tue, 11 Dec 2001 23:27:40 +0000 (23:27 +0000)
committerGeert Bosch <bosch@gcc.gnu.org>
Tue, 11 Dec 2001 23:27:40 +0000 (00:27 +0100)
* sem_ch10.adb (Install_Withed_Unit): If the unit is a generic instance
that is the parent of other generics, the instance body replaces the
instance node.  Retrieve the instance of the spec, which is the one
that is visible in clients and within the body.

From-SVN: r47906

gcc/ada/ChangeLog
gcc/ada/sem_ch10.adb

index a1f258911165ae08dd5cbe49b5222010cf19a422..2f055e344ab8e7df6d5a8672e72359d71b44d2bf 100644 (file)
@@ -1,3 +1,10 @@
+2001-12-11  Ed Schonberg <schonber@gnat.com>
+
+       * sem_ch10.adb (Install_Withed_Unit): If the unit is a generic instance
+       that is the parent of other generics, the instance body replaces the 
+       instance node.  Retrieve the instance of the spec, which is the one 
+       that is visible in clients and within the body.
+
 2001-12-11  Vincent Celier <celier@gnat.com>
 
        * gnatmain.adb: Initial version.
index 2bbe0a50081651cd98bf9e12e333822991d3d5a8..8a1cc690eac5bbc8c9cd705925a8587e0b159b77 100644 (file)
@@ -6,7 +6,7 @@
 --                                                                          --
 --                                 B o d y                                  --
 --                                                                          --
---                            $Revision: 1.402 $
+--                            $Revision$
 --                                                                          --
 --          Copyright (C) 1992-2001 Free Software Foundation, Inc.          --
 --                                                                          --
@@ -2708,10 +2708,21 @@ package body Sem_Ch10 is
    -------------------------
 
    procedure Install_Withed_Unit (With_Clause : Node_Id) is
-      Uname : constant Entity_Id := Entity (Name (With_Clause));
+      Uname : Entity_Id := Entity (Name (With_Clause));
       P     : constant Entity_Id := Scope (Uname);
 
    begin
+      --  If the unit is a package instantiation, its body may have been
+      --  generated for an inner instance, and the instance now denotes the
+      --  body entity. For visibility purposes we need the instance in the
+      --  specification.
+
+      if Ekind (Uname) = E_Package_Body
+        and then Is_Generic_Instance (Uname)
+      then
+         Uname := Spec_Entity (Uname);
+      end if;
+
       --  We do not apply the restrictions to an internal unit unless
       --  we are compiling the internal unit as a main unit. This check
       --  is also skipped for dummy units (for missing packages).