1-- { dg-do run }
2-- { dg-options "-gnatws" }
3
4procedure entry_queues is
5  F1_Poe : Integer := 18;
6  function F1 return Integer is
7  begin
8    F1_Poe := F1_Poe - 1;
9    return F1_Poe;
10  end F1;
11  generic
12    type T is limited private;
13    with function Is_Ok (X : T) return Boolean;
14  procedure Check;
15  procedure Check is
16  begin
17    declare
18      type Poe is new T;
19      X : Poe;
20      Y : Poe;
21    begin
22      null;
23    end;
24    declare
25      type Poe is new T;
26      type Arr is array (1 .. 2) of Poe;
27      X : Arr;
28      B : Boolean := Is_Ok (T (X (1)));
29    begin
30      null;
31    end;
32  end;
33  protected type Poe (D3 : Integer := F1) is
34    entry E (D3 .. F1);    -- F1 evaluated
35    function Is_Ok return Boolean;
36  end Poe;
37  protected body Poe is
38    Entry E (for I in D3 .. F1) when True is
39    begin
40      null;
41    end E;
42    function Is_Ok return Boolean is
43    begin
44      return False;
45    end Is_Ok;
46  end Poe;
47  function Is_Ok (C : Poe) return Boolean is
48  begin
49    return C.Is_Ok;
50  end Is_Ok;
51  procedure Chk is new Check (Poe, Is_Ok);
52begin
53   Chk;
54end;
55