3 -- Grant of Unlimited Rights
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
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.
26 -- CHECK THAT AN UNCONSTRAINED ARRAY TYPE OR A RECORD WITHOUT
27 -- DEFAULT DISCRIMINANTS CAN BE USED IN AN ACCESS_TYPE_DEFINITION
28 -- WITHOUT AN INDEX OR DISCRIMINANT CONSTRAINT.
30 -- CHECK THAT (NON-STATIC) INDEX OR DISCRIMINANT CONSTRAINTS CAN
31 -- SUBSEQUENTLY BE IMPOSED WHEN THE TYPE IS USED IN AN OBJECT
32 -- DECLARATION, ARRAY COMPONENT DECLARATION, RECORD COMPONENT
33 -- DECLARATION, ACCESS TYPE DECLARATION, PARAMETER DECLARATION,
34 -- DERIVED TYPE DEFINITION, PRIVATE TYPE.
36 -- CHECK FOR UNCONSTRAINED GENERIC FORMAL TYPE.
39 -- AH 09/02/86 CREATED ORIGINAL TEST.
40 -- DHH 08/16/88 REVISED HEADER AND ENTERED COMMENTS FOR PRIVATE TYPE
41 -- AND CORRECTED INDENTATION.
42 -- BCB 04/12/90 ADDED CHECKS FOR AN ARRAY AS A SUBPROGRAM RETURN
43 -- TYPE AND AN ARRAY AS A FORMAL PARAMETER.
44 -- LDC 10/01/90 ADDED CODE SO F, FPROC, G, GPROC AREN'T OPTIMIZED
47 WITH REPORT
; USE REPORT
;
51 TEST
("C38002A", "NON-STATIC CONSTRAINTS CAN BE IMPOSED " &
52 "ON ACCESS TYPES ACCESSING PREVIOUSLY UNCONSTRAINED " &
53 "ARRAY OR RECORD TYPES");
56 C3
: CONSTANT INTEGER := IDENT_INT
(3);
58 TYPE ARR
IS ARRAY (INTEGER RANGE <>) OF INTEGER;
59 TYPE ARR_NAME
IS ACCESS ARR
;
60 SUBTYPE ARR_NAME_3
IS ARR_NAME
(1..3);
62 TYPE REC
(DISC
: INTEGER) IS
64 COMP
: ARR_NAME
(1..DISC
);
66 TYPE REC_NAME
IS ACCESS REC
;
70 TYPE ARR2
IS ARRAY (1..10) OF REC_NAME
(C3
);
77 TYPE NAME_REC_NAME
IS ACCESS REC_NAME
(C3
);
79 TYPE DERIV
IS NEW REC_NAME
(C3
);
80 SUBTYPE REC_NAME_3
IS REC_NAME
(C3
);
82 FUNCTION F
(PARM
: REC_NAME_3
) RETURN REC_NAME_3
IS
84 IF NOT EQUAL
(IDENT_INT
(3), 1 + IDENT_INT
(2)) THEN
85 COMMENT
("DON'T OPTIMIZE F AWAY");
90 PROCEDURE FPROC
(PARM
: REC_NAME_3
) IS
92 IF NOT EQUAL
(IDENT_INT
(4), 2 + IDENT_INT
(2)) THEN
93 COMMENT
("DON'T OPTIMIZE FPROC AWAY");
97 FUNCTION G
(PA
: ARR_NAME_3
) RETURN ARR_NAME_3
IS
99 IF NOT EQUAL
(IDENT_INT
(5), 3 + IDENT_INT
(2)) THEN
100 COMMENT
("DON'T OPTIMIZE G AWAY");
105 PROCEDURE GPROC
(PA
: ARR_NAME_3
) IS
107 IF NOT EQUAL
(IDENT_INT
(6), 4 + IDENT_INT
(2)) THEN
108 COMMENT
("DON'T OPTIMIZE GPROC AWAY");
116 R
:= NEW REC
'(DISC => 3, COMP => NEW ARR'(1..3 => 5));
118 R
:= NEW REC
'(DISC => 4, COMP => NEW ARR'(1..4 => 5));
120 FAILED
("INCOMPATIBLE CONSTRAINT ON ACCESS VALUE " &
121 "ACCEPTED BY FUNCTION FOR RECORD");
123 WHEN CONSTRAINT_ERROR
=>
124 IF R
= NULL OR ELSE R
.DISC
/= 4 THEN
125 FAILED
("ERROR IN EVALUATION/ASSIGNMENT OF " &
126 "ACCESS VALUE - RECORD,FUNCTION");
133 R
:= NEW REC
'(DISC => 3, COMP => NEW ARR'(1..3 => 5));
135 R
:= NEW REC
'(DISC => 4, COMP => NEW ARR'(1..4 => 5));
137 FAILED
("INCOMPATIBLE CONSTRAINT ON ACCESS VALUE " &
138 "ACCEPTED BY PROCEDURE FOR RECORD");
140 WHEN CONSTRAINT_ERROR
=>
141 IF R
= NULL OR ELSE R
.DISC
/= 4 THEN
142 FAILED
("ERROR IN EVALUATION/ASSIGNMENT OF " &
143 "ACCESS VALUE - RECORD,PROCEDURE");
150 A
:= NEW ARR
'(1..3 => 5);
152 A := NEW ARR'(1..4 => 6);
154 FAILED
("INCOMPATIBLE CONSTRAINT ON ACCESS VALUE " &
155 "ACCEPTED BY FUNCTION FOR ARRAY");
157 WHEN CONSTRAINT_ERROR
=>
158 IF A
= NULL OR ELSE A
(4) /= 6 THEN
159 FAILED
("ERROR IN EVALUATION/ASSIGNMENT OF " &
160 "ACCESS VALUE - ARRAY,FUNCTION");
167 A
:= NEW ARR
'(1..3 => 5);
169 A := NEW ARR'(1..4 => 6);
171 FAILED
("INCOMPATIBLE CONSTRAINT ON ACCESS VALUE " &
172 "ACCEPTED BY PROCEDURE FOR ARRAY");
174 WHEN CONSTRAINT_ERROR
=>
175 IF A
= NULL OR ELSE A
(4) /= 6 THEN
176 FAILED
("ERROR IN EVALUATION/ASSIGNMENT OF " &
177 "ACCESS VALUE - ARRAY,PROCEDURE");
183 C3
: CONSTANT INTEGER := IDENT_INT
(3);
185 TYPE REC
(DISC
: INTEGER) IS
190 TYPE P_ARR
IS ARRAY (INTEGER RANGE <>) OF INTEGER;
191 TYPE P_ARR_NAME
IS ACCESS P_ARR
;
193 TYPE P_REC_NAME
IS ACCESS REC
;
196 TYPE UNCON_ARR
IS ARRAY (INTEGER RANGE <>) OF INTEGER;
198 TYPE ACC_REC
IS ACCESS REC
;
199 TYPE ACC_ARR
IS ACCESS UNCON_ARR
;
200 TYPE ACC_P_ARR
IS ACCESS P_ARR
;
201 SUBTYPE ACC_P_ARR_3
IS ACC_P_ARR
(1..3);
204 TYPE ARR2
IS ARRAY (1..10) OF ACC_REC
(C3
);
213 COMP2
: ACC_ARR
(1..C3
);
216 SUBTYPE ACC_REC_3
IS ACC_REC
(C3
);
218 FUNCTION F
(PARM
: ACC_REC_3
) RETURN ACC_REC_3
;
220 PROCEDURE FPROC
(PARM
: ACC_REC_3
);
222 FUNCTION G
(PA
: ACC_P_ARR_3
) RETURN ACC_P_ARR_3
;
224 PROCEDURE GPROC
(PA
: ACC_P_ARR_3
);
226 TYPE ACC1
IS PRIVATE;
227 TYPE ACC2
IS PRIVATE;
228 TYPE DER1
IS PRIVATE;
229 TYPE DER2
IS PRIVATE;
233 TYPE ACC1
IS ACCESS ACC_REC
(C3
);
234 TYPE ACC2
IS ACCESS ACC_ARR
(1..C3
);
235 TYPE DER1
IS NEW ACC_REC
(C3
);
236 TYPE DER2
IS NEW ACC_ARR
(1..C3
);
240 FUNCTION F
(PARM
: ACC_REC_3
) RETURN ACC_REC_3
IS
242 IF NOT EQUAL
(IDENT_INT
(3), 1 + IDENT_INT
(2)) THEN
243 COMMENT
("DON'T OPTIMIZE F AWAY");
248 PROCEDURE FPROC
(PARM
: ACC_REC_3
) IS
250 IF NOT EQUAL
(IDENT_INT
(4), 2 + IDENT_INT
(2)) THEN
251 COMMENT
("DON'T OPTIMIZE FPROC AWAY");
255 FUNCTION G
(PA
: ACC_P_ARR_3
) RETURN ACC_P_ARR_3
IS
257 IF NOT EQUAL
(IDENT_INT
(5), 3 + IDENT_INT
(2)) THEN
258 COMMENT
("DON'T OPTIMIZE G AWAY");
263 PROCEDURE GPROC
(PA
: ACC_P_ARR_3
) IS
265 IF NOT EQUAL
(IDENT_INT
(6), 4 + IDENT_INT
(2)) THEN
266 COMMENT
("DON'T OPTIMIZE GPROC AWAY");
271 PACKAGE NP
IS NEW P
(UNCON_ARR
=> P_ARR
);
279 R
:= NEW REC
(DISC
=> 3);
281 R
:= NEW REC
(DISC
=> 4);
283 FAILED
("INCOMPATIBLE CONSTRAINT ON ACCESS VALUE " &
284 "ACCEPTED BY FUNCTION FOR A RECORD -GENERIC");
286 WHEN CONSTRAINT_ERROR
=>
287 IF R
= NULL OR ELSE R
.DISC
/= 4 THEN
288 FAILED
("ERROR IN EVALUATION/ASSIGNMENT " &
289 "OF ACCESS VALUE - RECORD," &
290 "FUNCTION -GENERIC");
297 R
:= NEW REC
(DISC
=> 3);
299 R
:= NEW REC
(DISC
=> 4);
301 FAILED
("INCOMPATIBLE CONSTRAINT ON ACCESS VALUE " &
302 "ACCEPTED BY PROCEDURE FOR A RECORD -GENERIC");
304 WHEN CONSTRAINT_ERROR
=>
305 IF R
= NULL OR ELSE R
.DISC
/= 4 THEN
306 FAILED
("ERROR IN EVALUATION/ASSIGNMENT " &
307 "OF ACCESS VALUE - RECORD," &
308 "PROCEDURE -GENERIC");
315 A
:= NEW P_ARR
'(1..3 => 5);
317 A := NEW P_ARR'(1..4 => 6);
319 FAILED
("INCOMPATIBLE CONSTRAINT ON ACCESS VALUE " &
320 "ACCEPTED BY FUNCTION FOR AN ARRAY -GENERIC");
322 WHEN CONSTRAINT_ERROR
=>
323 IF A
= NULL OR ELSE A
(4) /= 6 THEN
324 FAILED
("ERROR IN EVALUATION/ASSIGNMENT " &
325 "OF ACCESS VALUE - ARRAY," &
326 "FUNCTION -GENERIC");
333 A
:= NEW P_ARR
'(1..3 => 5);
335 A := NEW P_ARR'(1..4 => 6);
337 FAILED
("INCOMPATIBLE CONSTRAINT ON ACCESS VALUE " &
338 "ACCEPTED BY PROCEDURE FOR AN ARRAY -GENERIC");
340 WHEN CONSTRAINT_ERROR
=>
341 IF A
= NULL OR ELSE A
(4) /= 6 THEN
342 FAILED
("ERROR IN EVALUATION/ASSIGNMENT " &
343 "OF ACCESS VALUE - ARRAY," &
344 "PROCEDURE -GENERIC");
350 TYPE CON_INT
IS RANGE 1..10;
353 TYPE UNCON_INT
IS RANGE <>;
355 SUBTYPE NEW_INT
IS UNCON_INT
RANGE 1..5;
356 FUNCTION FUNC_INT
(PARM
: NEW_INT
) RETURN NEW_INT
;
358 PROCEDURE PROC_INT
(PARM
: NEW_INT
);
362 FUNCTION FUNC_INT
(PARM
: NEW_INT
) RETURN NEW_INT
IS
364 IF NOT EQUAL
(IDENT_INT
(3), 1 + IDENT_INT
(2)) THEN
365 COMMENT
("DON'T OPTIMIZE F AWAY");
370 PROCEDURE PROC_INT
(PARM
: NEW_INT
) IS
372 IF NOT EQUAL
(IDENT_INT
(4), 2 + IDENT_INT
(2)) THEN
373 COMMENT
("DON'T OPTIMIZE FPROC AWAY");
378 PACKAGE NP2
IS NEW P2
(UNCON_INT
=> CON_INT
);
390 FAILED
("INCOMPATIBLE CONSTRAINT ON VALUE " &
391 "ACCEPTED BY FUNCTION -GENERIC");
393 WHEN CONSTRAINT_ERROR
=>
395 FAILED
("ERROR IN EVALUATION/ASSIGNMENT " &
396 "OF VALUE -FUNCTION, GENERIC");
407 FAILED
("INCOMPATIBLE CONSTRAINT ON ACCESS VALUE " &
408 "ACCEPTED BY PROCEDURE -GENERIC");
410 WHEN CONSTRAINT_ERROR
=>
412 FAILED
("ERROR IN EVALUATION/ASSIGNMENT " &
413 "OF ACCESS VALUE - PROCEDURE, " &