annotate gcc/testsuite/ada/acats/tests/c3/c3a0014.a @ 111:04ced10e8804

gcc 7
author kono
date Fri, 27 Oct 2017 22:46:09 +0900
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
111
kono
parents:
diff changeset
1 -- C3A0014.A
kono
parents:
diff changeset
2 --
kono
parents:
diff changeset
3 -- Grant of Unlimited Rights
kono
parents:
diff changeset
4 --
kono
parents:
diff changeset
5 -- Under contracts F33600-87-D-0337, F33600-84-D-0280, MDA903-79-C-0687,
kono
parents:
diff changeset
6 -- F08630-91-C-0015, and DCA100-97-D-0025, the U.S. Government obtained
kono
parents:
diff changeset
7 -- unlimited rights in the software and documentation contained herein.
kono
parents:
diff changeset
8 -- Unlimited rights are defined in DFAR 252.227-7013(a)(19). By making
kono
parents:
diff changeset
9 -- this public release, the Government intends to confer upon all
kono
parents:
diff changeset
10 -- recipients unlimited rights equal to those held by the Government.
kono
parents:
diff changeset
11 -- These rights include rights to use, duplicate, release or disclose the
kono
parents:
diff changeset
12 -- released technical data and computer software in whole or in part, in
kono
parents:
diff changeset
13 -- any manner and for any purpose whatsoever, and to have or permit others
kono
parents:
diff changeset
14 -- to do so.
kono
parents:
diff changeset
15 --
kono
parents:
diff changeset
16 -- DISCLAIMER
kono
parents:
diff changeset
17 --
kono
parents:
diff changeset
18 -- ALL MATERIALS OR INFORMATION HEREIN RELEASED, MADE AVAILABLE OR
kono
parents:
diff changeset
19 -- DISCLOSED ARE AS IS. THE GOVERNMENT MAKES NO EXPRESS OR IMPLIED
kono
parents:
diff changeset
20 -- WARRANTY AS TO ANY MATTER WHATSOEVER, INCLUDING THE CONDITIONS OF THE
kono
parents:
diff changeset
21 -- SOFTWARE, DOCUMENTATION OR OTHER INFORMATION RELEASED, MADE AVAILABLE
kono
parents:
diff changeset
22 -- OR DISCLOSED, OR THE OWNERSHIP, MERCHANTABILITY, OR FITNESS FOR A
kono
parents:
diff changeset
23 -- PARTICULAR PURPOSE OF SAID MATERIAL.
kono
parents:
diff changeset
24 --*
kono
parents:
diff changeset
25 --
kono
parents:
diff changeset
26 -- OBJECTIVE:
kono
parents:
diff changeset
27 -- Check that if the view defined by an object declaration is aliased,
kono
parents:
diff changeset
28 -- and the type of the object has discriminants, then the object is
kono
parents:
diff changeset
29 -- constrained by its initial value even if its nominal subtype is
kono
parents:
diff changeset
30 -- unconstrained.
kono
parents:
diff changeset
31 --
kono
parents:
diff changeset
32 -- Check that the attribute A'Constrained returns True if A is a formal
kono
parents:
diff changeset
33 -- out or in out parameter, or dereference thereof, and A denotes an
kono
parents:
diff changeset
34 -- aliased view of an object.
kono
parents:
diff changeset
35 --
kono
parents:
diff changeset
36 -- TEST DESCRIPTION:
kono
parents:
diff changeset
37 -- These rules apply to objects of a record type with defaulted
kono
parents:
diff changeset
38 -- discriminants, which may be unconstrained variables. If such a
kono
parents:
diff changeset
39 -- variable is declared to be aliased, then it is constrained by its
kono
parents:
diff changeset
40 -- initial value, and the value of the discriminant cannot be changed
kono
parents:
diff changeset
41 -- for the life of the variable.
kono
parents:
diff changeset
42 --
kono
parents:
diff changeset
43 -- The rules do not apply to aliased component types because if such
kono
parents:
diff changeset
44 -- types are discriminated they must be constrained.
kono
parents:
diff changeset
45 --
kono
parents:
diff changeset
46 -- A'Constrained returns True if A denotes a constant, value, or
kono
parents:
diff changeset
47 -- constrained variable. Since aliased objects are constrained, it must
kono
parents:
diff changeset
48 -- return True if the actual parameter corresponding to a formal
kono
parents:
diff changeset
49 -- parameter A is an aliased object. The objective only mentions formal
kono
parents:
diff changeset
50 -- parameters of mode out and in out, since parameters of mode in are
kono
parents:
diff changeset
51 -- by definition constant, and would result in True anyway.
kono
parents:
diff changeset
52 --
kono
parents:
diff changeset
53 -- This test declares aliased objects of a nominally unconstrained
kono
parents:
diff changeset
54 -- record subtype, both with and without initialization expressions.
kono
parents:
diff changeset
55 -- It also declares access values which point to such objects. It then
kono
parents:
diff changeset
56 -- checks that Constraint_Error is raised if an attempt is made to
kono
parents:
diff changeset
57 -- change the discriminant value of an aliased object, either directly
kono
parents:
diff changeset
58 -- or via a dereference of an access value. For aliased objects, this
kono
parents:
diff changeset
59 -- check is also performed for subprogram parameters of mode out.
kono
parents:
diff changeset
60 --
kono
parents:
diff changeset
61 -- The test also passes aliased objects and access values which point
kono
parents:
diff changeset
62 -- to such objects as actuals to subprograms and verifies, for parameter
kono
parents:
diff changeset
63 -- modes out and in out, that P'Constrained returns true if P is the
kono
parents:
diff changeset
64 -- corresponding formal parameter or a dereference thereof.
kono
parents:
diff changeset
65 --
kono
parents:
diff changeset
66 -- Additionally, the test declares a generic package which declares a
kono
parents:
diff changeset
67 -- an aliased object of a formal derived unconstrained type, which is
kono
parents:
diff changeset
68 -- is initialized with the value of a formal object of that type.
kono
parents:
diff changeset
69 -- procedure declared within the generic assigns a value to the object
kono
parents:
diff changeset
70 -- which has the same discriminant value as the formal derived type's
kono
parents:
diff changeset
71 -- ancestor type. The generic is instantiated with various actuals
kono
parents:
diff changeset
72 -- for the formal object, and the procedure is called. The test verifies
kono
parents:
diff changeset
73 -- that Constraint_Error is raised if the discriminant values of the
kono
parents:
diff changeset
74 -- actual corresponding to the formal object and the value assigned
kono
parents:
diff changeset
75 -- by the procedure are not equal.
kono
parents:
diff changeset
76 --
kono
parents:
diff changeset
77 --
kono
parents:
diff changeset
78 -- CHANGE HISTORY:
kono
parents:
diff changeset
79 -- 06 Dec 94 SAIC ACVC 2.0
kono
parents:
diff changeset
80 -- 16 Nov 95 SAIC ACVC 2.0.1 fixes: Corrected numerous errors.
kono
parents:
diff changeset
81 --
kono
parents:
diff changeset
82 --!
kono
parents:
diff changeset
83
kono
parents:
diff changeset
84 package C3A0014_0 is
kono
parents:
diff changeset
85
kono
parents:
diff changeset
86 subtype Reasonable is Integer range 1..10;
kono
parents:
diff changeset
87 -- Unconstrained (sub)type.
kono
parents:
diff changeset
88 type UC (D: Reasonable := 2) is record -- Discriminant default.
kono
parents:
diff changeset
89 S: String (1 .. D) := "Hi"; -- Default value.
kono
parents:
diff changeset
90 end record;
kono
parents:
diff changeset
91
kono
parents:
diff changeset
92 type AUC is access all UC;
kono
parents:
diff changeset
93
kono
parents:
diff changeset
94 -- Nominal subtype is unconstrained for the following:
kono
parents:
diff changeset
95
kono
parents:
diff changeset
96 Obj0 : UC; -- An unconstrained object.
kono
parents:
diff changeset
97
kono
parents:
diff changeset
98 Obj1 : UC := (5, "Hello"); -- Non-aliased with initialization,
kono
parents:
diff changeset
99 -- an unconstrained object.
kono
parents:
diff changeset
100
kono
parents:
diff changeset
101 Obj2 : aliased UC := (5, "Hello"); -- Aliased with initialization,
kono
parents:
diff changeset
102 -- a constrained object.
kono
parents:
diff changeset
103
kono
parents:
diff changeset
104 Obj3 : UC renames Obj2; -- Aliased (renaming of aliased view),
kono
parents:
diff changeset
105 -- a constrained object.
kono
parents:
diff changeset
106 Obj4 : aliased UC; -- Aliased without initialization, Obj4
kono
parents:
diff changeset
107 -- constrained here to initial value
kono
parents:
diff changeset
108 -- taken from default for type.
kono
parents:
diff changeset
109
kono
parents:
diff changeset
110 Ptr1 : AUC := new UC'(Obj1);
kono
parents:
diff changeset
111 Ptr2 : AUC := new UC;
kono
parents:
diff changeset
112 Ptr3 : AUC := Obj3'Access;
kono
parents:
diff changeset
113 Ptr4 : AUC := Obj4'Access;
kono
parents:
diff changeset
114
kono
parents:
diff changeset
115
kono
parents:
diff changeset
116 procedure NP_Proc (A: out UC);
kono
parents:
diff changeset
117 procedure NP_Cons (A: in out UC; B: out Boolean);
kono
parents:
diff changeset
118 procedure P_Cons (A: out AUC; B: out Boolean);
kono
parents:
diff changeset
119
kono
parents:
diff changeset
120
kono
parents:
diff changeset
121 generic
kono
parents:
diff changeset
122 type FT is new UC;
kono
parents:
diff changeset
123 FObj : in out FT;
kono
parents:
diff changeset
124 package Gen is
kono
parents:
diff changeset
125 F : aliased FT := FObj; -- Constrained if FT has discriminants.
kono
parents:
diff changeset
126 procedure Proc;
kono
parents:
diff changeset
127 end Gen;
kono
parents:
diff changeset
128
kono
parents:
diff changeset
129
kono
parents:
diff changeset
130 procedure Avoid_Optimization_and_Fail ( P : UC; Msg : String );
kono
parents:
diff changeset
131
kono
parents:
diff changeset
132
kono
parents:
diff changeset
133 end C3A0014_0;
kono
parents:
diff changeset
134
kono
parents:
diff changeset
135
kono
parents:
diff changeset
136 --=======================================================================--
kono
parents:
diff changeset
137
kono
parents:
diff changeset
138 with Report;
kono
parents:
diff changeset
139
kono
parents:
diff changeset
140 package body C3A0014_0 is
kono
parents:
diff changeset
141
kono
parents:
diff changeset
142 procedure NP_Proc (A: out UC) is
kono
parents:
diff changeset
143 begin
kono
parents:
diff changeset
144 A := (3, "Bye");
kono
parents:
diff changeset
145 end NP_Proc;
kono
parents:
diff changeset
146
kono
parents:
diff changeset
147 procedure NP_Cons (A: in out UC; B: out Boolean) is
kono
parents:
diff changeset
148 begin
kono
parents:
diff changeset
149 B := A'Constrained;
kono
parents:
diff changeset
150 end NP_Cons;
kono
parents:
diff changeset
151
kono
parents:
diff changeset
152 procedure P_Cons (A: out AUC; B: out Boolean) is
kono
parents:
diff changeset
153 begin
kono
parents:
diff changeset
154 B := A.all'Constrained;
kono
parents:
diff changeset
155 end P_Cons;
kono
parents:
diff changeset
156
kono
parents:
diff changeset
157
kono
parents:
diff changeset
158 package body Gen is
kono
parents:
diff changeset
159
kono
parents:
diff changeset
160 procedure Proc is
kono
parents:
diff changeset
161 begin
kono
parents:
diff changeset
162 F := (2, "Fi");
kono
parents:
diff changeset
163 end Proc;
kono
parents:
diff changeset
164
kono
parents:
diff changeset
165 end Gen;
kono
parents:
diff changeset
166
kono
parents:
diff changeset
167
kono
parents:
diff changeset
168 procedure Avoid_Optimization_and_Fail ( P : UC; Msg : String ) is
kono
parents:
diff changeset
169 Default : UC := (1, "!"); -- Unique value.
kono
parents:
diff changeset
170 begin
kono
parents:
diff changeset
171 if P = Default then -- Both If branches can't do the same thing.
kono
parents:
diff changeset
172 Report.Failed (Msg & ": Constraint_Error not raised");
kono
parents:
diff changeset
173 else -- Subtests should always select this path.
kono
parents:
diff changeset
174 Report.Failed ("Constraint_Error not raised " & Msg);
kono
parents:
diff changeset
175 end if;
kono
parents:
diff changeset
176 end Avoid_Optimization_and_Fail;
kono
parents:
diff changeset
177
kono
parents:
diff changeset
178
kono
parents:
diff changeset
179 end C3A0014_0;
kono
parents:
diff changeset
180
kono
parents:
diff changeset
181
kono
parents:
diff changeset
182 --=======================================================================--
kono
parents:
diff changeset
183
kono
parents:
diff changeset
184
kono
parents:
diff changeset
185 with C3A0014_0; use C3A0014_0;
kono
parents:
diff changeset
186 with Report;
kono
parents:
diff changeset
187
kono
parents:
diff changeset
188 procedure C3A0014 is
kono
parents:
diff changeset
189 begin
kono
parents:
diff changeset
190
kono
parents:
diff changeset
191 Report.Test("C3A0014", "Check that if the view defined by an object " &
kono
parents:
diff changeset
192 "declaration is aliased, and the type of the " &
kono
parents:
diff changeset
193 "object has discriminants, then the object is " &
kono
parents:
diff changeset
194 "constrained by its initial value even if its " &
kono
parents:
diff changeset
195 "nominal subtype is unconstrained. Check that " &
kono
parents:
diff changeset
196 "the attribute A'Constrained returns True if A " &
kono
parents:
diff changeset
197 "is a formal out or in out parameter, or " &
kono
parents:
diff changeset
198 "dereference thereof, and A denotes an aliased " &
kono
parents:
diff changeset
199 "view of an object");
kono
parents:
diff changeset
200
kono
parents:
diff changeset
201 Non_Pointer_Block:
kono
parents:
diff changeset
202 begin
kono
parents:
diff changeset
203
kono
parents:
diff changeset
204 begin
kono
parents:
diff changeset
205 Obj0 := (3, "Bye"); -- OK: Obj0 not constrained.
kono
parents:
diff changeset
206 if Obj0 /= (3, "Bye") then
kono
parents:
diff changeset
207 Report.Failed
kono
parents:
diff changeset
208 ("Wrong value after aggregate assignment - Subtest 1");
kono
parents:
diff changeset
209 end if;
kono
parents:
diff changeset
210 exception
kono
parents:
diff changeset
211 when others =>
kono
parents:
diff changeset
212 Report.Failed ("Unexpected exception raised - Subtest 1");
kono
parents:
diff changeset
213 end;
kono
parents:
diff changeset
214
kono
parents:
diff changeset
215
kono
parents:
diff changeset
216 begin
kono
parents:
diff changeset
217 Obj1 := (3, "Bye"); -- OK: Obj1 not constrained.
kono
parents:
diff changeset
218 if Obj1 /= (3, "Bye") then
kono
parents:
diff changeset
219 Report.Failed
kono
parents:
diff changeset
220 ("Wrong value after aggregate assignment - Subtest 2");
kono
parents:
diff changeset
221 end if;
kono
parents:
diff changeset
222 exception
kono
parents:
diff changeset
223 when others =>
kono
parents:
diff changeset
224 Report.Failed ("Unexpected exception raised - Subtest 2");
kono
parents:
diff changeset
225 end;
kono
parents:
diff changeset
226
kono
parents:
diff changeset
227
kono
parents:
diff changeset
228 begin
kono
parents:
diff changeset
229 Obj2 := (3, "Bye"); -- C_E: Obj2 is constrained (D=>5).
kono
parents:
diff changeset
230 Avoid_Optimization_and_Fail (Obj2, "Subtest 3");
kono
parents:
diff changeset
231 exception
kono
parents:
diff changeset
232 when Constraint_Error => null; -- Exception is expected.
kono
parents:
diff changeset
233 end;
kono
parents:
diff changeset
234
kono
parents:
diff changeset
235
kono
parents:
diff changeset
236 begin
kono
parents:
diff changeset
237 Obj3 := (3, "Bye"); -- C_E: Obj3 is constrained (D=>5).
kono
parents:
diff changeset
238 Avoid_Optimization_and_Fail (Obj3, "Subtest 4");
kono
parents:
diff changeset
239 exception
kono
parents:
diff changeset
240 when Constraint_Error => null; -- Exception is expected.
kono
parents:
diff changeset
241 end;
kono
parents:
diff changeset
242
kono
parents:
diff changeset
243
kono
parents:
diff changeset
244 begin
kono
parents:
diff changeset
245 Obj4 := (3, "Bye"); -- C_E: Obj4 is constrained (D=>2).
kono
parents:
diff changeset
246 Avoid_Optimization_and_Fail (Obj4, "Subtest 5");
kono
parents:
diff changeset
247 exception
kono
parents:
diff changeset
248 when Constraint_Error => null; -- Exception is expected.
kono
parents:
diff changeset
249 end;
kono
parents:
diff changeset
250
kono
parents:
diff changeset
251 exception
kono
parents:
diff changeset
252 when others => Report.Failed("Unexpected exception: Non_Pointer_Block");
kono
parents:
diff changeset
253 end Non_Pointer_Block;
kono
parents:
diff changeset
254
kono
parents:
diff changeset
255
kono
parents:
diff changeset
256 Pointer_Block:
kono
parents:
diff changeset
257 begin
kono
parents:
diff changeset
258
kono
parents:
diff changeset
259 begin
kono
parents:
diff changeset
260 Ptr1.all := (3, "Bye"); -- C_E: Ptr1.all is constrained (D=>5).
kono
parents:
diff changeset
261 Avoid_Optimization_and_Fail (Ptr1.all, "Subtest 6");
kono
parents:
diff changeset
262 exception
kono
parents:
diff changeset
263 when Constraint_Error => null; -- Exception is expected.
kono
parents:
diff changeset
264 end;
kono
parents:
diff changeset
265
kono
parents:
diff changeset
266
kono
parents:
diff changeset
267 begin
kono
parents:
diff changeset
268 Ptr2.all := (3, "Bye"); -- C_E: Ptr2.all is constrained (D=>2).
kono
parents:
diff changeset
269 Avoid_Optimization_and_Fail (Ptr2.all, "Subtest 7");
kono
parents:
diff changeset
270 exception
kono
parents:
diff changeset
271 when Constraint_Error => null; -- Exception is expected.
kono
parents:
diff changeset
272 end;
kono
parents:
diff changeset
273
kono
parents:
diff changeset
274
kono
parents:
diff changeset
275 begin
kono
parents:
diff changeset
276 Ptr3.all := (3, "Bye"); -- C_E: Ptr3.all is constrained (D=>5).
kono
parents:
diff changeset
277 Avoid_Optimization_and_Fail (Ptr3.all, "Subtest 8");
kono
parents:
diff changeset
278 exception
kono
parents:
diff changeset
279 when Constraint_Error => null; -- Exception is expected.
kono
parents:
diff changeset
280 end;
kono
parents:
diff changeset
281
kono
parents:
diff changeset
282
kono
parents:
diff changeset
283 begin
kono
parents:
diff changeset
284 Ptr4.all := (3, "Bye"); -- C_E: Ptr4.all is constrained (D=>2).
kono
parents:
diff changeset
285 Avoid_Optimization_and_Fail (Ptr4.all, "Subtest 9");
kono
parents:
diff changeset
286 exception
kono
parents:
diff changeset
287 when Constraint_Error => null; -- Exception is expected.
kono
parents:
diff changeset
288 end;
kono
parents:
diff changeset
289
kono
parents:
diff changeset
290 exception
kono
parents:
diff changeset
291 when others => Report.Failed("Unexpected exception: Pointer_Block");
kono
parents:
diff changeset
292 end Pointer_Block;
kono
parents:
diff changeset
293
kono
parents:
diff changeset
294
kono
parents:
diff changeset
295 Subprogram_Block:
kono
parents:
diff changeset
296 declare
kono
parents:
diff changeset
297 Is_Constrained : Boolean;
kono
parents:
diff changeset
298 begin
kono
parents:
diff changeset
299
kono
parents:
diff changeset
300 begin
kono
parents:
diff changeset
301 NP_Proc (Obj0); -- OK: Obj0 not constrained, can
kono
parents:
diff changeset
302 if Obj0 /= (3, "Bye") then -- change discriminant value.
kono
parents:
diff changeset
303 Report.Failed
kono
parents:
diff changeset
304 ("Wrong value after aggregate assignment - Subtest 10");
kono
parents:
diff changeset
305 end if;
kono
parents:
diff changeset
306 exception
kono
parents:
diff changeset
307 when others =>
kono
parents:
diff changeset
308 Report.Failed ("Unexpected exception raised - Subtest 10");
kono
parents:
diff changeset
309 end;
kono
parents:
diff changeset
310
kono
parents:
diff changeset
311
kono
parents:
diff changeset
312 begin
kono
parents:
diff changeset
313 NP_Proc (Obj2); -- C_E: Obj2 is constrained (D=>5).
kono
parents:
diff changeset
314 Avoid_Optimization_and_Fail (Obj2, "Subtest 11");
kono
parents:
diff changeset
315 exception
kono
parents:
diff changeset
316 when Constraint_Error => null; -- Exception is expected.
kono
parents:
diff changeset
317 end;
kono
parents:
diff changeset
318
kono
parents:
diff changeset
319
kono
parents:
diff changeset
320 begin
kono
parents:
diff changeset
321 NP_Proc (Obj3); -- C_E: Obj3 is constrained (D=>5).
kono
parents:
diff changeset
322 Avoid_Optimization_and_Fail (Obj3, "Subtest 12");
kono
parents:
diff changeset
323 exception
kono
parents:
diff changeset
324 when Constraint_Error => null; -- Exception is expected.
kono
parents:
diff changeset
325 end;
kono
parents:
diff changeset
326
kono
parents:
diff changeset
327
kono
parents:
diff changeset
328 begin
kono
parents:
diff changeset
329 NP_Proc (Obj4); -- C_E: Obj4 is constrained (D=>2).
kono
parents:
diff changeset
330 Avoid_Optimization_and_Fail (Obj4, "Subtest 13");
kono
parents:
diff changeset
331 exception
kono
parents:
diff changeset
332 when Constraint_Error => null; -- Exception is expected.
kono
parents:
diff changeset
333 end;
kono
parents:
diff changeset
334
kono
parents:
diff changeset
335
kono
parents:
diff changeset
336
kono
parents:
diff changeset
337 begin
kono
parents:
diff changeset
338 Is_Constrained := True;
kono
parents:
diff changeset
339 NP_Cons (Obj1, Is_Constrained); -- Should return False, since Obj1
kono
parents:
diff changeset
340 if Is_Constrained then -- is not constrained.
kono
parents:
diff changeset
341 Report.Failed ("Wrong result from 'Constrained - Subtest 14");
kono
parents:
diff changeset
342 end if;
kono
parents:
diff changeset
343 exception
kono
parents:
diff changeset
344 when others =>
kono
parents:
diff changeset
345 Report.Failed ("Unexpected exception raised - Subtest 14");
kono
parents:
diff changeset
346 end;
kono
parents:
diff changeset
347
kono
parents:
diff changeset
348
kono
parents:
diff changeset
349 begin
kono
parents:
diff changeset
350 Is_Constrained := False;
kono
parents:
diff changeset
351 NP_Cons (Obj2, Is_Constrained); -- Should return True, Obj2 is
kono
parents:
diff changeset
352 if not Is_Constrained then -- constrained.
kono
parents:
diff changeset
353 Report.Failed ("Wrong result from 'Constrained - Subtest 15");
kono
parents:
diff changeset
354 end if;
kono
parents:
diff changeset
355 exception
kono
parents:
diff changeset
356 when others =>
kono
parents:
diff changeset
357 Report.Failed ("Unexpected exception raised - Subtest 15");
kono
parents:
diff changeset
358 end;
kono
parents:
diff changeset
359
kono
parents:
diff changeset
360
kono
parents:
diff changeset
361
kono
parents:
diff changeset
362
kono
parents:
diff changeset
363 begin
kono
parents:
diff changeset
364 Is_Constrained := False;
kono
parents:
diff changeset
365 P_Cons (Ptr2, Is_Constrained); -- Should return True, Ptr2.all
kono
parents:
diff changeset
366 if not Is_Constrained then -- is constrained.
kono
parents:
diff changeset
367 Report.Failed ("Wrong result from 'Constrained - Subtest 16");
kono
parents:
diff changeset
368 end if;
kono
parents:
diff changeset
369 exception
kono
parents:
diff changeset
370 when others =>
kono
parents:
diff changeset
371 Report.Failed ("Unexpected exception raised - Subtest 16");
kono
parents:
diff changeset
372 end;
kono
parents:
diff changeset
373
kono
parents:
diff changeset
374
kono
parents:
diff changeset
375 begin
kono
parents:
diff changeset
376 Is_Constrained := False;
kono
parents:
diff changeset
377 P_Cons (Ptr3, Is_Constrained); -- Should return True, Ptr3.all
kono
parents:
diff changeset
378 if not Is_Constrained then -- is constrained.
kono
parents:
diff changeset
379 Report.Failed ("Wrong result from 'Constrained - Subtest 17");
kono
parents:
diff changeset
380 end if;
kono
parents:
diff changeset
381 exception
kono
parents:
diff changeset
382 when others =>
kono
parents:
diff changeset
383 Report.Failed ("Unexpected exception raised - Subtest 17");
kono
parents:
diff changeset
384 end;
kono
parents:
diff changeset
385
kono
parents:
diff changeset
386
kono
parents:
diff changeset
387 exception
kono
parents:
diff changeset
388 when others => Report.Failed("Exception raised in Subprogram_Block");
kono
parents:
diff changeset
389 end Subprogram_Block;
kono
parents:
diff changeset
390
kono
parents:
diff changeset
391
kono
parents:
diff changeset
392 Generic_Block:
kono
parents:
diff changeset
393 declare
kono
parents:
diff changeset
394
kono
parents:
diff changeset
395 type NUC is new UC;
kono
parents:
diff changeset
396
kono
parents:
diff changeset
397 Obj : NUC;
kono
parents:
diff changeset
398
kono
parents:
diff changeset
399
kono
parents:
diff changeset
400 package Instance_A is new Gen (NUC, Obj);
kono
parents:
diff changeset
401 package Instance_B is new Gen (UC, Obj2);
kono
parents:
diff changeset
402 package Instance_C is new Gen (UC, Obj3);
kono
parents:
diff changeset
403 package Instance_D is new Gen (UC, Obj4);
kono
parents:
diff changeset
404
kono
parents:
diff changeset
405 begin
kono
parents:
diff changeset
406
kono
parents:
diff changeset
407 begin
kono
parents:
diff changeset
408 Instance_A.Proc; -- OK: Obj.D = 2.
kono
parents:
diff changeset
409 if Instance_A.F /= (2, "Fi") then
kono
parents:
diff changeset
410 Report.Failed
kono
parents:
diff changeset
411 ("Wrong value after aggregate assignment - Subtest 18");
kono
parents:
diff changeset
412 end if;
kono
parents:
diff changeset
413 exception
kono
parents:
diff changeset
414 when others =>
kono
parents:
diff changeset
415 Report.Failed ("Unexpected exception raised - Subtest 18");
kono
parents:
diff changeset
416 end;
kono
parents:
diff changeset
417
kono
parents:
diff changeset
418
kono
parents:
diff changeset
419 begin
kono
parents:
diff changeset
420 Instance_B.Proc; -- C_E: Obj2.D = 5.
kono
parents:
diff changeset
421 Avoid_Optimization_and_Fail (Obj2, "Subtest 19");
kono
parents:
diff changeset
422 exception
kono
parents:
diff changeset
423 when Constraint_Error => null; -- Exception is expected.
kono
parents:
diff changeset
424 end;
kono
parents:
diff changeset
425
kono
parents:
diff changeset
426
kono
parents:
diff changeset
427 begin
kono
parents:
diff changeset
428 Instance_C.Proc; -- C_E: Obj3.D = 5.
kono
parents:
diff changeset
429 Avoid_Optimization_and_Fail (Obj3, "Subtest 20");
kono
parents:
diff changeset
430 exception
kono
parents:
diff changeset
431 when Constraint_Error => null; -- Exception is expected.
kono
parents:
diff changeset
432 end;
kono
parents:
diff changeset
433
kono
parents:
diff changeset
434
kono
parents:
diff changeset
435 begin
kono
parents:
diff changeset
436 Instance_D.Proc; -- OK: Obj4.D = 2.
kono
parents:
diff changeset
437 if Instance_D.F /= (2, "Fi") then
kono
parents:
diff changeset
438 Report.Failed
kono
parents:
diff changeset
439 ("Wrong value after aggregate assignment - Subtest 21");
kono
parents:
diff changeset
440 end if;
kono
parents:
diff changeset
441 exception
kono
parents:
diff changeset
442 when others =>
kono
parents:
diff changeset
443 Report.Failed ("Unexpected exception raised - Subtest 21");
kono
parents:
diff changeset
444 end;
kono
parents:
diff changeset
445
kono
parents:
diff changeset
446 exception
kono
parents:
diff changeset
447 when others => Report.Failed("Exception raised in Generic_Block");
kono
parents:
diff changeset
448 end Generic_Block;
kono
parents:
diff changeset
449
kono
parents:
diff changeset
450
kono
parents:
diff changeset
451 Report.Result;
kono
parents:
diff changeset
452
kono
parents:
diff changeset
453 end C3A0014;