1--  { dg-do compile }
2
3procedure Generic_Call_CW is
4
5   generic
6      type Subscriber_Type is tagged private;
7      with procedure On_Changed (Subscriber : in out Subscriber_Type'Class);
8   package My_Generic is
9      type Subscriber_Ptr is access all Subscriber_Type'Class;
10      procedure Update;
11      Subscriber : Subscriber_Ptr := null;
12   end;
13
14   package body My_Generic is
15      procedure Update is
16      begin
17         if Subscriber /= null then
18            Subscriber.On_Changed;
19         end if;
20      end;
21   end;
22
23   package User is
24      type Integer_Subscriber is tagged null record;
25      procedure On_Changed_Int (I : in out Integer_Subscriber'Class) is null;
26
27      package P is new My_Generic
28        (Subscriber_Type => Integer_Subscriber,
29         On_Changed      => On_Changed_Int);
30   end;
31begin
32   null;
33end;
34