view gcc/testsuite/ada/acats/tests/a/ac3106a.ada @ 111:04ced10e8804

gcc 7
author kono
date Fri, 27 Oct 2017 22:46:09 +0900
parents
children
line wrap: on
line source

-- 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;