WITH REPORT; USE REPORT;
PROCEDURE C84005A IS
PACKAGE PACK1 IS
FUNCTION FUNK(A : INTEGER) RETURN INTEGER;
PROCEDURE PROK(A : INTEGER; B : OUT INTEGER);
END PACK1;
PACKAGE PACK2 IS
FUNCTION FUNK(X : INTEGER) RETURN INTEGER;
PROCEDURE PROK(X : INTEGER; Y : OUT INTEGER);
END PACK2;
USE PACK1, PACK2;
VAR1, VAR2 : INTEGER;
PACKAGE BODY PACK1 IS
FUNCTION FUNK(A : INTEGER) RETURN INTEGER IS
BEGIN
IF EQUAL (A,A) THEN
RETURN (1);
ELSE
RETURN (0);
END IF;
END FUNK;
PROCEDURE PROK(A : INTEGER; B : OUT INTEGER) IS
BEGIN
IF EQUAL (A,A) THEN
B := 1;
ELSE
B := 0;
END IF;
END PROK;
END PACK1;
PACKAGE BODY PACK2 IS
FUNCTION FUNK(X : INTEGER) RETURN INTEGER IS
BEGIN
IF EQUAL (X,X) THEN
RETURN (2);
ELSE
RETURN (0);
END IF;
END FUNK;
PROCEDURE PROK(X : INTEGER; Y : OUT INTEGER) IS
BEGIN
IF EQUAL (X,X) THEN
Y := 2;
ELSE
Y := 0;
END IF;
END PROK;
END PACK2;
BEGIN
TEST ("C84005A", "CHECK THAT TWO POTENTIALLY VISIBLE HOMOGRAPHS " &
"OF A SUBPROGRAM IDENTIFIER CAN BE MADE " &
"DIRECTLY VISIBLE BY A USE CLAUSE, AND THAT " &
"WHEN DIFFERENT FORMAL PARAMETER NAMES ARE " &
"USED, THE SUBPROGRAMS ARE REFERENCED CORRECTLY");
IF FUNK(A => 3) /= IDENT_INT(1) THEN
FAILED("PACK1.FUNK RETURNS INCORRECT RESULT");
END IF;
IF FUNK(X => 3) /= IDENT_INT(2) THEN
FAILED("PACK2.FUNK RETURNS INCORRECT RESULT");
END IF;
PROK(A => 3, B => VAR1);
PROK(X => 3, Y => VAR2);
IF VAR1 /= IDENT_INT(1) THEN
FAILED("PACK1.PROK RETURNS INCORRECT RESULT");
END IF;
IF VAR2 /= IDENT_INT(2) THEN
FAILED("PACK2.PROK RETURNS INCORRECT RESULT");
END IF;
RESULT;
END C84005A;