1-- C51004A.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 LABELS, LOOP IDENTIFIERS, AND BLOCK IDENTIFIERS ARE 26-- IMPLICITLY DECLARED AT THE END OF THE DECLARATIVE PART. PRIOR TO 27-- THE END OF THE DECLARATIVE PART, THEY MAY BE USED TO REFERENCE 28-- ENTITIES IN AN ENCLOSING SCOPE. SUBTESTS ARE: 29-- (A) BLOCK. 30-- (B) PROCEDURE BODY. 31-- (C) PACKAGE BODY. 32-- (D) GENERIC FUNCTION BODY. 33-- (E) GENERIC PACKAGE BODY. 34-- (F) TASK BODY. 35 36-- CPP 6/1/84 37 38WITH REPORT; USE REPORT; 39PROCEDURE C51004A IS 40 41BEGIN 42 TEST("C51004A", "CHECK THAT LABELS, LOOP IDENTIFIERS, AND BLOCK " & 43 "IDENTIFIERS MAY BE USED PRIOR TO THEIR IMPLICIT " & 44 "DECLARATION"); 45 46OUTER: DECLARE 47 48 TYPE IDN1 IS NEW INTEGER; 49 IDN2 : CONSTANT INTEGER := 2; 50 TYPE IDN3 IS ACCESS INTEGER; 51 52 BEGIN -- OUTER 53 54 ----------------------------------------------- 55 56 A : DECLARE 57 58 A1 : IDN1; 59 A2 : CONSTANT INTEGER := IDN2; 60 A3 : IDN3; 61 62 TEMP : INTEGER; 63 64 BEGIN -- A 65 66 <<IDN1>> TEMP := 0; 67 68 IDN2 : FOR I IN 1..1 LOOP 69 TEMP := A2; 70 END LOOP IDN2; 71 72 IDN3 : BEGIN 73 NULL; 74 END IDN3; 75 76 END A; 77 78 ----------------------------------------------- 79 80 B : DECLARE 81 82 PROCEDURE P (TEMP : OUT INTEGER) IS 83 84 B1 : IDN1; 85 B2 : CONSTANT INTEGER := IDN2 + 2; 86 B3 : IDN3; 87 88 BEGIN -- P 89 90 <<L>> <<IDN1>> TEMP := 0; 91 92 IDN2 : WHILE B2 < 0 LOOP 93 TEMP := 0; 94 END LOOP IDN2; 95 96 IDN3 : DECLARE 97 BEGIN 98 NULL; 99 END IDN3; 100 101 END P; 102 103 BEGIN -- B 104 NULL; 105 END B; 106 107 ----------------------------------------------- 108 109 C : DECLARE 110 111 PACKAGE PKG IS 112 END PKG; 113 114 PACKAGE BODY PKG IS 115 116 C1 : IDN1; 117 C2 : CONSTANT INTEGER := 2 * IDN2; 118 C3 : IDN3; 119 120 TEMP : INTEGER; 121 122 BEGIN 123 124 <<IDN1>> TEMP := 0; 125 126 IDN2 : LOOP 127 TEMP := 0; 128 EXIT; 129 END LOOP IDN2; 130 131 IDN3 : BEGIN 132 NULL; 133 END IDN3; 134 135 END PKG; 136 137 BEGIN -- C 138 NULL; 139 END C; 140 141 --------------------------------------------------- 142 143 D : DECLARE 144 145 GENERIC 146 TYPE Q IS (<>); 147 FUNCTION FN RETURN INTEGER; 148 149 FUNCTION FN RETURN INTEGER IS 150 151 D1 : IDN1; 152 D2 : CONSTANT INTEGER := IDN2; 153 D3 : IDN3; 154 155 TEMP : INTEGER; 156 157 BEGIN 158 159 <<IDN1>> TEMP := 0; 160 161 IDN2 : FOR I IN 1..5 LOOP 162 TEMP := 0; 163 END LOOP IDN2; 164 165 IDN3 : BEGIN 166 NULL; 167 END IDN3; 168 169 RETURN TEMP; 170 171 END FN; 172 173 BEGIN 174 NULL; 175 END D; 176 177 ----------------------------------------------- 178 179 E : DECLARE 180 181 GENERIC 182 183 TYPE ELEMENT IS (<>); 184 ITEM : ELEMENT; 185 186 PACKAGE PKG IS 187 END PKG; 188 189 PACKAGE BODY PKG IS 190 191 E1 : IDN1 RANGE 1..5; 192 E2 : CONSTANT INTEGER := IDN2; 193 E3 : IDN3; 194 195 TEMP : ELEMENT; 196 197 BEGIN 198 199 <<IDN1>> <<L>> TEMP := ITEM; 200 201 IDN2 : WHILE TEMP /= ITEM LOOP 202 TEMP := ITEM; 203 END LOOP IDN2; 204 205 IDN3 : DECLARE 206 BEGIN 207 NULL; 208 END IDN3; 209 210 END PKG; 211 212 BEGIN -- E 213 214 DECLARE 215 PACKAGE P1 IS NEW PKG (INTEGER, 0); 216 BEGIN 217 NULL; 218 END; 219 220 END E; 221 222 ----------------------------------------------- 223 224 F : DECLARE 225 226 TASK T; 227 228 TASK BODY T IS 229 230 F1 : IDN1 RANGE -4..2; 231 F2 : CONSTANT INTEGER := IDN2; 232 F3 : IDN3; 233 234 TEMP : INTEGER; 235 236 BEGIN 237 238 <<IDN1>> TEMP := 1; 239 240 IDN2 : LOOP 241 TEMP := TEMP + 1; 242 EXIT; 243 END LOOP IDN2; 244 245 IDN3 : DECLARE 246 BEGIN 247 TEMP := TEMP + 1; 248 END IDN3; 249 250 END T; 251 252 BEGIN -- F 253 NULL; 254 END F; 255 256 ----------------------------------------------- 257 258 END OUTER; 259 260 RESULT; 261END C51004A; 262