WITH REPORT; USE REPORT;
PROCEDURE C85005G IS
SUBTYPE INT IS INTEGER RANGE -100 .. 100;
I : INTEGER := IDENT_INT(INTEGER'LAST);
J : INT := IDENT_INT(INT'LAST);
DG1 : INTEGER := IDENT_INT(INTEGER'LAST);
DG2 : INT := IDENT_INT(INT'LAST);
XI : INT RENAMES I;
XJ : INTEGER RENAMES J;
GENERIC
G1 : IN OUT INT;
G2 : IN OUT INTEGER;
PROCEDURE GEN;
PROCEDURE GEN IS
XG1 : INT RENAMES G1;
XG2 : INTEGER RENAMES G2;
BEGIN
IF XG1 /= INTEGER'LAST THEN
FAILED("INCORRECT VALUE OF RENAMING VARIABLE - G1");
END IF;
XG1 := IDENT_INT(INTEGER'FIRST);
IF XG1 /= INTEGER'FIRST THEN
FAILED("INCORRECT VALUE OF RENAMING VARIABLE - G2");
END IF;
IF XG2 /= INT'LAST THEN
FAILED("INCORRECT VALUE OF RENAMING VARIABLE - G3");
END IF;
XG2 := IDENT_INT(INT'FIRST);
IF XG2 /= INT'FIRST THEN
FAILED("INCORRECT VALUE OF RENAMING VARIABLE - G4");
END IF;
BEGIN
XG2 := IDENT_INT(INTEGER'LAST);
FAILED ("NO EXCEPTION RAISED BY XG2 := INTEGER'LAST");
IF NOT EQUAL(XG2,XG2) THEN
COMMENT ("DON'T OPTIMIZE XG2");
END IF;
EXCEPTION
WHEN CONSTRAINT_ERROR =>
NULL;
WHEN OTHERS =>
FAILED ("UNEXPECTED EXCEPTION (G)");
END;
END GEN;
PROCEDURE PROC IS NEW GEN(DG1, DG2);
BEGIN
TEST ("C85005G", "CHECK THAT ANY SUBTYPE CONSTRAINT IMPOSED BY " &
"THE TYPE MARK USED IN THE RENAMING " &
"DECLARATION IS IGNORED, AND THE SUBTYPE " &
"CONSTRAINT ASSOCIATED WITH THE RENAMED " &
"VARIABLE IS USED INSTEAD");
IF XI /= INTEGER'LAST THEN
FAILED("INCORRECT VALUE OF RENAMING VARIABLE - 1");
END IF;
XI := IDENT_INT(INTEGER'FIRST);
IF XI /= INTEGER'FIRST THEN
FAILED("INCORRECT VALUE OF RENAMING VARIABLE - 2");
END IF;
IF XJ /= INT'LAST THEN
FAILED("INCORRECT VALUE OF RENAMING VARIABLE - 3");
END IF;
XJ := IDENT_INT(INT'FIRST);
IF XJ /= INT'FIRST THEN
FAILED("INCORRECT VALUE OF RENAMING VARIABLE - 4");
END IF;
BEGIN
XJ := IDENT_INT(INTEGER'LAST);
FAILED ("NO EXCEPTION RAISED BY XJ := INTEGER'LAST");
IF NOT EQUAL(XJ,XJ) THEN
COMMENT ("DON'T OPTIMIZE XJ");
END IF;
EXCEPTION
WHEN CONSTRAINT_ERROR =>
NULL;
WHEN OTHERS =>
FAILED ("UNEXPECTED EXCEPTION - 1");
END;
PROC;
RESULT;
EXCEPTION
WHEN OTHERS =>
FAILED("UNEXPECTED EXCEPTION - 2");
RESULT;
END C85005G;