1-- C48004B.ADA
2
3--                             Grant of Unlimited Rights
4--
5--     Under contracts F33600-87-D-0337, F33600-84-D-0280, MDA903-79-C-0687,
6--     F08630-91-C-0015, and DCA100-97-D-0025, the U.S. Government obtained
7--     unlimited rights in the software and documentation contained herein.
8--     Unlimited rights are defined in DFAR 252.227-7013(a)(19).  By making
9--     this public release, the Government intends to confer upon all
10--     recipients unlimited rights  equal to those held by the Government.
11--     These rights include rights to use, duplicate, release or disclose the
12--     released technical data and computer software in whole or in part, in
13--     any manner and for any purpose whatsoever, and to have or permit others
14--     to do so.
15--
16--                                    DISCLAIMER
17--
18--     ALL MATERIALS OR INFORMATION HEREIN RELEASED, MADE AVAILABLE OR
19--     DISCLOSED ARE AS IS.  THE GOVERNMENT MAKES NO EXPRESS OR IMPLIED
20--     WARRANTY AS TO ANY MATTER WHATSOEVER, INCLUDING THE CONDITIONS OF THE
21--     SOFTWARE, DOCUMENTATION OR OTHER INFORMATION RELEASED, MADE AVAILABLE
22--     OR DISCLOSED, OR THE OWNERSHIP, MERCHANTABILITY, OR FITNESS FOR A
23--     PARTICULAR PURPOSE OF SAID MATERIAL.
24--*
25-- CHECK THAT THE FORM "NEW T" IS PERMITTED IF T IS A CONSTRAINED
26-- RECORD, PRIVATE, OR LIMITED PRIVATE TYPE.
27
28-- RM  01/12/80
29-- JBG 03/03/83
30-- EG  07/05/84
31
32WITH REPORT;
33
34PROCEDURE C48004B IS
35
36     USE REPORT;
37
38BEGIN
39
40     TEST("C48004B","CHECK THAT THE FORM 'NEW T' IS PERMITTED IF " &
41                    "T IS A CONSTRAINED RECORD, PRIVATE, OR "      &
42                    "LIMITED PRIVATE TYPE");
43
44     DECLARE
45
46          TYPE  TB0(A , B : INTEGER )  IS
47               RECORD
48                    C : INTEGER := 7;
49               END RECORD;
50          SUBTYPE  TB  IS  TB0( 2 , 3 );
51          TYPE ATB IS ACCESS TB0;
52          VB : ATB;
53
54          TYPE  TBB0(  A , B : INTEGER := 5 )  IS
55               RECORD
56                    C : INTEGER := 6;
57               END RECORD;
58          SUBTYPE  TBB  IS  TBB0( 4 , 5 );
59          TYPE ATBB IS ACCESS TBB0;
60          VBB : ATBB;
61
62          PACKAGE  P  IS
63               TYPE   PRIV0( A , B : INTEGER )  IS PRIVATE;
64               TYPE  LPRIV0( A , B : INTEGER := 1 )  IS LIMITED PRIVATE;
65               FUNCTION FUN(LP : LPRIV0) RETURN INTEGER;
66          PRIVATE
67               TYPE  PRIV0( A , B : INTEGER )  IS
68                    RECORD
69                         Q : INTEGER;
70                    END RECORD;
71               TYPE  LPRIV0( A , B : INTEGER := 1 )  IS
72                    RECORD
73                         Q : INTEGER := 7;
74                    END RECORD;
75          END P;
76
77          USE P;
78
79          SUBTYPE  PRIV  IS  P.PRIV0( 12 , 13 );
80          TYPE  A_PRIV  IS  ACCESS P.PRIV0;
81          VP : A_PRIV;
82
83          TYPE  A_LPRIV  IS  ACCESS LPRIV0;
84          VLP : A_LPRIV;
85
86          TYPE LCR(A, B : INTEGER := 4) IS
87               RECORD
88                    C : P.LPRIV0;
89               END RECORD;
90          SUBTYPE SLCR IS LCR(1, 2);
91          TYPE A_SLCR IS ACCESS SLCR;
92          VSLCR : A_SLCR;
93
94          PACKAGE BODY P IS
95               FUNCTION FUN(LP : LPRIV0) RETURN INTEGER IS
96               BEGIN
97                    RETURN LP.Q;
98               END FUN;
99          END P;
100
101     BEGIN
102
103          VB  :=  NEW TB;
104          IF ( VB.A /= IDENT_INT(2)  OR
105               VB.B /= 3  OR
106               VB.C /= 7 )  THEN FAILED( "WRONG VALUES  -  B1" );
107          END IF;
108
109          VBB  :=  NEW TBB0;
110          IF ( VBB.A /= IDENT_INT(5)  OR
111               VBB.B /= 5  OR
112               VBB.C /= 6 )  THEN
113               FAILED( "WRONG VALUES  -  B2" );
114          END IF;
115
116          VP  :=  NEW PRIV;
117          IF ( VP.A /= IDENT_INT(12)  OR
118               VP.B /= 13 )  THEN
119               FAILED( "WRONG VALUES  -  B3" );
120          END IF;
121
122          VLP  :=  NEW LPRIV0;
123          IF ( VLP.A /= IDENT_INT(1)  OR
124               VLP.B /= 1 OR
125               P.FUN(VLP.ALL) /= IDENT_INT(7) )  THEN
126               FAILED( "WRONG VALUES  -  B4" );
127          END IF;
128
129          VSLCR := NEW SLCR;
130          IF ( VSLCR.A /= IDENT_INT(1) OR
131               VSLCR.B /= IDENT_INT(2) OR
132               P.FUN(VSLCR.C) /= IDENT_INT(7) ) THEN
133               FAILED ("WRONG VALUES - B5");
134          END IF;
135
136     END;
137
138     RESULT;
139
140END C48004B;
141