summaryrefslogtreecommitdiff
path: root/gcc/testsuite/ada/acats/tests/c9/c93005b.ada
blob: 1b621c0debd5acb0a6a67cd795126da9ae7a5f19 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
-- C93005B.ADA

--                             Grant of Unlimited Rights
--
--     Under contracts F33600-87-D-0337, F33600-84-D-0280, MDA903-79-C-0687,
--     F08630-91-C-0015, and DCA100-97-D-0025, the U.S. Government obtained 
--     unlimited rights in the software and documentation contained herein.
--     Unlimited rights are defined in DFAR 252.227-7013(a)(19).  By making 
--     this public release, the Government intends to confer upon all 
--     recipients unlimited rights  equal to those held by the Government.  
--     These rights include rights to use, duplicate, release or disclose the 
--     released technical data and computer software in whole or in part, in 
--     any manner and for any purpose whatsoever, and to have or permit others 
--     to do so.
--
--                                    DISCLAIMER
--
--     ALL MATERIALS OR INFORMATION HEREIN RELEASED, MADE AVAILABLE OR
--     DISCLOSED ARE AS IS.  THE GOVERNMENT MAKES NO EXPRESS OR IMPLIED 
--     WARRANTY AS TO ANY MATTER WHATSOEVER, INCLUDING THE CONDITIONS OF THE
--     SOFTWARE, DOCUMENTATION OR OTHER INFORMATION RELEASED, MADE AVAILABLE 
--     OR DISCLOSED, OR THE OWNERSHIP, MERCHANTABILITY, OR FITNESS FOR A
--     PARTICULAR PURPOSE OF SAID MATERIAL.
--*
-- CHECK THAT WHEN AN EXCEPTION IS RAISED IN A DECLARATIVE PART, A TASK
-- DECLARED IN THE SAME DECLARATIVE PART BECOMES TERMINATED.

-- CHECK THAT A TASK WAITING ON ENTRIES OF SUCH A
-- TERMINATED-BEFORE-ACTIVATION TASK RECEIVES TASKING_ERROR.

-- THIS TEST CHECKS THE CASE IN WHICH SEVERAL TASKS ARE WAITING FOR
-- ACTIVATION WHEN THE EXCEPTION OCCURS.

-- R. WILLIAMS 8/7/86
-- PWN 11/30/94 REMOVED PRAGMA PRIORITY INSTANCES FOR ADA 9X.

WITH SYSTEM; USE SYSTEM;
WITH REPORT; USE REPORT;

PROCEDURE C93005B IS


BEGIN
     TEST ( "C93005B", "CHECK THAT WHEN AN EXCEPTION IS RAISED IN A " &
                       "DECLARATIVE PART, A TASK DECLARED IN THE " &
                       "SAME DECLARATIVE PART BECOMES TERMINATED. " &
                       "IN THIS CASE, SEVERAL TASKS ARE WAITING FOR " &
                       "ACTIVATION WHEN THE EXCEPTION OCCURS" );
 
     BEGIN
 
          DECLARE
               TASK TYPE TA IS      -- CHECKS THAT TX TERMINATES.
               END TA;
  
               TYPE ATA IS ACCESS TA;
 
               TASK TYPE TB IS      -- CHECKS THAT TY TERMINATES.
               END TB;
                 
               TYPE TBREC IS
                    RECORD
                         TTB: TB;
                    END RECORD;
  
               TASK TX IS          -- WILL NEVER BE ACTIVATED.
                    ENTRY E;
               END TX;

               TASK BODY TA IS
               BEGIN
                    DECLARE  -- THIS BLOCK TO CHECK THAT TAB 
                             -- TERMINATES.
                         TASK TAB IS
                         END TAB;

                         TASK BODY TAB IS
                         BEGIN
                              TX.E;
                              FAILED ( "RENDEZVOUS COMPLETED " &
                                       "WITHOUT ERROR - TAB" );
                         EXCEPTION
                              WHEN TASKING_ERROR =>
                                   NULL;
                              WHEN OTHERS =>
                                   FAILED ( "ABNORMAL EXCEPTION " &
                                            "- TAB" );
                         END TAB;
                    BEGIN
                         NULL;
                    END;
  
                    TX.E;    --TX IS NOW TERMINATED.
 
                    FAILED ( "RENDEZVOUS COMPLETED WITHOUT ERROR " &
                             "- TA" );
  
               EXCEPTION
                    WHEN TASKING_ERROR =>
                         NULL;
                    WHEN OTHERS =>
                         FAILED ( "ABNORMAL EXCEPTION - TA" );
               END TA;
 
               PACKAGE RAISE_IT IS 
                    TASK TY IS             -- WILL NEVER BE ACTIVATED.
                         ENTRY E;
                    END TY;                                         
               END RAISE_IT;
 
               TASK BODY TB IS
               BEGIN
                    DECLARE  -- THIS BLOCK TO CHECK THAT TBB 
                             -- TERMINATES.
                         TASK TBB IS
                         END TBB;
 
                         TASK BODY TBB IS
                         BEGIN
                              RAISE_IT.TY.E;
                              FAILED ( "RENDEZVOUS COMPLETED " &
                                       "WITHOUT ERROR - TBB" );
                         EXCEPTION
                              WHEN TASKING_ERROR =>
                                   NULL;
                              WHEN OTHERS =>
                                   FAILED ( "ABNORMAL EXCEPTION " &
                                            "- TBB" );
                         END TBB;
                    BEGIN
                         NULL;
                    END;

                    RAISE_IT.TY.E;    -- TY IS NOW TERMINATED.

                    FAILED ( "RENDEZVOUS COMPLETED WITHOUT ERROR " &
                             "- TB" );

               EXCEPTION
                    WHEN TASKING_ERROR =>
                         NULL;
                    WHEN OTHERS =>
                         FAILED ( "ABNORMAL EXCEPTION - TB" );
               END TB;

               PACKAGE START_TC IS END START_TC;

               TASK BODY TX IS
               BEGIN
                    FAILED ( "TX ACTIVATED" );
                    -- IN CASE OF FAILURE.
                    LOOP
                         SELECT
                              ACCEPT E;
                         OR
                              TERMINATE;
                         END SELECT;
                    END LOOP;
               END TX;

               PACKAGE START_TZ IS
                    TASK TZ IS             -- WILL NEVER BE ACTIVATED.
                         ENTRY E;
                    END TZ;
               END START_TZ;

               PACKAGE BODY START_TC IS
                    TBREC1 : TBREC;     -- CHECKS THAT TY TERMINATES.

                    TASK TC IS -- CHECKS THAT TZ TERMINATES.
                    END TC;
                
                    TASK BODY TC IS
                    BEGIN
                         DECLARE  -- THIS BLOCK TO CHECK THAT TCB 
                                  -- TERMINATES.
 
                              TASK TCB IS
                              END TCB;
          
                              TASK BODY TCB IS
                              BEGIN
                                   START_TZ.TZ.E;
                                   FAILED ( "RENDEZVOUS COMPLETED " &
                                            "WITHOUT " &
                                            "ERROR - TCB" );
                              EXCEPTION
                                   WHEN TASKING_ERROR =>
                                        NULL;
                                   WHEN OTHERS =>
                                        FAILED ( "ABNORMAL " &
                                                 "EXCEPTION - TCB" );
                              END TCB;
                         BEGIN
                              NULL;
                         END;

                         START_TZ.TZ.E;    -- TZ IS NOW TERMINATED.
      
                         FAILED ( "RENDEZVOUS COMPLETED WITHOUT " &
                                  "ERROR - TC" );
      
                    EXCEPTION
                         WHEN TASKING_ERROR =>
                              NULL;
                         WHEN OTHERS =>
                              FAILED ( "ABNORMAL EXCEPTION - TC" );
                    END TC;
               END START_TC;     -- TBREC1 AND TC ACTIVATED HERE.
                     
               PACKAGE BODY RAISE_IT IS
                    NTA : ATA := NEW TA;  -- NTA.ALL ACTIVATED HERE.
 
                    TASK BODY TY IS
                    BEGIN
                         FAILED ( "TY ACTIVATED" );
                         -- IN CASE OF FAILURE.
                         LOOP
                              SELECT
                                   ACCEPT E;
                              OR
                                   TERMINATE;
                              END SELECT;
                         END LOOP;
                    END TY;
 
                    PACKAGE XCEPTION IS
                         I : POSITIVE := IDENT_INT (0); -- RAISE
                                                   -- CONSTRAINT_ERROR.
                    END XCEPTION;
                
                    USE XCEPTION;
 
               BEGIN   -- TY WOULD BE ACTIVATED HERE.

                    IF I /= IDENT_INT (2) OR I = IDENT_INT (1) + 1 THEN
                         FAILED ( "PACKAGE DIDN'T RAISE EXCEPTION" );
                    END IF;
               END RAISE_IT;
 
               PACKAGE BODY START_TZ IS
                    TASK BODY TZ IS
                    BEGIN
                         FAILED ( "TZ ACTIVATED" );
                         -- IN CASE OF FAILURE.
                         LOOP
                              SELECT
                                   ACCEPT E;
                              OR
                                   TERMINATE;
                              END SELECT;
                         END LOOP;
                    END TZ;
               END START_TZ;    -- TZ WOULD BE ACTIVATED HERE.
 
          BEGIN     -- TX WOULD BE ACTIVATED HERE.
                    -- CAN'T LEAVE BLOCK UNTIL TA, TB, AND TC ARE TERM.

               FAILED ( "EXCEPTION NOT RAISED" );
          END;
 
     EXCEPTION
          WHEN CONSTRAINT_ERROR =>
               NULL;
          WHEN TASKING_ERROR =>
               FAILED ( "TASKING_ERROR IN MAIN PROGRAM" );
          WHEN OTHERS =>
               FAILED ( "ABNORMAL EXCEPTION IN MAIN" );
     END;
 
     RESULT;
 
END C93005B;