2003-12-26 Guilhem Lavaux <guilhem@kaffe.org>
[official-gcc.git] / gcc / testsuite / ada / acats / tests / cc / cc3017c.ada
blobd4649716f8616afe4206937060d429e960b4c3b6
1 -- CC3017C.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 AN INSTANCE OF A GENERIC PROCEDURE MUST DECLARE A
27 -- PROCEDURE AND THAT AN INSTANCE OF A GENERIC FUNCTION MUST
28 -- DECLARE A FUNCTION. CHECK THAT SCALAR AND ACCESS PARAMETERS
29 -- ARE COPIED.
31 -- SUBTESTS ARE:
32 -- (A) SCALAR PARAMETERS TO PROCEDURES.
33 -- (B) SCALAR PARAMETERS TO FUNCTIONS.
34 -- (C) ACCESS PARAMETERS TO PROCEDURES.
35 -- (D) ACCESS PARAMETERS TO FUNCTIONS.
37 -- HISTORY:
38 -- EDWARD V. BERARD, 7 AUGUST 1990
39 -- CJJ 10/16/90 ADJUSTED LINES THAT WERE TOO LONG; REFORMATTED
40 -- HEADER TO CONFORM TO ACVC STANDARDS.
43 WITH REPORT;
44 PROCEDURE CC3017C IS
46 BEGIN
47 REPORT.TEST ("CC3017C", "CHECK THAT AN INSTANCE OF A GENERIC " &
48 "PROCEDURE MUST DECLARE A PROCEDURE AND THAT AN " &
49 "INSTANCE OF A GENERIC FUNCTION MUST DECLARE A " &
50 "FUNCTION. CHECK THAT SCALAR AND ACCESS PARAMETERS " &
51 "ARE COPIED");
53 --------------------------------------------------
55 SCALAR_TO_PROCS:
57 DECLARE
59 -- (A) SCALAR PARAMETERS TO PROCEDURES.
61 TYPE NUMBER IS RANGE 0 .. 120 ;
62 VALUE : NUMBER ;
63 E : EXCEPTION ;
65 GENERIC
67 TYPE SCALAR_ITEM IS RANGE <> ;
69 PROCEDURE P (P_IN : IN SCALAR_ITEM ;
70 P_OUT : OUT SCALAR_ITEM ;
71 P_IN_OUT : IN OUT SCALAR_ITEM) ;
73 PROCEDURE P (P_IN : IN SCALAR_ITEM ;
74 P_OUT : OUT SCALAR_ITEM ;
75 P_IN_OUT : IN OUT SCALAR_ITEM) IS
77 STORE : SCALAR_ITEM ;
79 BEGIN -- P
81 STORE := P_IN; -- SAVE VALUE OF P_IN AT PROC ENTRY.
83 P_OUT := 10;
84 IF (P_IN /= STORE) THEN
85 REPORT.FAILED ("ASSIGNMENT TO SCALAR OUT " &
86 "PARAMETER CHANGES THE VALUE OF " &
87 "INPUT PARAMETER");
88 STORE := P_IN; -- RESET STORE FOR NEXT CASE.
89 END IF;
91 P_IN_OUT := P_IN_OUT + 100;
92 IF (P_IN /= STORE) THEN
93 REPORT.FAILED ("ASSIGNMENT TO SCALAR IN OUT " &
94 "PARAMETER CHANGES THE VALUE OF " &
95 "INPUT PARAMETER");
96 STORE := P_IN; -- RESET STORE FOR NEXT CASE.
97 END IF;
99 VALUE := VALUE + 1;
100 IF (P_IN /= STORE) THEN
101 REPORT.FAILED ("ASSIGNMENT TO SCALAR GLOBAL " &
102 "PARAMETER CHANGES THE VALUE OF " &
103 "INPUT PARAMETER");
104 END IF;
106 RAISE E; -- CHECK EXCEPTION HANDLING.
107 END P;
109 PROCEDURE NEW_P IS NEW P (SCALAR_ITEM => NUMBER) ;
111 BEGIN -- SCALAR_TO_PROCS
112 VALUE := 0; -- INITIALIZE VALUE SO VARIOUS CASES CAN BE DETECTED.
114 NEW_P (P_IN => VALUE,
115 P_OUT => VALUE,
116 P_IN_OUT => VALUE);
118 REPORT.FAILED ("EXCEPTION NOT RAISED - SCALARS TO PROCEDURES");
119 EXCEPTION
120 WHEN E =>
121 IF (VALUE /= 1) THEN
122 CASE VALUE IS
123 WHEN 11 =>
124 REPORT.FAILED ("OUT ACTUAL SCALAR " &
125 "PARAMETER CHANGED GLOBAL VALUE");
126 WHEN 101 =>
127 REPORT.FAILED ("IN OUT ACTUAL SCALAR " &
128 "PARAMETER CHANGED GLOBAL VALUE");
129 WHEN 111 =>
130 REPORT.FAILED ("OUT AND IN OUT ACTUAL " &
131 "SCALAR PARAMETERS CHANGED " &
132 "GLOBAL VALUE");
133 WHEN OTHERS =>
134 REPORT.FAILED ("UNDETERMINED CHANGE TO " &
135 "GLOBAL VALUE");
136 END CASE;
137 END IF;
138 WHEN OTHERS =>
139 REPORT.FAILED ("WRONG EXCEPTION RAISED - SCALARS TO PROCEDURES");
140 END SCALAR_TO_PROCS ;
142 --------------------------------------------------
144 SCALAR_TO_FUNCS:
146 DECLARE
148 -- (B) SCALAR PARAMETERS TO FUNCTIONS.
150 TYPE NUMBER IS RANGE 0 .. 101 ;
151 FIRST : NUMBER ;
152 SECOND : NUMBER ;
154 GENERIC
156 TYPE ITEM IS RANGE <> ;
158 FUNCTION F (F_IN : IN ITEM) RETURN ITEM ;
160 FUNCTION F (F_IN : IN ITEM) RETURN ITEM IS
162 STORE : ITEM := F_IN;
164 BEGIN -- F
166 FIRST := FIRST + 1;
167 IF (F_IN /= STORE) THEN
168 REPORT.FAILED ("ASSIGNMENT TO SCALAR GLOBAL FUNCTION " &
169 "PARAMETER CHANGES THE VALUE OF " &
170 "INPUT PARAMETER");
171 END IF;
173 RETURN (100);
174 END F;
176 FUNCTION NEW_F IS NEW F (ITEM => NUMBER) ;
178 BEGIN -- SCALAR_TO_FUNCS
179 FIRST := 100 ;
180 SECOND := NEW_F (FIRST) ;
181 END SCALAR_TO_FUNCS ;
183 --------------------------------------------------
185 ACCESS_TO_PROCS:
187 DECLARE
189 -- (C) ACCESS PARAMETERS TO PROCEDURES.
191 TYPE MONTH_TYPE IS (JAN, FEB, MAR, APR, MAY, JUN, JUL, AUG,
192 SEP, OCT, NOV, DEC) ;
193 TYPE DAY_TYPE IS RANGE 1 .. 31 ;
194 TYPE YEAR_TYPE IS RANGE 1904 .. 2050 ;
195 TYPE DATE IS RECORD
196 MONTH : MONTH_TYPE ;
197 DAY : DAY_TYPE ;
198 YEAR : YEAR_TYPE ;
199 END RECORD ;
201 TYPE DATE_ACCESS IS ACCESS DATE ;
202 DATE_POINTER : DATE_ACCESS ;
204 E : EXCEPTION;
206 GENERIC
208 TYPE ITEM IS PRIVATE ;
209 TYPE ACCESS_ITEM IS ACCESS ITEM ;
211 PROCEDURE P (P_IN : IN ACCESS_ITEM ;
212 P_OUT : OUT ACCESS_ITEM ;
213 P_IN_OUT : IN OUT ACCESS_ITEM) ;
215 PROCEDURE P (P_IN : IN ACCESS_ITEM ;
216 P_OUT : OUT ACCESS_ITEM ;
217 P_IN_OUT : IN OUT ACCESS_ITEM) IS
219 STORE : ACCESS_ITEM ;
221 BEGIN -- P
223 STORE := P_IN ; -- SAVE VALUE OF P_IN AT PROC ENTRY.
225 DATE_POINTER := NEW DATE'(YEAR => 1990,
226 DAY => 7,
227 MONTH => AUG) ;
228 IF (P_IN /= STORE) THEN
229 REPORT.FAILED ("ASSIGNMENT TO ACCESS GLOBAL " &
230 "PARAMETER CHANGES THE VALUE OF " &
231 "INPUT PARAMETER");
232 STORE := P_IN; -- RESET STORE FOR NEXT CASE.
233 END IF;
235 P_OUT := NEW ITEM ;
236 IF (P_IN /= STORE) THEN
237 REPORT.FAILED ("ASSIGNMENT TO ACCESS OUT " &
238 "PARAMETER CHANGES THE VALUE OF " &
239 "INPUT PARAMETER");
240 STORE := P_IN; -- RESET STORE FOR NEXT CASE.
241 END IF;
243 P_IN_OUT := NEW ITEM ;
244 IF (P_IN /= STORE) THEN
245 REPORT.FAILED ("ASSIGNMENT TO ACCESS IN OUT " &
246 "PARAMETER CHANGES THE VALUE OF " &
247 "INPUT PARAMETER");
248 END IF;
250 RAISE E; -- CHECK EXCEPTION HANDLING.
251 END P ;
253 PROCEDURE NEW_P IS NEW P (ITEM => DATE,
254 ACCESS_ITEM => DATE_ACCESS) ;
256 BEGIN -- ACCESS_TO_PROCS
257 DATE_POINTER := NEW DATE'(MONTH => DEC,
258 DAY => 25,
259 YEAR => 2000) ;
261 NEW_P (P_IN => DATE_POINTER,
262 P_OUT => DATE_POINTER,
263 P_IN_OUT => DATE_POINTER) ;
265 REPORT.FAILED ("EXCEPTION NOT RAISED - ACCESS TO PROCEDURES");
266 EXCEPTION
267 WHEN E =>
268 IF (DATE_POINTER.ALL /= (AUG, 7, 1990)) THEN
269 REPORT.FAILED ("OUT OR IN OUT ACTUAL PROCEDURE " &
270 "PARAMETER VALUE CHANGED DESPITE " &
271 "RAISED EXCEPTION");
272 END IF;
273 WHEN OTHERS =>
274 REPORT.FAILED ("WRONG EXCEPTION RAISED - ACCESS TO PROCEDURES");
275 END ACCESS_TO_PROCS ;
277 --------------------------------------------------
279 ACCESS_TO_FUNCS:
281 DECLARE
283 -- (D) ACCESS PARAMETERS TO FUNCTIONS.
285 TYPE MONTH_TYPE IS (JAN, FEB, MAR, APR, MAY, JUN, JUL, AUG,
286 SEP, OCT, NOV, DEC) ;
287 TYPE DAY_TYPE IS RANGE 1 .. 31 ;
288 TYPE YEAR_TYPE IS RANGE 1904 .. 2050 ;
289 TYPE DATE IS RECORD
290 MONTH : MONTH_TYPE ;
291 DAY : DAY_TYPE ;
292 YEAR : YEAR_TYPE ;
293 END RECORD ;
295 TYPE DATE_ACCESS IS ACCESS DATE ;
296 DATE_POINTER : DATE_ACCESS ;
297 NEXT_DATE : DATE_ACCESS ;
299 GENERIC
301 TYPE ITEM IS PRIVATE ;
302 TYPE ACCESS_ITEM IS ACCESS ITEM ;
304 FUNCTION F (F_IN : IN ACCESS_ITEM) RETURN ACCESS_ITEM ;
306 FUNCTION F (F_IN : IN ACCESS_ITEM) RETURN ACCESS_ITEM IS
308 STORE : ACCESS_ITEM := F_IN ;
310 BEGIN -- F
312 DATE_POINTER := NEW DATE'(YEAR => 1990,
313 DAY => 7,
314 MONTH => AUG) ;
315 IF (F_IN /= STORE) THEN
316 REPORT.FAILED ("ASSIGNMENT TO ACCESS GLOBAL FUNCTION " &
317 "PARAMETER CHANGES THE VALUE OF " &
318 "INPUT PARAMETER");
319 END IF;
321 RETURN (NULL);
322 END F ;
324 FUNCTION NEW_F IS NEW F (ITEM => DATE,
325 ACCESS_ITEM => DATE_ACCESS) ;
327 BEGIN -- ACCESS_TO_FUNCS
328 DATE_POINTER := NULL ;
329 NEXT_DATE := NEW_F(F_IN => DATE_POINTER) ;
330 END ACCESS_TO_FUNCS ;
332 --------------------------------------------------
334 REPORT.RESULT;
336 END CC3017C;