with Foo; package body Bar is procedure E (T : in Foo.APointer) is begin null; end E; end Bar; with type Foo.APointer is access; package Bar is type N is abstract tagged null record; type NClassPointer is access all N'Class; type NNode; type NList is access NNode; type NNode is record Next : NList; Data : NClassPointer; end record; procedure E (T : in Foo.APointer); end Bar; with Bar; package Foo is type A is record B : Bar.NList; end record; type APointer is access A; end Foo;