WITH REPORT; USE REPORT;
WITH LENGTH_CHECK; PROCEDURE CD2A31C IS
TYPE BASIC_INT IS RANGE -60 .. 80;
SPECIFIED_SIZE : CONSTANT := 9;
TYPE DERIVED_INT IS NEW BASIC_INT;
FOR DERIVED_INT'SIZE USE SPECIFIED_SIZE;
PACKAGE P IS
TYPE INT_IN_P IS RANGE -125 .. 125;
FOR INT_IN_P'SIZE USE SPECIFIED_SIZE;
TYPE PRIVATE_INT IS PRIVATE;
TYPE ALT_INT_IN_P IS RANGE -125 .. 125;
PRIVATE
TYPE PRIVATE_INT IS RANGE -125 .. 125;
FOR ALT_INT_IN_P'SIZE USE SPECIFIED_SIZE;
END P;
USE P;
TYPE DERIVED_PRIVATE_INT IS NEW PRIVATE_INT;
FOR DERIVED_PRIVATE_INT'SIZE USE SPECIFIED_SIZE;
MINIMUM_SIZE : INTEGER := IDENT_INT(SPECIFIED_SIZE);
GENERIC
PROCEDURE GENPROC;
PROCEDURE GENPROC IS
TYPE CHECK_INT IS RANGE -125 .. 125;
FOR CHECK_INT'SIZE USE SPECIFIED_SIZE;
PROCEDURE CHECK_4 IS NEW LENGTH_CHECK (CHECK_INT);
BEGIN
IF CHECK_INT'SIZE /= MINIMUM_SIZE THEN
FAILED ("GENERIC CHECK_INT'SIZE IS INCORRECT");
END IF;
CHECK_4 (-60, 9, "GENERIC CHECK_INT");
END GENPROC;
PROCEDURE NEWPROC IS NEW GENPROC;
PROCEDURE CHECK_1 IS NEW LENGTH_CHECK (DERIVED_INT);
PROCEDURE CHECK_2 IS NEW LENGTH_CHECK (INT_IN_P);
PROCEDURE CHECK_3 IS NEW LENGTH_CHECK (ALT_INT_IN_P);
BEGIN
TEST("CD2A31C", "CHECK THAT 'SIZE SPECIFICATIONS CAN BE GIVEN IN " &
"VISIBLE OR PRIVATE PART OF PACKAGE FOR INTEGER " &
"TYPE DECLARED IN VISIBLE PART, AND FOR " &
"DERIVED INTEGER TYPES " &
"AND DERIVED PRIVATE TYPES WHOSE FULL DECLARATIONS " &
"ARE AS INTEGER TYPES");
CHECK_1 (-60, 9, "DERIVED_INT");
CHECK_2 (-60, 9, "INT_IN_P");
CHECK_3 (-60, 9, "ALT_INT_IN_P");
NEWPROC;
IF DERIVED_INT'SIZE /= MINIMUM_SIZE THEN
FAILED ("DERIVED_INT'SIZE INCORRECT");
END IF;
IF INT_IN_P'SIZE /= MINIMUM_SIZE THEN
FAILED ("INT_IN_P'SIZE INCORRECT");
END IF;
IF ALT_INT_IN_P'SIZE /= MINIMUM_SIZE THEN
FAILED ("ALT_INT_IN_P'SIZE INCORRECT");
END IF;
IF DERIVED_PRIVATE_INT'SIZE /= MINIMUM_SIZE THEN
FAILED ("DERIVED_PRIVATE_INT'SIZE INCORRECT");
END IF;
RESULT;
END CD2A31C;