2003-12-26 Guilhem Lavaux <guilhem@kaffe.org>
[official-gcc.git] / gcc / testsuite / ada / acats / tests / c4 / c46051a.ada
blob9468e8f76d4582c3dac0088f4aceae054258ab09
1 -- C46051A.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 ENUMERATION, RECORD, ACCESS, PRIVATE, AND TASK VALUES CAN
26 -- BE CONVERTED IF THE OPERAND AND TARGET TYPES ARE RELATED BY
27 -- DERIVATION.
29 -- R.WILLIAMS 9/8/86
31 WITH REPORT; USE REPORT;
32 PROCEDURE C46051A IS
34 BEGIN
35 TEST ( "C46051A", "CHECK THAT ENUMERATION, RECORD, ACCESS, " &
36 "PRIVATE, AND TASK VALUES CAN BE CONVERTED " &
37 "IF THE OPERAND AND TARGET TYPES ARE " &
38 "RELATED BY DERIVATION" );
40 DECLARE
41 TYPE ENUM IS (A, AB, ABC, ABCD);
42 E : ENUM := ABC;
44 TYPE ENUM1 IS NEW ENUM;
45 E1 : ENUM1 := ENUM1'VAL (IDENT_INT (2));
47 TYPE ENUM2 IS NEW ENUM;
48 E2 : ENUM2 := ABC;
50 TYPE NENUM1 IS NEW ENUM1;
51 NE : NENUM1 := NENUM1'VAL (IDENT_INT (2));
52 BEGIN
53 IF ENUM (E) /= E THEN
54 FAILED ( "INCORRECT CONVERSION OF 'ENUM (E)'" );
55 END IF;
57 IF ENUM (E1) /= E THEN
58 FAILED ( "INCORRECT CONVERSION OF 'ENUM (E1)'" );
59 END IF;
61 IF ENUM1 (E2) /= E1 THEN
62 FAILED ( "INCORRECT CONVERSION OF 'ENUM1 (E2)'" );
63 END IF;
65 IF ENUM2 (NE) /= E2 THEN
66 FAILED ( "INCORRECT CONVERSION OF 'ENUM2 (NE)'" );
67 END IF;
69 IF NENUM1 (E) /= NE THEN
70 FAILED ( "INCORRECT CONVERSION OF 'NENUM (E)'" );
71 END IF;
72 EXCEPTION
73 WHEN OTHERS =>
74 FAILED ( "EXCEPTION RAISED DURING CONVERSION OF " &
75 "ENUMERATION TYPES" );
76 END;
78 DECLARE
79 TYPE REC IS
80 RECORD
81 NULL;
82 END RECORD;
84 R : REC;
86 TYPE REC1 IS NEW REC;
87 R1 : REC1;
89 TYPE REC2 IS NEW REC;
90 R2 : REC2;
92 TYPE NREC1 IS NEW REC1;
93 NR : NREC1;
94 BEGIN
95 IF REC (R) /= R THEN
96 FAILED ( "INCORRECT CONVERSION OF 'REC (R)'" );
97 END IF;
99 IF REC (R1) /= R THEN
100 FAILED ( "INCORRECT CONVERSION OF 'REC (R1)'" );
101 END IF;
103 IF REC1 (R2) /= R1 THEN
104 FAILED ( "INCORRECT CONVERSION OF 'REC1 (R2)'" );
105 END IF;
107 IF REC2 (NR) /= R2 THEN
108 FAILED ( "INCORRECT CONVERSION OF 'REC2 (NR)'" );
109 END IF;
111 IF NREC1 (R) /= NR THEN
112 FAILED ( "INCORRECT CONVERSION OF 'NREC (R)'" );
113 END IF;
114 EXCEPTION
115 WHEN OTHERS =>
116 FAILED ( "EXCEPTION RAISED DURING CONVERSION OF " &
117 "RECORD TYPES" );
118 END;
120 DECLARE
121 TYPE REC (D : INTEGER) IS
122 RECORD
123 NULL;
124 END RECORD;
126 SUBTYPE CREC IS REC (3);
127 R : CREC;
129 TYPE CREC1 IS NEW REC (3);
130 R1 : CREC1;
132 TYPE CREC2 IS NEW REC (3);
133 R2 : CREC2;
135 TYPE NCREC1 IS NEW CREC1;
136 NR : NCREC1;
137 BEGIN
138 IF CREC (R) /= R THEN
139 FAILED ( "INCORRECT CONVERSION OF 'CREC (R)'" );
140 END IF;
142 IF CREC (R1) /= R THEN
143 FAILED ( "INCORRECT CONVERSION OF 'CREC (R1)'" );
144 END IF;
146 IF CREC1 (R2) /= R1 THEN
147 FAILED ( "INCORRECT CONVERSION OF 'CREC1 (R2)'" );
148 END IF;
150 IF CREC2 (NR) /= R2 THEN
151 FAILED ( "INCORRECT CONVERSION OF 'CREC2 (NR)'" );
152 END IF;
154 IF NCREC1 (R) /= NR THEN
155 FAILED ( "INCORRECT CONVERSION OF 'NCREC (R)'" );
156 END IF;
157 EXCEPTION
158 WHEN OTHERS =>
159 FAILED ( "EXCEPTION RAISED DURING CONVERSION OF " &
160 "RECORD TYPES WITH DISCRIMINANTS" );
161 END;
163 DECLARE
164 TYPE REC IS
165 RECORD
166 NULL;
167 END RECORD;
169 TYPE ACCREC IS ACCESS REC;
170 AR : ACCREC;
172 TYPE ACCREC1 IS NEW ACCREC;
173 AR1 : ACCREC1;
175 TYPE ACCREC2 IS NEW ACCREC;
176 AR2 : ACCREC2;
178 TYPE NACCREC1 IS NEW ACCREC1;
179 NAR : NACCREC1;
181 FUNCTION F (A : ACCREC) RETURN INTEGER IS
182 BEGIN
183 RETURN IDENT_INT (0);
184 END F;
186 FUNCTION F (A : ACCREC1) RETURN INTEGER IS
187 BEGIN
188 RETURN IDENT_INT (1);
189 END F;
191 FUNCTION F (A : ACCREC2) RETURN INTEGER IS
192 BEGIN
193 RETURN IDENT_INT (2);
194 END F;
196 FUNCTION F (A : NACCREC1) RETURN INTEGER IS
197 BEGIN
198 RETURN IDENT_INT (3);
199 END F;
201 BEGIN
202 IF F (ACCREC (AR)) /= 0 THEN
203 FAILED ( "INCORRECT CONVERSION OF 'ACCREC (AR)'" );
204 END IF;
206 IF F (ACCREC (AR1)) /= 0 THEN
207 FAILED ( "INCORRECT CONVERSION OF 'ACCREC (AR1)'" );
208 END IF;
210 IF F (ACCREC1 (AR2)) /= 1 THEN
211 FAILED ( "INCORRECT CONVERSION OF 'ACCREC1 (AR2)'" );
212 END IF;
214 IF F (ACCREC2 (NAR)) /= 2 THEN
215 FAILED ( "INCORRECT CONVERSION OF 'ACCREC2 (NAR)'" );
216 END IF;
218 IF F (NACCREC1 (AR)) /= 3 THEN
219 FAILED ( "INCORRECT CONVERSION OF 'NACCREC (AR)'" );
220 END IF;
221 EXCEPTION
222 WHEN OTHERS =>
223 FAILED ( "EXCEPTION RAISED DURING CONVERSION OF " &
224 "ACCESS TYPES" );
225 END;
227 DECLARE
228 TYPE REC (D : INTEGER) IS
229 RECORD
230 NULL;
231 END RECORD;
233 TYPE ACCR IS ACCESS REC;
235 SUBTYPE CACCR IS ACCR (3);
236 AR : CACCR;
238 TYPE CACCR1 IS NEW ACCR (3);
239 AR1 : CACCR1;
241 TYPE CACCR2 IS NEW ACCR (3);
242 AR2 : CACCR2;
244 TYPE NCACCR1 IS NEW CACCR1;
245 NAR : NCACCR1;
247 FUNCTION F (A : CACCR) RETURN INTEGER IS
248 BEGIN
249 RETURN IDENT_INT (0);
250 END F;
252 FUNCTION F (A : CACCR1) RETURN INTEGER IS
253 BEGIN
254 RETURN IDENT_INT (1);
255 END F;
257 FUNCTION F (A : CACCR2) RETURN INTEGER IS
258 BEGIN
259 RETURN IDENT_INT (2);
260 END F;
262 FUNCTION F (A : NCACCR1) RETURN INTEGER IS
263 BEGIN
264 RETURN IDENT_INT (3);
265 END F;
267 BEGIN
268 IF F (CACCR (AR)) /= 0 THEN
269 FAILED ( "INCORRECT CONVERSION OF 'CACCR (AR)'" );
270 END IF;
272 IF F (CACCR (AR1)) /= 0 THEN
273 FAILED ( "INCORRECT CONVERSION OF 'CACCR (AR1)'" );
274 END IF;
276 IF F (CACCR1 (AR2)) /= 1 THEN
277 FAILED ( "INCORRECT CONVERSION OF 'CACCR1 (AR2)'" );
278 END IF;
280 IF F (CACCR2 (NAR)) /= 2 THEN
281 FAILED ( "INCORRECT CONVERSION OF 'CACCR2 (NAR)'" );
282 END IF;
284 IF F (NCACCR1 (AR)) /= 3 THEN
285 FAILED ( "INCORRECT CONVERSION OF 'NCACCR (AR)'" );
286 END IF;
287 EXCEPTION
288 WHEN OTHERS =>
289 FAILED ( "EXCEPTION RAISED DURING CONVERSION OF " &
290 "CONSTRAINED ACCESS TYPES" );
291 END;
293 DECLARE
294 PACKAGE PKG1 IS
295 TYPE PRIV IS PRIVATE;
296 PRIVATE
297 TYPE PRIV IS
298 RECORD
299 NULL;
300 END RECORD;
301 END PKG1;
303 USE PKG1;
305 PACKAGE PKG2 IS
306 R : PRIV;
308 TYPE PRIV1 IS NEW PRIV;
309 R1 : PRIV1;
311 TYPE PRIV2 IS NEW PRIV;
312 R2 : PRIV2;
313 END PKG2;
315 USE PKG2;
317 PACKAGE PKG3 IS
318 TYPE NPRIV1 IS NEW PRIV1;
319 NR : NPRIV1;
320 END PKG3;
322 USE PKG3;
323 BEGIN
324 IF PRIV (R) /= R THEN
325 FAILED ( "INCORRECT CONVERSION OF 'PRIV (R)'" );
326 END IF;
328 IF PRIV (R1) /= R THEN
329 FAILED ( "INCORRECT CONVERSION OF 'PRIV (R1)'" );
330 END IF;
332 IF PRIV1 (R2) /= R1 THEN
333 FAILED ( "INCORRECT CONVERSION OF 'PRIV1 (R2)'" );
334 END IF;
336 IF PRIV2 (NR) /= R2 THEN
337 FAILED ( "INCORRECT CONVERSION OF 'PRIV2 (NR)'" );
338 END IF;
340 IF NPRIV1 (R) /= NR THEN
341 FAILED ( "INCORRECT CONVERSION OF 'NPRIV (R)'" );
342 END IF;
343 EXCEPTION
344 WHEN OTHERS =>
345 FAILED ( "EXCEPTION RAISED DURING CONVERSION OF " &
346 "PRIVATE TYPES" );
347 END;
349 DECLARE
350 TASK TYPE TK;
351 T : TK;
353 TYPE TK1 IS NEW TK;
354 T1 : TK1;
356 TYPE TK2 IS NEW TK;
357 T2 : TK2;
359 TYPE NTK1 IS NEW TK1;
360 NT : NTK1;
362 TASK BODY TK IS
363 BEGIN
364 NULL;
365 END;
367 FUNCTION F (T : TK) RETURN INTEGER IS
368 BEGIN
369 RETURN IDENT_INT (0);
370 END F;
372 FUNCTION F (T : TK1) RETURN INTEGER IS
373 BEGIN
374 RETURN IDENT_INT (1);
375 END F;
377 FUNCTION F (T : TK2) RETURN INTEGER IS
378 BEGIN
379 RETURN IDENT_INT (2);
380 END F;
382 FUNCTION F (T : NTK1) RETURN INTEGER IS
383 BEGIN
384 RETURN IDENT_INT (3);
385 END F;
387 BEGIN
388 IF F (TK (T)) /= 0 THEN
389 FAILED ( "INCORRECT CONVERSION OF 'TK (T))'" );
390 END IF;
392 IF F (TK (T1)) /= 0 THEN
393 FAILED ( "INCORRECT CONVERSION OF 'TK (T1))'" );
394 END IF;
396 IF F (TK1 (T2)) /= 1 THEN
397 FAILED ( "INCORRECT CONVERSION OF 'TK1 (T2))'" );
398 END IF;
400 IF F (TK2 (NT)) /= 2 THEN
401 FAILED ( "INCORRECT CONVERSION OF 'TK2 (NT))'" );
402 END IF;
404 IF F (NTK1 (T)) /= 3 THEN
405 FAILED ( "INCORRECT CONVERSION OF 'NTK (T))'" );
406 END IF;
407 EXCEPTION
408 WHEN OTHERS =>
409 FAILED ( "EXCEPTION RAISED DURING CONVERSION OF " &
410 "TASK TYPES" );
411 END;
413 RESULT;
414 END C46051A;