blob: 19e87aafa7243d6572b0e798e6e8b84b494d40b5 [file] [log] [blame]
-- C48008A.ADA
-- Grant of Unlimited Rights
--
-- Under contracts F33600-87-D-0337, F33600-84-D-0280, MDA903-79-C-0687,
-- F08630-91-C-0015, and DCA100-97-D-0025, the U.S. Government obtained
-- unlimited rights in the software and documentation contained herein.
-- Unlimited rights are defined in DFAR 252.227-7013(a)(19). By making
-- this public release, the Government intends to confer upon all
-- recipients unlimited rights equal to those held by the Government.
-- These rights include rights to use, duplicate, release or disclose the
-- released technical data and computer software in whole or in part, in
-- any manner and for any purpose whatsoever, and to have or permit others
-- to do so.
--
-- DISCLAIMER
--
-- ALL MATERIALS OR INFORMATION HEREIN RELEASED, MADE AVAILABLE OR
-- DISCLOSED ARE AS IS. THE GOVERNMENT MAKES NO EXPRESS OR IMPLIED
-- WARRANTY AS TO ANY MATTER WHATSOEVER, INCLUDING THE CONDITIONS OF THE
-- SOFTWARE, DOCUMENTATION OR OTHER INFORMATION RELEASED, MADE AVAILABLE
-- OR DISCLOSED, OR THE OWNERSHIP, MERCHANTABILITY, OR FITNESS FOR A
-- PARTICULAR PURPOSE OF SAID MATERIAL.
--*
-- FOR ALLOCATORS OF THE FORM "NEW T X", CHECK THAT CONSTRAINT_ERROR IS
-- RAISED IF T IS AN UNCONSTRAINED RECORD, PRIVATE, OR LIMITED TYPE, X
-- IS A DISCRIMINANT CONSTRAINT, AND
-- 1) ONE OF THE VALUES OF X IS OUTSIDE THE RANGE OF THE CORRESPONDING
-- DISCRIMINANT;
-- 2) ONE OF THE DISCRIMINANT VALUES IS NOT COMPATIBLE WITH A
-- CONSTRAINT OF A SUBCOMPONENT IN WHICH IT IS USED;
-- 3) ONE OF THE DISCRIMINANT VALUES DOES NOT EQUAL THE CORRESPONDING
-- VALUE OF THE ALLOCATOR'S BASE TYPE;
-- 4) A DEFAULT INITIALIZATION RAISES AN EXCEPTION.
-- RM 01/08/80
-- NL 10/13/81
-- SPS 10/26/82
-- JBG 03/02/83
-- EG 07/05/84
-- PWB 02/05/86 CORRECTED TEST ERROR:
-- CHANGED "FAILED" TO "COMMENT" IN PROCEDURE INCR_CHECK,
-- SO AS NOT TO PROHIBIT EVAL OF DEFLT EXPR (AI-00397/01)
-- ADDED COMMENTS FOR CASES.
WITH REPORT;
PROCEDURE C48008A IS
USE REPORT;
BEGIN
TEST( "C48008A" , "FOR ALLOCATORS OF THE FORM 'NEW T X', " &
"CHECK THAT CONSTRAINT_ERROR IS RAISED WHEN " &
"APPROPRIATE - UNCONSTRAINED RECORD AND " &
"PRIVATE TYPES");
DECLARE
DISC_FLAG : BOOLEAN := FALSE;
INCR_VAL : INTEGER;
FUNCTION INCR(A : INTEGER) RETURN INTEGER;
SUBTYPE I1_7 IS INTEGER RANGE IDENT_INT(1)..IDENT_INT(7);
SUBTYPE I1_10 IS INTEGER RANGE IDENT_INT(1)..IDENT_INT(10);
SUBTYPE I2_9 IS INTEGER RANGE IDENT_INT(2)..IDENT_INT(9);
TYPE REC (A : I2_9) IS
RECORD
B : INTEGER := INCR(2);
END RECORD;
TYPE ARR IS ARRAY (I2_9 RANGE <>) OF INTEGER;
TYPE T_REC (C : I1_10) IS
RECORD
D : REC(C);
END RECORD;
TYPE T_ARR (C : I1_10) IS
RECORD
D : ARR(2..C);
E : ARR(C..9);
END RECORD;
TYPE T_REC_REC (A : I1_10) IS
RECORD
B : T_REC(A);
END RECORD;
TYPE T_REC_ARR (A : I1_10) IS
RECORD
B : T_ARR(A);
END RECORD;
TYPE TB ( A : I1_7 ) IS
RECORD
R : INTEGER := INCR(1);
END RECORD;
TYPE UR (A : INTEGER) IS
RECORD
B : I2_9 := INCR(1);
END RECORD;
TYPE A_T_REC_REC IS ACCESS T_REC_REC;
TYPE A_T_REC_ARR IS ACCESS T_REC_ARR;
TYPE ATB IS ACCESS TB;
TYPE ACTB IS ACCESS TB(3);
TYPE A_UR IS ACCESS UR;
VA_T_REC_REC : A_T_REC_REC;
VA_T_REC_ARR : A_T_REC_ARR;
VB : ATB;
VCB : ACTB;
V_A_UR : A_UR;
BOOL : BOOLEAN;
FUNCTION DISC (A : INTEGER) RETURN INTEGER;
PACKAGE P IS
TYPE PRIV( A : I1_10 := DISC(8) ) IS PRIVATE;
CONS_PRIV : CONSTANT PRIV;
PRIVATE
TYPE PRIV( A : I1_10 := DISC(8) ) IS
RECORD
R : INTEGER := INCR(1);
END RECORD;
CONS_PRIV : CONSTANT PRIV := (2, 3);
END P;
TYPE A_PRIV IS ACCESS P.PRIV;
TYPE A_CPRIV IS ACCESS P.PRIV (3);
VP : A_PRIV;
VCP : A_CPRIV;
PROCEDURE PREC_REC (X : A_T_REC_REC) IS
BEGIN
NULL;
END PREC_REC;
PROCEDURE PREC_ARR (X : A_T_REC_ARR) IS
BEGIN
NULL;
END PREC_ARR;
PROCEDURE PB (X : ATB) IS
BEGIN
NULL;
END PB;
PROCEDURE PCB (X : ACTB) IS
BEGIN
NULL;
END PCB;
PROCEDURE PPRIV (X : A_PRIV) IS
BEGIN
NULL;
END PPRIV;
PROCEDURE PCPRIV (X : A_CPRIV) IS
BEGIN
NULL;
END PCPRIV;
FUNCTION DISC (A : INTEGER) RETURN INTEGER IS
BEGIN
DISC_FLAG := TRUE;
RETURN A;
END DISC;
FUNCTION INCR(A : INTEGER) RETURN INTEGER IS
BEGIN
INCR_VAL := IDENT_INT(INCR_VAL+1);
RETURN A;
END INCR;
PROCEDURE INCR_CHECK(CASE_ID : STRING) IS
BEGIN
IF INCR_VAL /= IDENT_INT(0) THEN
COMMENT ("DEFAULT INITIAL VALUE WAS EVALUATED - " &
"CASE " & CASE_ID);
END IF;
END INCR_CHECK;
BEGIN
BEGIN -- A1A: 0 ILLEGAL FOR TB.A.
INCR_VAL := 0;
VB := NEW TB (A => 0);
FAILED ("NO EXCEPTION RAISED - CASE A1A");
EXCEPTION
WHEN CONSTRAINT_ERROR =>
INCR_CHECK("A1A");
WHEN OTHERS =>
FAILED( "WRONG EXCEPTION RAISED - CASE A1A" );
END; -- A1A
BEGIN -- A1B: 8 ILLEGAL IN I1_7.
INCR_VAL := 0;
VB := NEW TB (A => I1_7'(IDENT_INT(8)));
FAILED ("NO EXCEPTION RAISED - CASE A1B");
EXCEPTION
WHEN CONSTRAINT_ERROR =>
INCR_CHECK("A1B");
WHEN OTHERS =>
FAILED( "WRONG EXCEPTION RAISED - CASE A1B");
END; -- A1B
BEGIN -- A1C: 8 ILLEGAL FOR TB.A.
INCR_VAL := 0;
PB(NEW TB (A => 8));
FAILED ("NO EXCEPTION RAISED - CASE A1C");
EXCEPTION
WHEN CONSTRAINT_ERROR =>
INCR_CHECK("A1C");
WHEN OTHERS =>
FAILED( "WRONG EXCEPTION RAISED - CASE A1C");
END; --A1C
BEGIN --A1D: 0 ILLEGAL FOR TB.A.
INCR_VAL := 0;
BOOL := ATB'(NEW TB(A => 0)) = NULL;
FAILED ("NO EXCEPTION RAISED - CASE A1D");
EXCEPTION
WHEN CONSTRAINT_ERROR =>
INCR_CHECK("A1D");
WHEN OTHERS =>
FAILED( "WRONG EXCEPTION RAISED - CASE A1D");
END; --A1D
BEGIN --A1E: 11 ILLEGAL FOR PRIV.A.
DISC_FLAG := FALSE;
INCR_VAL := 0;
VP := NEW P.PRIV(11);
FAILED("NO EXCEPTION RAISED - CASE A1E");
EXCEPTION
WHEN CONSTRAINT_ERROR =>
IF DISC_FLAG THEN
FAILED ("DISCR DEFAULT EVALUATED WHEN " &
"EXPLICIT VALUE WAS PROVIDED - A1E");
END IF;
INCR_CHECK("A1E");
WHEN OTHERS =>
FAILED("WRONG EXCEPTION RAISED - CASE A1E");
END; -- A1E
BEGIN -- A2A: 1 ILLEGAL FOR REC.A.
INCR_VAL := 0;
VA_T_REC_REC := NEW T_REC_REC(A => I1_10'(IDENT_INT(1)));
FAILED ("NO EXCEPTION RAISED - CASE A2A");
EXCEPTION
WHEN CONSTRAINT_ERROR =>
INCR_CHECK("A2A");
WHEN OTHERS =>
FAILED ("WRONG EXCEPTION RAISED - CASE A2A");
END; -- A2A
BEGIN --A2B: 10 ILLEGAL FOR REC.A.
INCR_VAL := 0;
VA_T_REC_REC := NEW T_REC_REC (10);
FAILED ("NO EXCEPTION RAISED - CASE A2B");
EXCEPTION
WHEN CONSTRAINT_ERROR =>
INCR_CHECK("A2B");
WHEN OTHERS =>
FAILED ("WRONG EXCEPTION RAISED - CASE A2B");
END; -- A2B
BEGIN -- A2C: 1 ILLEGAL FOR T.ARR.E'FIRST.
INCR_VAL := 0;
PREC_ARR (NEW T_REC_ARR (1));
FAILED ("NO EXCEPTION RAISED - CASE A2C");
EXCEPTION
WHEN CONSTRAINT_ERROR =>
INCR_CHECK ("A2C");
WHEN OTHERS =>
FAILED ("WRONG EXCEPTION RAISED - CASE A2C");
END; -- A2C
BEGIN -- A2D: 10 ILLEGAL FOR T_ARR.D'LAST.
INCR_VAL := 0;
BOOL := NEW T_REC_ARR (IDENT_INT(10)) = NULL;
FAILED ("NO EXCEPTION RAISED - CASE A2D");
EXCEPTION
WHEN CONSTRAINT_ERROR =>
INCR_CHECK ("A2D");
WHEN OTHERS =>
FAILED ("WRONG EXCEPTION RAISED - CASE A2D");
END; -- A2D
BEGIN -- A3A: ASSIGNMENT VIOLATES CONSTRAINT ON VCB'S SUBTYPE.
INCR_VAL := 0;
VCB := NEW TB (4);
FAILED ("NO EXCEPTION RAISED - CASE A3A");
EXCEPTION
WHEN CONSTRAINT_ERROR =>
INCR_CHECK("A3A");
WHEN OTHERS =>
FAILED ("WRONG EXCEPTION RAISED - CASE A3A");
END; -- A3A
BEGIN -- A3B: PARM ASSOC VIOLATES CONSTRAINT ON PARM SUBTYPE.
INCR_VAL := 0;
PCB (NEW TB (4));
FAILED ("NO EXCEPTION RAISED - CASE A3B");
EXCEPTION
WHEN CONSTRAINT_ERROR =>
INCR_CHECK("A3B");
WHEN OTHERS =>
FAILED ("WRONG EXCEPTION RAISED - CASE A3B");
END; -- A3B
BEGIN -- A3C: 2 VIOLATES CONSTRAINT ON SUBTYPE ACTB.
INCR_VAL := 0;
BOOL := ACTB'(NEW TB (IDENT_INT(2))) = NULL;
FAILED ("NO EXCEPTION RAISED - CASE A3C");
EXCEPTION
WHEN CONSTRAINT_ERROR =>
INCR_CHECK("A3C");
WHEN OTHERS =>
FAILED ("WRONG EXCEPTION RAISED - CASE A3C");
END; -- A3C
BEGIN -- A4A: EVALUATION OF DEFAULT RAISES EXCEPTION.
INCR_VAL := 0;
V_A_UR := NEW UR(4);
FAILED ("NO EXCEPTION RAISED - CASE A4A");
EXCEPTION
WHEN CONSTRAINT_ERROR =>
NULL;
WHEN OTHERS =>
FAILED ("WRONG EXCEPTION RAISED - CASE A4A");
END; -- A4A
END;
RESULT;
END C48008A;