WITH REPORT; WITH SYSTEM;
USE REPORT; USE SYSTEM;
PROCEDURE C87B26B IS
TYPE REC (D : INTEGER) IS
RECORD
C1, C2 : INTEGER;
END RECORD;
TYPE P_REC IS ACCESS REC;
P_REC_OBJECT : P_REC := NEW REC'(1,1,1);
TYPE BIG_INT IS RANGE 0..SYSTEM.MAX_INT;
TASK TYPE TASK_TYPE IS
END TASK_TYPE;
TYPE P_TASK IS ACCESS TASK_TYPE;
P_TASK_OBJECT : P_TASK;
TASK BODY TASK_TYPE IS
BEGIN
NULL;
END TASK_TYPE;
FUNCTION F RETURN REC IS
BEGIN
RETURN (0,0,0);
END F;
FUNCTION F RETURN P_REC IS
BEGIN
RETURN P_REC_OBJECT;
END F;
FUNCTION G RETURN TASK_TYPE IS
NEW_TASK : TASK_TYPE;
BEGIN
RETURN NEW_TASK;
END G;
FUNCTION G RETURN P_TASK IS
BEGIN
RETURN P_TASK_OBJECT;
END G;
BEGIN
TEST("C87B26B","CHECK THAT EXPLICIT DEREFERENCING IN AN " &
"ATTRIBUTE PREFIX IS USED IN OVERLOADING RESOLUTION " &
"WITH 'ADDRESS, 'CONSTRAINED, 'SIZE, AND 'STORAGE_SIZE");
DECLARE
A : ADDRESS; B : BOOLEAN; C : INTEGER; D : ADDRESS; E : BIG_INT;
BEGIN
P_TASK_OBJECT := NEW TASK_TYPE;
A := F.ALL'ADDRESS;
B := F.ALL'CONSTRAINED;
C := F.ALL'SIZE;
D := G.ALL'ADDRESS;
E := G.ALL'STORAGE_SIZE;
IF A /= P_REC_OBJECT.ALL'ADDRESS THEN
FAILED("INCORRECT RESOLUTION FOR 'ADDRESS - REC");
END IF;
IF B /= P_REC_OBJECT.ALL'CONSTRAINED THEN
FAILED("INCORRECT RESOLUTION FOR 'CONSTRAINED");
END IF;
IF C /= P_REC_OBJECT.ALL'SIZE THEN
FAILED("INCORRECT RESOLUTION FOR 'SIZE");
END IF;
IF D /= P_TASK_OBJECT.ALL'ADDRESS THEN
FAILED("INCORRECT RESOLUTION FOR 'ADDRESS - TASK");
END IF;
IF E /= P_TASK_OBJECT.ALL'STORAGE_SIZE THEN
FAILED("INCORRECT RESOLUTION FOR 'STORAGE_SIZE");
END IF;
IF A = P_REC_OBJECT'ADDRESS THEN
FAILED("INCORRECT DEREFERENCING FOR 'ADDRESS - REC");
END IF;
IF C = P_REC_OBJECT'SIZE AND C /= P_REC_OBJECT.ALL'SIZE THEN
FAILED("INCORRECT DEREFERENCING FOR 'SIZE");
END IF;
IF D = P_TASK_OBJECT'ADDRESS THEN
FAILED("INCORRECT DEREFERENCING FOR 'ADDRESS - TASK");
END IF;
END;
RESULT;
END C87B26B;