2003-12-26 Guilhem Lavaux <guilhem@kaffe.org>
[official-gcc.git] / gcc / testsuite / ada / acats / tests / c8 / c83025c.ada
blobb21d268983332b22c686ea31d88c3c090a11e052
1 -- C83025C.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 -- OBJECTIVE:
26 -- CHECK THAT A DECLARATION IN A DECLARATIVE REGION OF A GENERIC
27 -- SUBPROGRAM HIDES AN OUTER DECLARATION OF A HOMOGRAPH. ALSO CHECK
28 -- THAT THE OUTER DECLARATION IS DIRECTLY VISIBLE IN BOTH
29 -- DECLARATIVE REGIONS BEFORE THE DECLARATION OF THE INNER HOMOGRAPH
30 -- AND THE OUTER DECLARATION IS VISIBLE BY SELECTION AFTER THE INNER
31 -- HOMOGRAPH DECLARATION, IF THE GENERIC SUBPROGRAM BODY IS COMPILED
32 -- AS A SUBUNIT IN THE SAME COMPILATION.
34 -- HISTORY:
35 -- BCB 09/01/88 CREATED ORIGINAL TEST.
37 WITH REPORT; USE REPORT;
38 PRAGMA ELABORATE(REPORT);
39 PACKAGE C83025C_PACK IS
40 Y : INTEGER := IDENT_INT(5);
41 Z : INTEGER := Y;
43 GENERIC
44 TYPE T IS PRIVATE;
45 X : T;
46 FUNCTION GEN_FUN RETURN T;
48 A : INTEGER := IDENT_INT(2);
49 B : INTEGER := A;
51 OBJ : INTEGER := IDENT_INT(3);
53 FLO : FLOAT := 5.0;
55 TYPE ENUM IS (ONE, TWO, THREE, FOUR);
57 EOBJ : ENUM := ONE;
59 GENERIC
60 Y : FLOAT := 2.0;
61 PROCEDURE INNER (X : IN OUT INTEGER);
63 GENERIC
64 Y : BOOLEAN := TRUE;
65 PROCEDURE INNER2 (X : IN INTEGER := A;
66 A : IN OUT INTEGER);
68 GENERIC
69 Y : ENUM := ONE;
70 FUNCTION INNER3 (X : INTEGER; Z : ENUM := Y) RETURN INTEGER;
72 GENERIC
73 Y : ENUM;
74 FUNCTION INNER4 (X : INTEGER; Z : ENUM := Y) RETURN INTEGER;
76 GENERIC
77 Y : CHARACTER := 'A';
78 PROCEDURE INNER5 (X : IN OUT INTEGER; F : IN FLOAT;
79 Z : CHARACTER := Y);
80 END C83025C_PACK;
82 PACKAGE BODY C83025C_PACK IS
83 FUNCTION GEN_FUN RETURN T IS
84 BEGIN
85 RETURN X;
86 END GEN_FUN;
88 FUNCTION F IS NEW GEN_FUN (INTEGER, OBJ);
90 FUNCTION F IS NEW GEN_FUN (FLOAT, FLO);
92 PROCEDURE INNER (X : IN OUT INTEGER) IS SEPARATE;
94 PROCEDURE INNER2 (X : IN INTEGER := C83025C_PACK.A;
95 A : IN OUT INTEGER) IS SEPARATE;
97 FUNCTION INNER3 (X : INTEGER;
98 Z : ENUM := Y) RETURN INTEGER IS SEPARATE;
100 FUNCTION INNER4 (X : INTEGER;
101 Z : ENUM := Y) RETURN INTEGER IS SEPARATE;
103 PROCEDURE INNER5 (X : IN OUT INTEGER; F : IN FLOAT;
104 Z : CHARACTER := Y) IS SEPARATE;
105 END C83025C_PACK;
107 SEPARATE (C83025C_PACK)
108 PROCEDURE INNER (X : IN OUT INTEGER) IS
109 C : INTEGER := A;
110 A : INTEGER := IDENT_INT(3);
111 BEGIN
112 IF A /= IDENT_INT(3) THEN
113 FAILED ("INCORRECT VALUE FOR INNER HOMOGRAPH - 1");
114 END IF;
116 IF C83025C_PACK.A /= IDENT_INT(2) THEN
117 FAILED ("INCORRECT VALUE FOR OUTER HOMOGRAPH - 2");
118 END IF;
120 IF C83025C_PACK.B /= IDENT_INT(2) THEN
121 FAILED ("INCORRECT VALUE FOR OUTER VARIABLE - 3");
122 END IF;
124 IF C /= IDENT_INT(2) THEN
125 FAILED ("INCORRECT VALUE FOR INNER VARIABLE - 4");
126 END IF;
128 IF X /= IDENT_INT(2) THEN
129 FAILED ("INCORRECT VALUE PASSED IN - 5");
130 END IF;
132 IF Y /= 2.0 THEN
133 FAILED ("INCORRECT VALUE INNER HOMOGRAPH - 6");
134 END IF;
136 IF EQUAL(1,1) THEN
137 X := A;
138 ELSE
139 X := C83025C_PACK.A;
140 END IF;
141 END INNER;
143 SEPARATE (C83025C_PACK)
144 PROCEDURE INNER2 (X : IN INTEGER := C83025C_PACK.A;
145 A : IN OUT INTEGER) IS
146 C : INTEGER := A;
147 BEGIN
148 IF A /= IDENT_INT(3) THEN
149 FAILED ("INCORRECT VALUE FOR INNER HOMOGRAPH - 10");
150 END IF;
152 IF C83025C_PACK.A /= IDENT_INT(2) THEN
153 FAILED ("INCORRECT VALUE FOR OUTER HOMOGRAPH - 11");
154 END IF;
156 IF C83025C_PACK.B /= IDENT_INT(2) THEN
157 FAILED ("INCORRECT VALUE FOR OUTER VARIABLE - 12");
158 END IF;
160 IF C /= IDENT_INT(3) THEN
161 FAILED ("INCORRECT VALUE FOR INNER VARIABLE - 13");
162 END IF;
164 IF X /= IDENT_INT(2) THEN
165 FAILED ("INCORRECT VALUE PASSED IN - 14");
166 END IF;
168 IF Y /= TRUE THEN
169 FAILED ("INCORRECT VALUE FOR INNER HOMOGRAPH - 15");
170 END IF;
172 IF EQUAL(1,1) THEN
173 A := IDENT_INT(4);
174 ELSE
175 A := 1;
176 END IF;
177 END INNER2;
179 SEPARATE (C83025C_PACK)
180 FUNCTION INNER3 (X : INTEGER; Z : ENUM := Y) RETURN INTEGER IS
181 C : INTEGER := A;
182 A : INTEGER := IDENT_INT(3);
183 BEGIN
184 IF A /= IDENT_INT(3) THEN
185 FAILED ("INCORRECT VALUE FOR INNER HOMOGRAPH - 20");
186 END IF;
188 IF C83025C_PACK.A /= IDENT_INT(2) THEN
189 FAILED ("INCORRECT VALUE FOR OUTER HOMOGRAPH - 21");
190 END IF;
192 IF C83025C_PACK.B /= IDENT_INT(2) THEN
193 FAILED ("INCORRECT VALUE FOR OUTER VARIABLE - 22");
194 END IF;
196 IF C /= IDENT_INT(2) THEN
197 FAILED ("INCORRECT VALUE FOR INNER VARIABLE - 23");
198 END IF;
200 IF X /= IDENT_INT(2) THEN
201 FAILED ("INCORRECT VALUE PASSED IN - 24");
202 END IF;
204 IF Y /= ONE THEN
205 FAILED ("INCORRECT VALUE FOR INNER HOMOGRAPH - 25");
206 END IF;
208 IF Z /= ONE THEN
209 FAILED ("INCORRECT VALUE FOR INNER HOMOGRAPH - 26");
210 END IF;
212 IF EQUAL(1,1) THEN
213 RETURN A;
214 ELSE
215 RETURN X;
216 END IF;
217 END INNER3;
219 SEPARATE (C83025C_PACK)
220 FUNCTION INNER4 (X : INTEGER; Z : ENUM := Y) RETURN INTEGER IS
221 C : INTEGER := A;
222 A : INTEGER := IDENT_INT(3);
223 BEGIN
224 IF A /= IDENT_INT(3) THEN
225 FAILED ("INCORRECT VALUE FOR INNER HOMOGRAPH - 30");
226 END IF;
228 IF C83025C_PACK.A /= IDENT_INT(2) THEN
229 FAILED ("INCORRECT VALUE FOR OUTER HOMOGRAPH - 31");
230 END IF;
232 IF C83025C_PACK.B /= IDENT_INT(2) THEN
233 FAILED ("INCORRECT VALUE FOR OUTER VARIABLE - 32");
234 END IF;
236 IF C /= IDENT_INT(2) THEN
237 FAILED ("INCORRECT VALUE FOR INNER VARIABLE - 33");
238 END IF;
240 IF X /= IDENT_INT(2) THEN
241 FAILED ("INCORRECT VALUE PASSED IN - 34");
242 END IF;
244 IF Y /= ONE THEN
245 FAILED ("INCORRECT VALUE FOR INNER HOMOGRAPH - 35");
246 END IF;
248 IF Z /= ONE THEN
249 FAILED ("INCORRECT VALUE FOR INNER HOMOGRAPH - 36");
250 END IF;
252 IF EQUAL(1,1) THEN
253 RETURN A;
254 ELSE
255 RETURN X;
256 END IF;
257 END INNER4;
259 SEPARATE (C83025C_PACK)
260 PROCEDURE INNER5 (X : IN OUT INTEGER; F : IN FLOAT;
261 Z : CHARACTER := Y) IS
262 BEGIN
263 X := INTEGER(F);
265 IF Y /= 'A' THEN
266 FAILED ("INCORRECT VALUE FOR INNER HOMOGRAPH - 40");
267 END IF;
269 IF Z /= 'A' THEN
270 FAILED ("INCORRECT VALUE FOR INNER VARIABLE - 41");
271 END IF;
272 END INNER5;
274 WITH REPORT; USE REPORT;
275 WITH C83025C_PACK; USE C83025C_PACK;
276 PROCEDURE C83025C IS
278 PROCEDURE NEW_INNER IS NEW INNER;
280 PROCEDURE NEW_INNER2 IS NEW INNER2;
282 FUNCTION NEW_INNER3 IS NEW INNER3;
284 FUNCTION NEW_INNER4 IS NEW INNER4 (Y => EOBJ);
286 PROCEDURE NEW_INNER5 IS NEW INNER5;
288 BEGIN
289 TEST ("C83025C", "CHECK THAT A DECLARATION IN A DECLARATIVE " &
290 "REGION OF A GENERIC SUBPROGRAM HIDES AN OUTER " &
291 "DECLARATION OF A HOMOGRAPH");
293 A := IDENT_INT(2);
294 B := A;
296 NEW_INNER (A);
298 IF A /= IDENT_INT(3) THEN
299 FAILED ("INCORRECT VALUE PASSED OUT - 7");
300 END IF;
302 A := IDENT_INT(2);
304 NEW_INNER2 (A => OBJ);
306 IF OBJ /= IDENT_INT(4) THEN
307 FAILED ("INCORRECT VALUE PASSED OUT - 16");
308 END IF;
310 A := IDENT_INT(2);
312 B := A;
314 IF NEW_INNER3(A) /= IDENT_INT(3) THEN
315 FAILED ("INCORRECT VALUE PASSED OUT - 27");
316 END IF;
318 A := IDENT_INT(2);
320 B := A;
322 IF NEW_INNER4(A) /= IDENT_INT(3) THEN
323 FAILED ("INCORRECT VALUE PASSED OUT - 37");
324 END IF;
326 OBJ := 1;
328 FLO := 6.25;
330 NEW_INNER5 (OBJ, FLO);
332 IF OBJ /= IDENT_INT(6) THEN
333 FAILED ("INCORRECT VALUE RETURNED FROM FUNCTION - 42");
334 END IF;
336 IF Y /= 5 THEN
337 FAILED ("INCORRECT VALUE FOR OUTER HOMOGRAPH - 50");
338 END IF;
340 IF Z /= 5 THEN
341 FAILED ("INCORRECT VALUE FOR OUTER VARIABLE - 51");
342 END IF;
344 RESULT;
345 END C83025C;