blob: 1b7099e85c8493ded5829a5b480cc87e342b1b33 [file] [log] [blame]
-- AC3106A.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.
--*
-- OBJECTIVE:
-- CHECK THAT AN ACTUAL GENERIC IN OUT PARAMETER CAN BE:
-- A) ANY SUBCOMPONENT THAT DOES NOT DEPEND ON A DISCRIMINANT,
-- EVEN IF THE ENCLOSING VARIABLE IS UNCONSTRAINED;
-- B) ANY SUBCOMPONENT OF AN UNCONSTAINED VARIABLE OF A
-- RECORD TYPE IF THE DISCRIMINANTS OF THE
-- VARIABLE DO NOT HAVE DEFAULTS AND THE VARIABLE IS NOT
-- A GENERIC FORMAL IN OUT PARAMETER;
-- C) ANY COMPONENT OF AN OBJECT DESIGNATED BY AN ACCESS
-- VALUE.
-- HISTORY:
-- RJW 11/07/88 CREATED ORIGINAL TEST.
WITH REPORT; USE REPORT;
PROCEDURE AC3106A IS
SUBTYPE INT IS INTEGER RANGE 0 .. 10;
TYPE REC (D : INT := 0) IS RECORD
A : INTEGER := 5;
CASE D IS
WHEN OTHERS =>
V : INTEGER := 5;
END CASE;
END RECORD;
TYPE AR_REC IS ARRAY (1 .. 10) OF REC;
TYPE R_REC IS RECORD
E : REC;
END RECORD;
TYPE A_STRING IS ACCESS STRING;
TYPE A_REC IS ACCESS REC;
TYPE A_AR_REC IS ACCESS AR_REC;
TYPE A_R_REC IS ACCESS R_REC;
TYPE DIS (L : INT := 1) IS RECORD
S : STRING (1 .. L) := "A";
R : REC (L);
AS : A_STRING (1 .. L) := NEW STRING (1 .. L);
AR : A_REC (L) := NEW REC (1);
RC : REC (3);
ARU : A_REC := NEW REC;
V_AR : AR_REC;
V_R : R_REC;
AC_AR : A_AR_REC := NEW AR_REC;
AC_R : A_R_REC := NEW R_REC;
END RECORD;
TYPE A_DIS IS ACCESS DIS;
AD : A_DIS := NEW DIS;
TYPE DIS2 (L : INT) IS RECORD
S : STRING (1 .. L);
R : REC (L);
AS : A_STRING (1 .. L);
AR : A_REC (L);
END RECORD;
X : DIS;
SUBTYPE REC3 IS REC (3);
GENERIC
GREC3 : IN OUT REC3;
PACKAGE PREC3 IS END PREC3;
SUBTYPE REC0 IS REC (0);
GENERIC
GREC0 : IN OUT REC0;
PACKAGE PREC0 IS END PREC0;
GENERIC
GINT : IN OUT INTEGER;
PACKAGE PINT IS END PINT;
GENERIC
GA_REC : IN OUT A_REC;
PACKAGE PA_REC IS END PA_REC;
GENERIC
GAR_REC : IN OUT AR_REC;
PACKAGE PAR_REC IS END PAR_REC;
GENERIC
GR_REC : IN OUT R_REC;
PACKAGE PR_REC IS END PR_REC;
GENERIC
GA_AR_REC : IN OUT A_AR_REC;
PACKAGE PA_AR_REC IS END PA_AR_REC;
GENERIC
GA_R_REC : IN OUT A_R_REC;
PACKAGE PA_R_REC IS END PA_R_REC;
TYPE BUFFER (SIZE : INT) IS RECORD
POS : NATURAL := 0;
VAL : STRING (1 .. SIZE);
END RECORD;
SUBTYPE BUFF_5 IS BUFFER (5);
GENERIC
Y : IN OUT CHARACTER;
PACKAGE P_CHAR IS END P_CHAR;
SUBTYPE STRING5 IS STRING (1 .. 5);
GENERIC
GSTRING : STRING5;
PACKAGE P_STRING IS END P_STRING;
GENERIC
GA_STRING : A_STRING;
PACKAGE P_A_STRING IS END P_A_STRING;
GENERIC
X : IN OUT BUFF_5;
PACKAGE P_BUFF IS
RX : BUFF_5 RENAMES X;
END P_BUFF;
Z : BUFFER (1) := (SIZE => 1, POS =>82, VAL =>"R");
BEGIN
TEST ("AC3106A", "CHECK THE PERMITTED FORMS OF AN ACTUAL " &
"GENERIC IN OUT PARAMETER");
DECLARE -- A)
PACKAGE NPINT3 IS NEW PINT (X.RC.A);
PACKAGE NPINT4 IS NEW PINT (X.RC.V);
PACKAGE NPREC3 IS NEW PREC3 (X.RC);
PACKAGE NPA_REC IS NEW PA_REC (X.ARU);
PACKAGE NPINT5 IS NEW PINT (X.ARU.A);
PACKAGE NPINT6 IS NEW PINT (X.ARU.V);
PACKAGE NPAR_REC IS NEW PAR_REC (X.V_AR);
PACKAGE NPREC01 IS NEW PREC0 (X.V_AR (1));
PACKAGE NPR_REC IS NEW PR_REC (X.V_R);
PACKAGE NPREC02 IS NEW PREC0 (X.V_R.E);
PACKAGE NPINT7 IS NEW PINT (X.V_R.E.A);
PACKAGE NP_BUFF IS NEW P_BUFF (Z);
USE NP_BUFF;
PACKAGE NP_CHAR3 IS NEW P_CHAR (RX.VAL (1));
PROCEDURE PROC (X : IN OUT BUFFER) IS
PACKAGE NP_CHAR4 IS NEW P_CHAR (X.VAL (1));
BEGIN
NULL;
END;
BEGIN
NULL;
END; -- A)
DECLARE -- B)
PROCEDURE PROC (Y : IN OUT DIS2) IS
PACKAGE NP_STRING IS NEW P_STRING (Y.S);
PACKAGE NP_CHAR IS NEW P_CHAR (Y.S (1));
PACKAGE NP_A_STRING IS NEW P_A_STRING (Y.AS);
PACKAGE NP_CHAR2 IS NEW P_CHAR (Y.AS (1));
PACKAGE NPINT3 IS NEW PINT (Y.R.A);
PACKAGE NPINT4 IS NEW PINT (Y.R.V);
PACKAGE NPREC3 IS NEW PREC3 (Y.R);
PACKAGE NPA_REC IS NEW PA_REC (Y.AR);
PACKAGE NPINT5 IS NEW PINT (Y.AR.A);
PACKAGE NPINT6 IS NEW PINT (Y.AR.V);
BEGIN
NULL;
END;
BEGIN
NULL;
END; -- B)
DECLARE -- C)
PACKAGE NP_CHAR IS NEW P_CHAR (AD.S (1));
PACKAGE NP_A_STRING IS NEW P_A_STRING (AD.AS);
PACKAGE NP_CHAR2 IS NEW P_CHAR (AD.AS (1));
PACKAGE NPINT3 IS NEW PINT (AD.R.A);
PACKAGE NPINT4 IS NEW PINT (AD.R.V);
PACKAGE NPREC3 IS NEW PREC3 (AD.R);
PACKAGE NPA_REC IS NEW PA_REC (AD.AR);
PACKAGE NPINT5 IS NEW PINT (AD.AR.A);
PACKAGE NPINT6 IS NEW PINT (AD.AR.V);
BEGIN
NULL;
END; -- C)
RESULT;
END AC3106A;