2003-12-26 Guilhem Lavaux <guilhem@kaffe.org>
[official-gcc.git] / gcc / testsuite / ada / acats / tests / c9 / c93005b.ada
blob1b621c0debd5acb0a6a67cd795126da9ae7a5f19
1 -- C93005B.ADA
3 -- Grant of Unlimited Rights
4 --
5 -- Under contracts F33600-87-D-0337, F33600-84-D-0280, MDA903-79-C-0687,
6 -- F08630-91-C-0015, and DCA100-97-D-0025, the U.S. Government obtained
7 -- unlimited rights in the software and documentation contained herein.
8 -- Unlimited rights are defined in DFAR 252.227-7013(a)(19). By making
9 -- this public release, the Government intends to confer upon all
10 -- recipients unlimited rights equal to those held by the Government.
11 -- These rights include rights to use, duplicate, release or disclose the
12 -- released technical data and computer software in whole or in part, in
13 -- any manner and for any purpose whatsoever, and to have or permit others
14 -- to do so.
16 -- DISCLAIMER
18 -- ALL MATERIALS OR INFORMATION HEREIN RELEASED, MADE AVAILABLE OR
19 -- DISCLOSED ARE AS IS. THE GOVERNMENT MAKES NO EXPRESS OR IMPLIED
20 -- WARRANTY AS TO ANY MATTER WHATSOEVER, INCLUDING THE CONDITIONS OF THE
21 -- SOFTWARE, DOCUMENTATION OR OTHER INFORMATION RELEASED, MADE AVAILABLE
22 -- OR DISCLOSED, OR THE OWNERSHIP, MERCHANTABILITY, OR FITNESS FOR A
23 -- PARTICULAR PURPOSE OF SAID MATERIAL.
24 --*
25 -- CHECK THAT WHEN AN EXCEPTION IS RAISED IN A DECLARATIVE PART, A TASK
26 -- DECLARED IN THE SAME DECLARATIVE PART BECOMES TERMINATED.
28 -- CHECK THAT A TASK WAITING ON ENTRIES OF SUCH A
29 -- TERMINATED-BEFORE-ACTIVATION TASK RECEIVES TASKING_ERROR.
31 -- THIS TEST CHECKS THE CASE IN WHICH SEVERAL TASKS ARE WAITING FOR
32 -- ACTIVATION WHEN THE EXCEPTION OCCURS.
34 -- R. WILLIAMS 8/7/86
35 -- PWN 11/30/94 REMOVED PRAGMA PRIORITY INSTANCES FOR ADA 9X.
37 WITH SYSTEM; USE SYSTEM;
38 WITH REPORT; USE REPORT;
40 PROCEDURE C93005B IS
43 BEGIN
44 TEST ( "C93005B", "CHECK THAT WHEN AN EXCEPTION IS RAISED IN A " &
45 "DECLARATIVE PART, A TASK DECLARED IN THE " &
46 "SAME DECLARATIVE PART BECOMES TERMINATED. " &
47 "IN THIS CASE, SEVERAL TASKS ARE WAITING FOR " &
48 "ACTIVATION WHEN THE EXCEPTION OCCURS" );
50 BEGIN
52 DECLARE
53 TASK TYPE TA IS -- CHECKS THAT TX TERMINATES.
54 END TA;
56 TYPE ATA IS ACCESS TA;
58 TASK TYPE TB IS -- CHECKS THAT TY TERMINATES.
59 END TB;
61 TYPE TBREC IS
62 RECORD
63 TTB: TB;
64 END RECORD;
66 TASK TX IS -- WILL NEVER BE ACTIVATED.
67 ENTRY E;
68 END TX;
70 TASK BODY TA IS
71 BEGIN
72 DECLARE -- THIS BLOCK TO CHECK THAT TAB
73 -- TERMINATES.
74 TASK TAB IS
75 END TAB;
77 TASK BODY TAB IS
78 BEGIN
79 TX.E;
80 FAILED ( "RENDEZVOUS COMPLETED " &
81 "WITHOUT ERROR - TAB" );
82 EXCEPTION
83 WHEN TASKING_ERROR =>
84 NULL;
85 WHEN OTHERS =>
86 FAILED ( "ABNORMAL EXCEPTION " &
87 "- TAB" );
88 END TAB;
89 BEGIN
90 NULL;
91 END;
93 TX.E; --TX IS NOW TERMINATED.
95 FAILED ( "RENDEZVOUS COMPLETED WITHOUT ERROR " &
96 "- TA" );
98 EXCEPTION
99 WHEN TASKING_ERROR =>
100 NULL;
101 WHEN OTHERS =>
102 FAILED ( "ABNORMAL EXCEPTION - TA" );
103 END TA;
105 PACKAGE RAISE_IT IS
106 TASK TY IS -- WILL NEVER BE ACTIVATED.
107 ENTRY E;
108 END TY;
109 END RAISE_IT;
111 TASK BODY TB IS
112 BEGIN
113 DECLARE -- THIS BLOCK TO CHECK THAT TBB
114 -- TERMINATES.
115 TASK TBB IS
116 END TBB;
118 TASK BODY TBB IS
119 BEGIN
120 RAISE_IT.TY.E;
121 FAILED ( "RENDEZVOUS COMPLETED " &
122 "WITHOUT ERROR - TBB" );
123 EXCEPTION
124 WHEN TASKING_ERROR =>
125 NULL;
126 WHEN OTHERS =>
127 FAILED ( "ABNORMAL EXCEPTION " &
128 "- TBB" );
129 END TBB;
130 BEGIN
131 NULL;
132 END;
134 RAISE_IT.TY.E; -- TY IS NOW TERMINATED.
136 FAILED ( "RENDEZVOUS COMPLETED WITHOUT ERROR " &
137 "- TB" );
139 EXCEPTION
140 WHEN TASKING_ERROR =>
141 NULL;
142 WHEN OTHERS =>
143 FAILED ( "ABNORMAL EXCEPTION - TB" );
144 END TB;
146 PACKAGE START_TC IS END START_TC;
148 TASK BODY TX IS
149 BEGIN
150 FAILED ( "TX ACTIVATED" );
151 -- IN CASE OF FAILURE.
152 LOOP
153 SELECT
154 ACCEPT E;
156 TERMINATE;
157 END SELECT;
158 END LOOP;
159 END TX;
161 PACKAGE START_TZ IS
162 TASK TZ IS -- WILL NEVER BE ACTIVATED.
163 ENTRY E;
164 END TZ;
165 END START_TZ;
167 PACKAGE BODY START_TC IS
168 TBREC1 : TBREC; -- CHECKS THAT TY TERMINATES.
170 TASK TC IS -- CHECKS THAT TZ TERMINATES.
171 END TC;
173 TASK BODY TC IS
174 BEGIN
175 DECLARE -- THIS BLOCK TO CHECK THAT TCB
176 -- TERMINATES.
178 TASK TCB IS
179 END TCB;
181 TASK BODY TCB IS
182 BEGIN
183 START_TZ.TZ.E;
184 FAILED ( "RENDEZVOUS COMPLETED " &
185 "WITHOUT " &
186 "ERROR - TCB" );
187 EXCEPTION
188 WHEN TASKING_ERROR =>
189 NULL;
190 WHEN OTHERS =>
191 FAILED ( "ABNORMAL " &
192 "EXCEPTION - TCB" );
193 END TCB;
194 BEGIN
195 NULL;
196 END;
198 START_TZ.TZ.E; -- TZ IS NOW TERMINATED.
200 FAILED ( "RENDEZVOUS COMPLETED WITHOUT " &
201 "ERROR - TC" );
203 EXCEPTION
204 WHEN TASKING_ERROR =>
205 NULL;
206 WHEN OTHERS =>
207 FAILED ( "ABNORMAL EXCEPTION - TC" );
208 END TC;
209 END START_TC; -- TBREC1 AND TC ACTIVATED HERE.
211 PACKAGE BODY RAISE_IT IS
212 NTA : ATA := NEW TA; -- NTA.ALL ACTIVATED HERE.
214 TASK BODY TY IS
215 BEGIN
216 FAILED ( "TY ACTIVATED" );
217 -- IN CASE OF FAILURE.
218 LOOP
219 SELECT
220 ACCEPT E;
222 TERMINATE;
223 END SELECT;
224 END LOOP;
225 END TY;
227 PACKAGE XCEPTION IS
228 I : POSITIVE := IDENT_INT (0); -- RAISE
229 -- CONSTRAINT_ERROR.
230 END XCEPTION;
232 USE XCEPTION;
234 BEGIN -- TY WOULD BE ACTIVATED HERE.
236 IF I /= IDENT_INT (2) OR I = IDENT_INT (1) + 1 THEN
237 FAILED ( "PACKAGE DIDN'T RAISE EXCEPTION" );
238 END IF;
239 END RAISE_IT;
241 PACKAGE BODY START_TZ IS
242 TASK BODY TZ IS
243 BEGIN
244 FAILED ( "TZ ACTIVATED" );
245 -- IN CASE OF FAILURE.
246 LOOP
247 SELECT
248 ACCEPT E;
250 TERMINATE;
251 END SELECT;
252 END LOOP;
253 END TZ;
254 END START_TZ; -- TZ WOULD BE ACTIVATED HERE.
256 BEGIN -- TX WOULD BE ACTIVATED HERE.
257 -- CAN'T LEAVE BLOCK UNTIL TA, TB, AND TC ARE TERM.
259 FAILED ( "EXCEPTION NOT RAISED" );
260 END;
262 EXCEPTION
263 WHEN CONSTRAINT_ERROR =>
264 NULL;
265 WHEN TASKING_ERROR =>
266 FAILED ( "TASKING_ERROR IN MAIN PROGRAM" );
267 WHEN OTHERS =>
268 FAILED ( "ABNORMAL EXCEPTION IN MAIN" );
269 END;
271 RESULT;
273 END C93005B;