-- C52011A.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. --* -- CHECK INDEX CONSTRAINTS FOR ASSIGNMENT OF ACCESS SUBTYPES. -- SPECIFICALLY, CHECK THAT: -- A) ANY ACCESS TYPE VARIABLE AND CONSTRAINED SUBTYPE VARIABLES OF THAT -- TYPE MAY BE ASSIGNED TO ONE ANOTHER IF THE VALUE BEING ASSIGNED -- IS NULL. -- B) VARIABLES OF THE SAME CONSTRAINED ACCESS SUBTYPE MAY BE ASSIGNED -- TO ONE ANOTHER OR TO VARIABLES OF THE BASE ACCESS TYPE. -- C) CONSTRAINT_ERROR IS RAISED UPON ASSIGNMENT OF NON-NULL OBJECTS -- BETWEEN DIFFERENTLY CONSTRAINED ACCESS SUBTYPES. -- D) CONSTRAINT_ERROR IS RAISED UPON ASSIGNMENT OF A NON-NULL OBJECT -- OF A BASE ACCESS TYPE VARIABLE TO A VARIABLE OF ONE OF ITS -- CONSTRAINED SUBTYPES IF THE CONSTRAINTS ON THE OBJECT DIFFER -- FROM THOSE ON THE SUBTYPE. -- E) NULL CAN BE ASSIGNED TO BASE ACCESS TYPES AND ANY CONSTRAINED -- SUBTYPES OF THIS TYPE. -- ASL 6/29/81 -- RM 6/17/82 -- SPS 10/26/82 -- RLB 6/29/01 - FIXED TO ALLOW AGGRESIVE OPTIMIZATION. WITH REPORT; PROCEDURE C52011A IS USE REPORT; TYPE ARR IS ARRAY(INTEGER RANGE <>) OF INTEGER; TYPE ARR_NAME IS ACCESS ARR; SUBTYPE S1 IS ARR_NAME(IDENT_INT(1)..IDENT_INT(10)); SUBTYPE S2 IS ARR_NAME(IDENT_INT(3)..IDENT_INT(6)); W : ARR_NAME := NULL; -- E. X1,X2 : S1 := NULL; -- E. Y1,Y2 : S2 := NULL; -- E. W_NONNULL : ARR_NAME := NEW ARR'(3..5=>7) ; X1_NONNULL : S1 := NEW ARR'(IDENT_INT(1)..IDENT_INT(10)=>7); Y1_NONNULL : S2 := NEW ARR'(IDENT_INT(3)..IDENT_INT( 6)=>7); TOO_EARLY : BOOLEAN := TRUE; BEGIN TEST ("C52011A", "INDEX CONSTRAINTS ON ACCESS SUBTYPE OBJECTS " & "MUST BE SATISFIED FOR ASSIGNMENT"); BEGIN IF EQUAL(3,3) THEN W_NONNULL := X1; -- A. END IF; IF W_NONNULL /= X1 THEN FAILED ("ASSIGNMENT FAILED - 1"); END IF; IF EQUAL(3,3) THEN X1_NONNULL := X2; -- A. END IF; IF X1_NONNULL /= X2 THEN FAILED ("ASSIGNMENT FAILED - 2"); END IF; IF EQUAL(3,3) THEN X1_NONNULL := Y1; -- A. END IF; IF X1 /= Y1 THEN FAILED ("ASSIGNMENT FAILED - 3"); END IF; X1 := NEW ARR'(1..IDENT_INT(10) => 5); IF EQUAL(3,3) THEN X2 := X1; -- B. END IF; IF X2 /= X1 THEN FAILED ("ASSIGNMENT FAILED - 4"); END IF; IF EQUAL(3,3) THEN W := X1; -- B. END IF; IF W /= X1 THEN FAILED ("ASSIGNMENT FAILED - 5"); END IF; BEGIN Y1 := X1; -- C. IF Y1'FIRST /= REPORT.IDENT_INT(3) THEN FAILED ("NON-NULL ASSIGNMENT MADE BETWEEN TWO " & "VARIABLES OF DIFFERENT CONSTRAINED ACCESS SUBTYPES " & "AND CONSTRAINT IS CHANGED"); ELSE FAILED ("NON-NULL ASSIGNMENT MADE BETWEEN TWO " & "VARIABLES OF DIFFERENT CONSTRAINED ACCESS SUBTYPES " & "AND CONSTRAINT IS NOT CHANGED"); END IF; EXCEPTION WHEN CONSTRAINT_ERROR => NULL; WHEN OTHERS => FAILED ("WRONG EXCEPTION - 1"); END; W := NEW ARR'(IDENT_INT(3)..IDENT_INT(6) => 3); BEGIN X1 := W; -- D. IF X1'FIRST /= REPORT.IDENT_INT(1) THEN FAILED ("NON-NULL ASSIGNMENT MADE FROM UNCONSTRAINED " & "ACCESS TYPE DESIGNATING CONSTRAINED OBJECT TO "& "ACCESS SUBTYPE WITH DIFFERENT CONSTRAINT " & "AND CONSTRAINT IS CHANGED"); ELSE FAILED ("NON-NULL ASSIGNMENT MADE FROM UNCONSTRAINED " & "ACCESS TYPE DESIGNATING CONSTRAINED OBJECT TO "& "ACCESS SUBTYPE WITH DIFFERENT CONSTRAINT " & "AND CONSTRAINT IS NOT CHANGED"); END IF; EXCEPTION WHEN CONSTRAINT_ERROR => NULL ; WHEN OTHERS => FAILED ("WRONG EXCEPTION - 2"); END; EXCEPTION WHEN OTHERS => FAILED ("EXCEPTION RAISED"); END; RESULT; END C52011A;