generic
package Abstract_Private is

   type T1 is abstract tagged private;
   procedure P1 (X : T1) is abstract;

   type T2 is abstract tagged private;

private

   type T1 is abstract tagged null record;
   procedure P2 (X : T1) is abstract; -- { dg-error "must be visible" }

   type T2 is abstract new T1 with null record;
   procedure P1 (X : T2) is abstract;

end Abstract_Private;