1-- C74206A.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 IF A COMPOSITE TYPE IS DECLARED IN THE PACKAGE AS A
26-- PRIVATE TYPE AND CONTAINS A COMPONENT OF THE PRIVATE TYPE, OPERATIONS
27-- OF THE COMPOSITE TYPE WHICH DO NOT DEPEND ON CHARACTERISTICS OF THE
28-- PRIVATE TYPE ARE AVAILABLE AFTER THE FULL DECLARATION OF THE PRIVATE
29-- TYPE, BUT BEFORE THE EARLIEST PLACE WITHIN THE IMMEDIATE SCOPE OF THE
30-- DECLARATION OF THE COMPOSITE TYPE THAT IS AFTER THE FULL DECLARATION
31-- OF THE PRIVATE TYPE.  IN PARTICULAR, CHECK FOR THE FOLLOWING :
32
33--   'FIRST, 'LAST, 'RANGE, AND 'LENGTH FOR ARRAY TYPES
34--   SELECTED COMPONENTS FOR DISCRIMINANTS AND COMPONENTS OF RECORDS
35--   INDEXED COMPONENTS AND SLICES FOR ARRAYS
36
37-- DSJ 5/5/83
38-- JBG 3/8/84
39
40WITH REPORT;
41PROCEDURE C74206A IS
42
43     USE REPORT;
44
45BEGIN
46
47     TEST("C74206A", "CHECK THAT ADDITIONAL OPERATIONS FOR "
48                   & "COMPOSITE TYPES OF PRIVATE TYPES ARE "
49                   & "AVAILABLE AT THE EARLIEST PLACE AFTER THE "
50                   & "FULL DECLARATION OF THE PRIVATE TYPE EVEN "
51                   & "IF BEFORE THE EARLIEST PLACE WITHIN THE "
52                   & "IMMEDIATE SCOPE OF THE COMPOSITE TYPE");
53
54     DECLARE
55
56          PACKAGE PACK1 IS
57               TYPE P1  IS PRIVATE;
58               TYPE LP1 IS LIMITED PRIVATE;
59
60               PACKAGE PACK_LP IS
61                    TYPE LP_ARR IS ARRAY (1 .. 2) OF LP1;
62                    TYPE LP_REC (D : INTEGER) IS
63                         RECORD
64                              C1, C2 : LP1;
65                         END RECORD;
66               END PACK_LP;
67
68               PACKAGE PACK2 IS
69                    TYPE ARR IS ARRAY ( 1 .. 2 ) OF P1;
70                    TYPE REC (D : INTEGER) IS
71                         RECORD
72                              C1, C2 : P1;
73                         END RECORD;
74               END PACK2;
75          PRIVATE
76               TYPE P1  IS NEW BOOLEAN;
77               TYPE LP1 IS NEW BOOLEAN;
78          END PACK1;
79
80          PACKAGE BODY PACK1 IS
81
82               USE PACK_LP;
83               USE PACK2;
84
85               A1 : ARR;
86               L1 : LP_ARR;
87
88               N1 : INTEGER := ARR'FIRST;           -- LEGAL
89               N2 : INTEGER := ARR'LAST;            -- LEGAL
90               N3 : INTEGER := A1'LENGTH;           -- LEGAL
91               N4 : INTEGER := LP_ARR'FIRST;        -- LEGAL
92               N5 : INTEGER := LP_ARR'LAST;         -- LEGAL
93               N6 : INTEGER := L1'LENGTH;           -- LEGAL
94               B1 : BOOLEAN := 1 IN ARR'RANGE;      -- LEGAL
95               B2 : BOOLEAN := 5 IN LP_ARR'RANGE;   -- LEGAL
96
97               N7 : INTEGER := A1(1)'SIZE;          -- LEGAL: A1(1)
98               N8 : INTEGER := L1(2)'SIZE;          -- LEGAL: L1(2)
99
100               R1 : REC(1);
101               Q1 : LP_REC(1);
102
103               K1 : INTEGER := R1.D'SIZE;           -- LEGAL: R1.D
104               K2 : INTEGER := R1.C1'SIZE;          -- LEGAL: R1.C1
105               K3 : INTEGER := Q1.D'SIZE;           -- LEGAL: Q1.D
106               K4 : INTEGER := Q1.C2'SIZE;          -- LEGAL: Q1.C2
107
108          BEGIN
109
110               IF N1 /= 1 OR N4 /= 1 THEN
111                    FAILED ("WRONG VALUE FOR 'FIRST");
112               END IF;
113
114               IF N2 /= 2 OR N5 /= 2 THEN
115                    FAILED ("WRONG VALUE FOR 'LAST");
116               END IF;
117
118               IF N3 /= 2 OR N6 /= 2 THEN
119                    FAILED ("WRONG VALUE FOR 'LENGTH");
120               END IF;
121
122               IF B1 /= TRUE OR B2 /= FALSE THEN
123                    FAILED ("INCORRECT RANGE TEST");
124               END IF;
125
126               IF N7 /= N8 THEN
127                    FAILED ("INCORRECT INDEXED COMPONENTS");
128               END IF;
129
130               IF K1 /= K3 OR K2 /= K4 THEN
131                    FAILED ("INCORRECT COMPONENT SELECTION");
132               END IF;
133
134          END PACK1;
135
136     BEGIN
137
138          NULL;
139
140     END;
141
142     RESULT;
143
144END C74206A;
145