-- { dg-do run }

procedure Access_Test is

   type T1 is tagged null record;

   procedure Proc_1 (P : access T1'Class)  is
      type Ref is access T1'Class;
      X : Ref := new T1'Class'(P.all);  -- Should always work (no exception)

   begin
      null;
   end;

   procedure Proc_2 is
      type T2 is new T1 with null record;
      X2 : aliased T2;

   begin
      Proc_1 (X2'access);

      declare
         type T3 is new T1 with null record;
         X3 :  aliased T3;

      begin
         Proc_1 (X3'access);
      end;
   end;

begin
   Proc_2;
end;