------------------ t_instantiate1.adb ---------------
-- Check simple cases
package T_Instantiate1 is
   pragma Elaborate_Body;
end T_Instantiate1;

with Ada.Text_IO;
with Ada.Unchecked_Conversion;

with X_Instantiate2;
with X_Instantiate2;
package body T_Instantiate1 is   -- Begin of T_Instantiate1
   
-- A comment in a removed part


   


   


   


   


   -------------------- Instantiations -----------------------
   

package Int_Pack1_Instantiation_Wrapper is
subtype T is Integer;
Init : constant T := 0;

   package Gen_Pack is          -- A comment in a removed part
     V : T := Init;
   end Gen_Pack;

end Int_Pack1_Instantiation_Wrapper;

package Int_Pack1 renames Int_Pack1_Instantiation_Wrapper.Gen_Pack;
          -- A comment in an instantiation
   

package Int_Pack2_Instantiation_Wrapper is
subtype T is Integer;
Init : constant T := 0;

   package Gen_Pack is          -- A comment in a removed part
     V : T := Init;
   end Gen_Pack;

end Int_Pack2_Instantiation_Wrapper;

package Int_Pack2 renames Int_Pack2_Instantiation_Wrapper.Gen_Pack;

   package Nesting1 is
      

package Int_Pack3_Instantiation_Wrapper is
use Ada.Text_IO;
subtype T1 is Integer;
pragma Page;
subtype T2 is Integer;
use Ada.Text_IO;
use Ada.Text_IO;

package X_Instantiate1 is
   function Conv (Item : T1) return T2;
   V : Ada.Text_IO.Count;
end X_Instantiate1;

end Int_Pack3_Instantiation_Wrapper;

package Int_Pack3 renames Int_Pack3_Instantiation_Wrapper.X_Instantiate1;

   end Nesting1;
   

package Inst_Instantiation_Wrapper is
subtype T is Integer;
Init : constant T := 0;
function "+" (L, R : T) return T renames "*";
package Pack1 renames T_Instantiate1.Int_Pack1;
package Pack2 renames T_Instantiate1.Nesting1.Int_Pack3;

   procedure Gen_Proc (A, B : in out T);

end Inst_Instantiation_Wrapper;
package body Inst_Instantiation_Wrapper is
procedure Gen_Proc (A, B : in out T) is
      

package Inst_Func_Instantiation_Wrapper is

   function Gen_Func return Integer;

end Inst_Func_Instantiation_Wrapper;
package body Inst_Func_Instantiation_Wrapper is
function Gen_Func return Integer is
   begin
      return 3;
   end Gen_Func;

end Inst_Func_Instantiation_Wrapper;

function Inst_Func return Integer renames Inst_Func_Instantiation_Wrapper.Gen_Func;

      X : Integer := Inst_Func;
   begin
      A := A + B;
      B := Init;
   end Gen_Proc;

end Inst_Instantiation_Wrapper;


procedure Inst (A, B : in out Inst_Instantiation_Wrapper.T) renames Inst_Instantiation_Wrapper.Gen_Proc;

   V1, V2 : Integer;

   use X_Instantiate2;
   

package Child_Inst1_Instantiation_Wrapper is

package X_Instantiate2_Gen_Child1 is
   type Int is range 1 .. 10;
   V1 : Int;
   V2 : Child_Inst1_Instantiation_Wrapper.X_Instantiate2_Gen_Child1.Int;
   V3 : Child_Inst1_Instantiation_Wrapper.X_Instantiate2_Gen_Child1.Int;
end X_Instantiate2_Gen_Child1;

end Child_Inst1_Instantiation_Wrapper;

package Child_Inst1 renames Child_Inst1_Instantiation_Wrapper.X_Instantiate2_Gen_Child1;

   

package Child_Inst2_Instantiation_Wrapper is

package X_Instantiate2_Gen_Child1 is
   type Int is range 1 .. 10;
   V1 : Int;
   V2 : Child_Inst2_Instantiation_Wrapper.X_Instantiate2_Gen_Child1.Int;
   V3 : Child_Inst2_Instantiation_Wrapper.X_Instantiate2_Gen_Child1.Int;
end X_Instantiate2_Gen_Child1;

end Child_Inst2_Instantiation_Wrapper;

package Child_Inst2 renames Child_Inst2_Instantiation_Wrapper.X_Instantiate2_Gen_Child1;

   

package Child_Inst3_Instantiation_Wrapper is

package X_Instantiate2_Gen_Child2 is
   procedure Proc;
end X_Instantiate2_Gen_Child2;

end Child_Inst3_Instantiation_Wrapper;
package body Child_Inst3_Instantiation_Wrapper is
package body X_Instantiate2_Gen_Child2 is
   procedure Proc is
   begin
      null;
   end Proc;
end X_Instantiate2_Gen_Child2;

end Child_Inst3_Instantiation_Wrapper;


package Child_Inst3 renames Child_Inst3_Instantiation_Wrapper.X_Instantiate2_Gen_Child2;

   

package Child_Inst4_Instantiation_Wrapper is

package X_Instantiate2_Gen_Child2 is
   procedure Proc;
end X_Instantiate2_Gen_Child2;

end Child_Inst4_Instantiation_Wrapper;
package body Child_Inst4_Instantiation_Wrapper is
package body X_Instantiate2_Gen_Child2 is
   procedure Proc is
   begin
      null;
   end Proc;
end X_Instantiate2_Gen_Child2;

end Child_Inst4_Instantiation_Wrapper;


package Child_Inst4 renames Child_Inst4_Instantiation_Wrapper.X_Instantiate2_Gen_Child2;


   package body Nesting1 is
package body Int_Pack3_Instantiation_Wrapper is
package body X_Instantiate1 is
   function Internal_Conv is new Ada.Unchecked_Conversion (T1, T2);
   function Conv (Item : T1) return T2 is
   begin
      return Internal_Conv (Item);
   end Conv;
end X_Instantiate1;

end Int_Pack3_Instantiation_Wrapper;

                           
   end Nesting1;

   package Nesting2 is   -- no body
      

package Int_Pack4_Instantiation_Wrapper is
use Ada.Text_IO;
subtype T1 is Integer;
pragma Page;
subtype T2 is Integer;
use Ada.Text_IO;
use Ada.Text_IO;

package X_Instantiate1 is
   function Conv (Item : T1) return T2;
   V : Ada.Text_IO.Count;
end X_Instantiate1;

end Int_Pack4_Instantiation_Wrapper;

package Int_Pack4 renames Int_Pack4_Instantiation_Wrapper.X_Instantiate1;

   end Nesting2;

package body Nesting2 is
package body Int_Pack4_Instantiation_Wrapper is
package body X_Instantiate1 is
   function Internal_Conv is new Ada.Unchecked_Conversion (T1, T2);
   function Conv (Item : T1) return T2 is
   begin
      return Internal_Conv (Item);
   end Conv;
end X_Instantiate1;

end Int_Pack4_Instantiation_Wrapper;

end Nesting2;


begin
   V1 := 5;                             -- a comment in a kept part
   V2 := 10;

   Inst (V1, V2);
end T_Instantiate1;
with Ada.Text_IO;
package X_Instantiate2 is
   


   


   


   

   
   procedure Require_Body;
end X_Instantiate2;
with Ada.Numerics;
package body X_Instantiate2  is
   


   


   



   

   
   procedure Require_Body is null;

end X_Instantiate2;
------------------ t_instantiate2.adb ---------------
-- Check instantiation of generic child unit
with X_Instantiate2;
with X_Instantiate2;
procedure T_Instantiate2 is
   

package Child_Inst1_Instantiation_Wrapper is

package X_Instantiate2_Gen_Child1 is
   type Int is range 1 .. 10;
   V1 : Int;
   V2 : Child_Inst1_Instantiation_Wrapper.X_Instantiate2_Gen_Child1.Int;
   V3 : Child_Inst1_Instantiation_Wrapper.X_Instantiate2_Gen_Child1.Int;
end X_Instantiate2_Gen_Child1;

end Child_Inst1_Instantiation_Wrapper;

package Child_Inst1 renames Child_Inst1_Instantiation_Wrapper.X_Instantiate2_Gen_Child1;

   
   -- Instantiation in package without body
   package Nested is
      

package Child_Inst2_Instantiation_Wrapper is

package X_Instantiate2_Gen_Child1 is
   type Int is range 1 .. 10;
   V1 : Int;
   V2 : Child_Inst2_Instantiation_Wrapper.X_Instantiate2_Gen_Child1.Int;
   V3 : Child_Inst2_Instantiation_Wrapper.X_Instantiate2_Gen_Child1.Int;
end X_Instantiate2_Gen_Child1;

end Child_Inst2_Instantiation_Wrapper;

package Child_Inst2 renames Child_Inst2_Instantiation_Wrapper.X_Instantiate2_Gen_Child1;

      

package Child_Inst3_Instantiation_Wrapper is

package X_Instantiate2_Gen_Child2 is
   procedure Proc;
end X_Instantiate2_Gen_Child2;

end Child_Inst3_Instantiation_Wrapper;

package Child_Inst3 renames Child_Inst3_Instantiation_Wrapper.X_Instantiate2_Gen_Child2;

   end Nested;

package body Nested is
package body Child_Inst3_Instantiation_Wrapper is
package body X_Instantiate2_Gen_Child2 is
   procedure Proc is
   begin
      null;
   end Proc;
end X_Instantiate2_Gen_Child2;

end Child_Inst3_Instantiation_Wrapper;

end Nested;

begin
   null;
end T_Instantiate2;
with Ada.Text_IO;
package X_Instantiate2 is
   


   


   


   

   
   procedure Require_Body;
end X_Instantiate2;
with Ada.Numerics;
package body X_Instantiate2  is
   


   


   



   

   
   procedure Require_Body is null;

end X_Instantiate2;
------------------ t_instantiate3.adb ---------------
-- Check 2 levels instantiation from package spec
procedure T_instantiate3 is
   


   


   


   


   package Nest is
      

package Inst_Instantiation_Wrapper is

   package Gen2 is
      

package Gen2_Inst_Instantiation_Wrapper is

   package Gen1 is
   end Gen1;

end Gen2_Inst_Instantiation_Wrapper;
package Gen2_Inst renames Gen2_Inst_Instantiation_Wrapper.Gen1;

   end Gen2;

end Inst_Instantiation_Wrapper;

package Inst renames Inst_Instantiation_Wrapper.Gen2;

   end Nest;

   package body Nest is
package body Inst_Instantiation_Wrapper is
package body Gen2 is
package body Gen2_Inst_Instantiation_Wrapper is
package body Gen1 is
   end Gen1;

end Gen2_Inst_Instantiation_Wrapper;

   end Gen2;

end Inst_Instantiation_Wrapper;

                       
   end Nest;
begin
   null;
end;
------------------ t_instantiate4.adb ---------------

procedure T_Instantiate4 is
   

package Inst_Instantiation_Wrapper is
subtype T is Integer;

procedure X_Instantiate3;

end Inst_Instantiation_Wrapper;
package body Inst_Instantiation_Wrapper is
procedure X_Instantiate3 is
   

   


   V: T;
   

package Inner_Inst_Instantiation_Wrapper is
subtype U is Float;

   procedure Inner (P1 : T; P2 : U);

end Inner_Inst_Instantiation_Wrapper;
package body Inner_Inst_Instantiation_Wrapper is
procedure Inner (P1 : T; P2 : U) is
   begin
      null;
   end Inner;

end Inner_Inst_Instantiation_Wrapper;

procedure Inner_Inst (P1 : Inst_Instantiation_Wrapper.T; P2 : Inner_Inst_Instantiation_Wrapper.U) renames Inner_Inst_Instantiation_Wrapper.Inner;

begin
   null;
end;

end Inst_Instantiation_Wrapper;


procedure Inst renames Inst_Instantiation_Wrapper.X_Instantiate3;

begin
   null;
end T_Instantiate4;
------------------ t_instantiate_fail1.adb ---------------
procedure T_Instantiate_Fail1 is
   package Pack is
      

      Count1 : Natural := 0;
   end Pack;
   
   package body Pack is
      Count2 : Natural := 0;
      

   end Pack;
   
   

package Inst_Instantiation_Wrapper is

      procedure Gen1;

end Inst_Instantiation_Wrapper;
package body Inst_Instantiation_Wrapper is
procedure Gen1 is
      begin
         T_Instantiate_Fail1.Pack.Count1 := T_Instantiate_Fail1.Pack.Count1+1;
         T_Instantiate_Fail1.Pack.Count2 := T_Instantiate_Fail1.Pack.Count2+1;
      end Gen1;

end Inst_Instantiation_Wrapper;


procedure Inst renames Inst_Instantiation_Wrapper.Gen1;

begin
   Inst;
end;
------------------ t_instantiate_fix1.adb ---------------
procedure T_Instantiate_Fix1 is
   package Pack is
      

      procedure Inc;
      Count1 : Natural := 0;
   end Pack;
   
   package body Pack is
      Count2 : Natural := 0;
      

      procedure Inc is
      begin
         Count2 := Count2+1;
      end Inc;
   end Pack;
   
   

package Inst_Instantiation_Wrapper is

      procedure Gen1;

end Inst_Instantiation_Wrapper;
package body Inst_Instantiation_Wrapper is
procedure Gen1 is
      begin
         T_Instantiate_Fix1.Pack.Count1 := T_Instantiate_Fix1.Pack.Count1+1;
         T_Instantiate_Fix1.Pack.Inc;
      end Gen1;

end Inst_Instantiation_Wrapper;


procedure Inst renames Inst_Instantiation_Wrapper.Gen1;

begin
   Inst;
end;
------------------ t_instantiate_nesting.adb ---------------
procedure T_Instantiate_Nesting is
   

   


   

   


   


   -----------------------------------------------------------------------

   

package Outer_Inst1_Instantiation_Wrapper is

   package Outer_Gen1 is
      

package Nested_11_Instantiation_Wrapper is
Tag : constant String := "Nested 11";

   package Inner_Gen is
      V : constant String := Tag;
      procedure Force_Body;
   end Inner_Gen;

end Nested_11_Instantiation_Wrapper;
package Nested_11 renames Nested_11_Instantiation_Wrapper.Inner_Gen;

      

package Nested_12_Instantiation_Wrapper is
Tag : constant String := "Nested 12";

   package Inner_Gen is
      V : constant String := Tag;
      procedure Force_Body;
   end Inner_Gen;

end Nested_12_Instantiation_Wrapper;
package Nested_12 renames Nested_12_Instantiation_Wrapper.Inner_Gen;

   end Outer_Gen1;

end Outer_Inst1_Instantiation_Wrapper;
package body Outer_Inst1_Instantiation_Wrapper is
package body Outer_Gen1 is
package body Nested_11_Instantiation_Wrapper is
package body Inner_Gen is
      procedure Force_Body is begin null; end;
   end Inner_Gen;

end Nested_11_Instantiation_Wrapper;

package body Nested_12_Instantiation_Wrapper is
package body Inner_Gen is
      procedure Force_Body is begin null; end;
   end Inner_Gen;

end Nested_12_Instantiation_Wrapper;

   end Outer_Gen1;

end Outer_Inst1_Instantiation_Wrapper;


package Outer_Inst1 renames Outer_Inst1_Instantiation_Wrapper.Outer_Gen1;


   -----------------------------------------------------------------------

   

package Outer_Inst2_Instantiation_Wrapper is

   package Outer_Gen2 is
      

package Nested_21_Instantiation_Wrapper is
Tag : constant String := "Nested 21";

   package Inner_Gen is
      V : constant String := Tag;
      procedure Force_Body;
   end Inner_Gen;

end Nested_21_Instantiation_Wrapper;
package Nested_21 renames Nested_21_Instantiation_Wrapper.Inner_Gen;

      

package Nested_22_Instantiation_Wrapper is
Tag : constant String := "Nested 22";

   package Inner_Gen is
      V : constant String := Tag;
      procedure Force_Body;
   end Inner_Gen;

end Nested_22_Instantiation_Wrapper;
package Nested_22 renames Nested_22_Instantiation_Wrapper.Inner_Gen;

   end Outer_Gen2;

end Outer_Inst2_Instantiation_Wrapper;
package body Outer_Inst2_Instantiation_Wrapper is

package body Outer_Gen2 is
package body Nested_21_Instantiation_Wrapper is
package body Inner_Gen is
      procedure Force_Body is begin null; end;
   end Inner_Gen;

end Nested_21_Instantiation_Wrapper;

package body Nested_22_Instantiation_Wrapper is
package body Inner_Gen is
      procedure Force_Body is begin null; end;
   end Inner_Gen;

end Nested_22_Instantiation_Wrapper;

end Outer_Gen2;
end Outer_Inst2_Instantiation_Wrapper;

package Outer_Inst2 renames Outer_Inst2_Instantiation_Wrapper.Outer_Gen2;


   -----------------------------------------------------------------------


   package Outer_Outer1 is
      

package Outer_Inst2_Instantiation_Wrapper is

   package Outer_Gen1 is
      

package Nested_11_Instantiation_Wrapper is
Tag : constant String := "Nested 11";

   package Inner_Gen is
      V : constant String := Tag;
      procedure Force_Body;
   end Inner_Gen;

end Nested_11_Instantiation_Wrapper;
package Nested_11 renames Nested_11_Instantiation_Wrapper.Inner_Gen;

      

package Nested_12_Instantiation_Wrapper is
Tag : constant String := "Nested 12";

   package Inner_Gen is
      V : constant String := Tag;
      procedure Force_Body;
   end Inner_Gen;

end Nested_12_Instantiation_Wrapper;
package Nested_12 renames Nested_12_Instantiation_Wrapper.Inner_Gen;

   end Outer_Gen1;

end Outer_Inst2_Instantiation_Wrapper;

package Outer_Inst2 renames Outer_Inst2_Instantiation_Wrapper.Outer_Gen1;

      

package Outer_Inst3_Instantiation_Wrapper is

   package Outer_Gen1 is
      

package Nested_11_Instantiation_Wrapper is
Tag : constant String := "Nested 11";

   package Inner_Gen is
      V : constant String := Tag;
      procedure Force_Body;
   end Inner_Gen;

end Nested_11_Instantiation_Wrapper;
package Nested_11 renames Nested_11_Instantiation_Wrapper.Inner_Gen;

      

package Nested_12_Instantiation_Wrapper is
Tag : constant String := "Nested 12";

   package Inner_Gen is
      V : constant String := Tag;
      procedure Force_Body;
   end Inner_Gen;

end Nested_12_Instantiation_Wrapper;
package Nested_12 renames Nested_12_Instantiation_Wrapper.Inner_Gen;

   end Outer_Gen1;

end Outer_Inst3_Instantiation_Wrapper;

package Outer_Inst3 renames Outer_Inst3_Instantiation_Wrapper.Outer_Gen1;

   end Outer_Outer1;

package body Outer_Outer1 is
package body Outer_Inst2_Instantiation_Wrapper is
package body Outer_Gen1 is
package body Nested_11_Instantiation_Wrapper is
package body Inner_Gen is
      procedure Force_Body is begin null; end;
   end Inner_Gen;

end Nested_11_Instantiation_Wrapper;

package body Nested_12_Instantiation_Wrapper is
package body Inner_Gen is
      procedure Force_Body is begin null; end;
   end Inner_Gen;

end Nested_12_Instantiation_Wrapper;

   end Outer_Gen1;

end Outer_Inst2_Instantiation_Wrapper;

package body Outer_Inst3_Instantiation_Wrapper is
package body Outer_Gen1 is
package body Nested_11_Instantiation_Wrapper is
package body Inner_Gen is
      procedure Force_Body is begin null; end;
   end Inner_Gen;

end Nested_11_Instantiation_Wrapper;

package body Nested_12_Instantiation_Wrapper is
package body Inner_Gen is
      procedure Force_Body is begin null; end;
   end Inner_Gen;

end Nested_12_Instantiation_Wrapper;

   end Outer_Gen1;

end Outer_Inst3_Instantiation_Wrapper;

end Outer_Outer1;


   -----------------------------------------------------------------------

   package Outer_Outer2 is
      

package Outer_Inst21_Instantiation_Wrapper is

   package Outer_Gen1 is
      

package Nested_11_Instantiation_Wrapper is
Tag : constant String := "Nested 11";

   package Inner_Gen is
      V : constant String := Tag;
      procedure Force_Body;
   end Inner_Gen;

end Nested_11_Instantiation_Wrapper;
package Nested_11 renames Nested_11_Instantiation_Wrapper.Inner_Gen;

      

package Nested_12_Instantiation_Wrapper is
Tag : constant String := "Nested 12";

   package Inner_Gen is
      V : constant String := Tag;
      procedure Force_Body;
   end Inner_Gen;

end Nested_12_Instantiation_Wrapper;
package Nested_12 renames Nested_12_Instantiation_Wrapper.Inner_Gen;

   end Outer_Gen1;

end Outer_Inst21_Instantiation_Wrapper;

package Outer_Inst21 renames Outer_Inst21_Instantiation_Wrapper.Outer_Gen1;

      

package Outer_Inst22_Instantiation_Wrapper is

   package Outer_Gen2 is
      

package Nested_21_Instantiation_Wrapper is
Tag : constant String := "Nested 21";

   package Inner_Gen is
      V : constant String := Tag;
      procedure Force_Body;
   end Inner_Gen;

end Nested_21_Instantiation_Wrapper;
package Nested_21 renames Nested_21_Instantiation_Wrapper.Inner_Gen;

      

package Nested_22_Instantiation_Wrapper is
Tag : constant String := "Nested 22";

   package Inner_Gen is
      V : constant String := Tag;
      procedure Force_Body;
   end Inner_Gen;

end Nested_22_Instantiation_Wrapper;
package Nested_22 renames Nested_22_Instantiation_Wrapper.Inner_Gen;

   end Outer_Gen2;

end Outer_Inst22_Instantiation_Wrapper;

package Outer_Inst22 renames Outer_Inst22_Instantiation_Wrapper.Outer_Gen2;

   end Outer_Outer2;

   package body Outer_Outer2 is
package body Outer_Inst21_Instantiation_Wrapper is
package body Outer_Gen1 is
package body Nested_11_Instantiation_Wrapper is
package body Inner_Gen is
      procedure Force_Body is begin null; end;
   end Inner_Gen;

end Nested_11_Instantiation_Wrapper;

package body Nested_12_Instantiation_Wrapper is
package body Inner_Gen is
      procedure Force_Body is begin null; end;
   end Inner_Gen;

end Nested_12_Instantiation_Wrapper;

   end Outer_Gen1;

end Outer_Inst21_Instantiation_Wrapper;

package body Outer_Inst22_Instantiation_Wrapper is

package body Outer_Gen2 is
package body Nested_21_Instantiation_Wrapper is
package body Inner_Gen is
      procedure Force_Body is begin null; end;
   end Inner_Gen;

end Nested_21_Instantiation_Wrapper;

package body Nested_22_Instantiation_Wrapper is
package body Inner_Gen is
      procedure Force_Body is begin null; end;
   end Inner_Gen;

end Nested_22_Instantiation_Wrapper;

end Outer_Gen2;
end Outer_Inst22_Instantiation_Wrapper;
                               
   end Outer_Outer2;

   -----------------------------------------------------------------------

   package Nest1 is
      package Nest2 is
         package Nest3 is
            

package Nested_3_Instantiation_Wrapper is
Tag : constant String := "Nested 3";

   package Inner_Gen is
      V : constant String := Tag;
      procedure Force_Body;
   end Inner_Gen;

end Nested_3_Instantiation_Wrapper;

package Nested_3 renames Nested_3_Instantiation_Wrapper.Inner_Gen;

         end Nest3;
         package Nest4 is
            

package Nested_4_Instantiation_Wrapper is
Tag : constant String := "Nested 4";

   package Inner_Gen is
      V : constant String := Tag;
      procedure Force_Body;
   end Inner_Gen;

end Nested_4_Instantiation_Wrapper;

package Nested_4 renames Nested_4_Instantiation_Wrapper.Inner_Gen;

            

package Nested_5_Instantiation_Wrapper is
Tag : constant String := "Nested 5";

   package Inner_Gen is
      V : constant String := Tag;
      procedure Force_Body;
   end Inner_Gen;

end Nested_5_Instantiation_Wrapper;

package Nested_5 renames Nested_5_Instantiation_Wrapper.Inner_Gen;

         end Nest4;
         

package Nested_6_Instantiation_Wrapper is
Tag : constant String := "Nested 6";

   package Inner_Gen is
      V : constant String := Tag;
      procedure Force_Body;
   end Inner_Gen;

end Nested_6_Instantiation_Wrapper;

package Nested_6 renames Nested_6_Instantiation_Wrapper.Inner_Gen;

      end Nest2;
   end Nest1;

package body Nest1 is
package body Nest2 is
package body Nest3 is
package body Nested_3_Instantiation_Wrapper is
package body Inner_Gen is
      procedure Force_Body is begin null; end;
   end Inner_Gen;

end Nested_3_Instantiation_Wrapper;

end Nest3;
package body Nest4 is
package body Nested_4_Instantiation_Wrapper is
package body Inner_Gen is
      procedure Force_Body is begin null; end;
   end Inner_Gen;

end Nested_4_Instantiation_Wrapper;

package body Nested_5_Instantiation_Wrapper is
package body Inner_Gen is
      procedure Force_Body is begin null; end;
   end Inner_Gen;

end Nested_5_Instantiation_Wrapper;

end Nest4;
package body Nested_6_Instantiation_Wrapper is
package body Inner_Gen is
      procedure Force_Body is begin null; end;
   end Inner_Gen;

end Nested_6_Instantiation_Wrapper;

end Nest2;
end Nest1;


begin
   declare
      package Outer_Outer3 is
         

package Outer_Inst31_Instantiation_Wrapper is

   package Outer_Gen1 is
      

package Nested_11_Instantiation_Wrapper is
Tag : constant String := "Nested 11";

   package Inner_Gen is
      V : constant String := Tag;
      procedure Force_Body;
   end Inner_Gen;

end Nested_11_Instantiation_Wrapper;
package Nested_11 renames Nested_11_Instantiation_Wrapper.Inner_Gen;

      

package Nested_12_Instantiation_Wrapper is
Tag : constant String := "Nested 12";

   package Inner_Gen is
      V : constant String := Tag;
      procedure Force_Body;
   end Inner_Gen;

end Nested_12_Instantiation_Wrapper;
package Nested_12 renames Nested_12_Instantiation_Wrapper.Inner_Gen;

   end Outer_Gen1;

end Outer_Inst31_Instantiation_Wrapper;

package Outer_Inst31 renames Outer_Inst31_Instantiation_Wrapper.Outer_Gen1;

         

package Outer_Inst32_Instantiation_Wrapper is

   package Outer_Gen2 is
      

package Nested_21_Instantiation_Wrapper is
Tag : constant String := "Nested 21";

   package Inner_Gen is
      V : constant String := Tag;
      procedure Force_Body;
   end Inner_Gen;

end Nested_21_Instantiation_Wrapper;
package Nested_21 renames Nested_21_Instantiation_Wrapper.Inner_Gen;

      

package Nested_22_Instantiation_Wrapper is
Tag : constant String := "Nested 22";

   package Inner_Gen is
      V : constant String := Tag;
      procedure Force_Body;
   end Inner_Gen;

end Nested_22_Instantiation_Wrapper;
package Nested_22 renames Nested_22_Instantiation_Wrapper.Inner_Gen;

   end Outer_Gen2;

end Outer_Inst32_Instantiation_Wrapper;

package Outer_Inst32 renames Outer_Inst32_Instantiation_Wrapper.Outer_Gen2;

      end Outer_Outer3;

package body Outer_Outer3 is
package body Outer_Inst31_Instantiation_Wrapper is
package body Outer_Gen1 is
package body Nested_11_Instantiation_Wrapper is
package body Inner_Gen is
      procedure Force_Body is begin null; end;
   end Inner_Gen;

end Nested_11_Instantiation_Wrapper;

package body Nested_12_Instantiation_Wrapper is
package body Inner_Gen is
      procedure Force_Body is begin null; end;
   end Inner_Gen;

end Nested_12_Instantiation_Wrapper;

   end Outer_Gen1;

end Outer_Inst31_Instantiation_Wrapper;

package body Outer_Inst32_Instantiation_Wrapper is

package body Outer_Gen2 is
package body Nested_21_Instantiation_Wrapper is
package body Inner_Gen is
      procedure Force_Body is begin null; end;
   end Inner_Gen;

end Nested_21_Instantiation_Wrapper;

package body Nested_22_Instantiation_Wrapper is
package body Inner_Gen is
      procedure Force_Body is begin null; end;
   end Inner_Gen;

end Nested_22_Instantiation_Wrapper;

end Outer_Gen2;
end Outer_Inst32_Instantiation_Wrapper;
end Outer_Outer3;

   begin
      null;
   end;
end T_Instantiate_Nesting;
------------------ t_instantiate_lib.ads ---------------
