1procedure T_Movable_Accept_Statements is
2
3   type Digit is range 0..9;
4
5   task type Simple_Task_Type is
6      entry Inner_Return_Entry;
7      entry Declare_Entry (P : in out Digit);
8      entry User_Defined_Dependent_Function_Entry;
9      entry User_Defined_Dependent_Procedure_Entry;
10   end Simple_Task_Type;
11   task body Simple_Task_Type is
12      B : Boolean;
13      D : Digit;
14      N : Natural;
15      I : Integer;
16
17      function Integer_Five return Integer is
18      begin
19         return 5;
20      end Integer_Five;
21
22      procedure Integer_Five (I : out Integer) is
23      begin
24         I := 5;
25      end Integer_Five;
26
27   begin
28      accept Inner_Return_Entry do
29         B := True;                                     -- should not trigger (reference follows in unmovable `if')
30         D := Digit'First;                              -- should trigger (no dependency)
31         if B then                                      -- should not trigger
32            return;                                     --    ('inner exclusive')
33         end if;
34         B := False;                                    -- should trigger (below 'inner exclusive')
35      end Inner_Return_Entry;
36
37      accept Declare_Entry (P : in out Digit) do
38         N := Natural'Last;                             -- should trigger (no dependency)
39         D := Digit'First;                              -- should not trigger (referenced follows in unmovable `declare')
40         B := False;                                    -- should not trigger (referenced follows in unmovable `declare')
41         declare                                        -- should not trigger (explicit reference)
42            procedure Assign (Left : out Digit;
43                              Right : in Digit)
44            is
45            begin
46               Left := Right;
47            end Assign;
48         begin
49            Assign (P, D);                              -- explicit reference is here
50            B := True;
51         end;
52         N := Natural'First;                            -- should trigger (below last parameter reference)
53      end Declare_Entry;
54
55      accept User_Defined_Dependent_Function_Entry do
56         D := Digit'Last;                               -- should trigger (no dependency)
57         I := Integer_Five;                             -- should not trigger (user-defined dependency)
58         N := Natural (I) + 1;                          -- should trigger (below user-defined dependency)
59      end User_Defined_Dependent_Function_Entry;
60
61      accept User_Defined_Dependent_Procedure_Entry do
62         D := Digit'Last;                               -- should trigger (no dependency)
63         Integer_Five (I);                              -- should not trigger (user-defined dependency)
64         N := Natural (I) + 1;                          -- should trigger (below user-defined dependency)
65      end User_Defined_Dependent_Procedure_Entry;
66   end Simple_Task_Type;
67
68   task Separate_Task is
69      entry Out_Parameter (X : out Boolean);
70   end Separate_Task;
71   task body Separate_Task is separate;
72
73   -- A_Procedure_Body_Stub (for renamings)
74   procedure Renaming is separate;
75
76begin
77   null;
78end T_Movable_Accept_Statements;
79