1-- C93001A.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 DECLARED TASK OBJECTS ARE NOT ACTIVATED BEFORE 26-- THE END OF THE DECLARATIVE PART. 27-- SUBTESTS ARE: 28-- (A) A SIMPLE TASK OBJECT, IN A BLOCK. 29-- (B) AN ARRAY OF TASK OBJECT, IN A FUNCTION. 30-- (C) A RECORD OF TASK OBJECT, IN A PACKAGE SPECIFICATION. 31-- (D) A RECORD OF ARRAY OF TASK OBJECT, IN A PACKAGE BODY. 32-- (E) AN ARRAY OF RECORD OF TASK OBJECT, IN A TASK BODY. 33 34-- THIS TEST ASSUMES THAT ACTIVATION IS A SEQUENTIAL STEP 35-- IN THE FLOW OF CONTROL OF THE PARENT (AS IS REQUIRED BY THE 36-- ADA RM). IF AN IMPLEMENTATION (ILLEGALLY) ACTIVATES A 37-- TASK IN PARALLEL WITH ITS PARENT, THIS TEST 38-- IS NOT GUARANTEED TO DETECT THE VIOLATION, DUE TO A 39-- RACE CONDITION. 40 41-- JRK 9/23/81 42-- SPS 11/1/82 43-- SPS 11/21/82 44-- R.WILLIAMS 10/8/86 ADDED CHECKS ON INITIALIZATIONS OF NON-TASK 45-- COMPONENTS OF RECORD TYPES. 46-- PWN 11/30/94 REMOVED PRAGMA PRIORITY INSTANCES FOR ADA 9X. 47 48WITH REPORT; USE REPORT; 49WITH SYSTEM; USE SYSTEM; 50PROCEDURE C93001A IS 51 52 GLOBAL : INTEGER; 53 54 FUNCTION SIDE_EFFECT (I : INTEGER) RETURN INTEGER IS 55 BEGIN 56 GLOBAL := IDENT_INT (I); 57 RETURN 0; 58 END SIDE_EFFECT; 59 60 TASK TYPE TT IS 61 ENTRY E; 62 END TT; 63 64 TASK BODY TT IS 65 I : INTEGER := SIDE_EFFECT (1); 66 BEGIN 67 NULL; 68 END TT; 69 70 71BEGIN 72 TEST ("C93001A", "CHECK THAT DECLARED TASK OBJECTS ARE NOT " & 73 "ACTIVATED BEFORE THE END OF THE DECLARATIVE " & 74 75 "PART"); 76 77 -------------------------------------------------- 78 79 GLOBAL := IDENT_INT (0); 80 81 DECLARE -- (A) 82 83 T : TT; 84 I : INTEGER := GLOBAL; 85 86 BEGIN -- (A) 87 88 IF I /= 0 THEN 89 FAILED ("A SIMPLE TASK OBJECT IN A BLOCK WAS " & 90 "ACTIVATED TOO SOON - (A)"); 91 END IF; 92 93 END; -- (A) 94 95 -------------------------------------------------- 96 97 GLOBAL := IDENT_INT (0); 98 99 DECLARE -- (B) 100 101 J : INTEGER; 102 103 FUNCTION F RETURN INTEGER IS 104 A : ARRAY (1..1) OF TT; 105 I : INTEGER := GLOBAL; 106 BEGIN 107 IF I /= 0 THEN 108 FAILED ("AN ARRAY OF TASK OBJECT IN A FUNCTION " & 109 "WAS ACTIVATED TOO SOON - (B)"); 110 END IF; 111 RETURN 0; 112 END F; 113 114 BEGIN -- (B) 115 116 J := F ; 117 118 END; -- (B) 119 120 -------------------------------------------------- 121 122 GLOBAL := IDENT_INT (0); 123 124 DECLARE -- (C) 125 126 PACKAGE P IS 127 128 TYPE REC IS 129 RECORD 130 T : TT; 131 N1 : INTEGER := GLOBAL; 132 END RECORD; 133 134 TYPE RT IS 135 RECORD 136 M : INTEGER := GLOBAL; 137 T : TT; 138 N : REC; 139 END RECORD; 140 R : RT; 141 I : INTEGER := GLOBAL; 142 END P; 143 144 PACKAGE Q IS 145 J : INTEGER; 146 PRIVATE 147 TYPE RT IS 148 RECORD 149 N : P.REC; 150 T : TT; 151 M : INTEGER := GLOBAL; 152 END RECORD; 153 R : RT; 154 END Q; 155 156 K : INTEGER := GLOBAL; 157 158 PACKAGE BODY Q IS 159 BEGIN 160 IF R.M /= 0 OR R.N.N1 /= 0 THEN 161 FAILED ( "NON-TASK COMPONENTS OF RECORD R NOT " & 162 "INITIALIZED BEFORE TASKS ACTIVATED " & 163 "- (C.1)" ); 164 END IF; 165 END Q; 166 167 BEGIN -- (C) 168 169 IF P.R.M /= 0 OR P.R.N.N1 /= 0 THEN 170 FAILED ( "NON-TASK COMPONENTS OF RECORDS NOT " & 171 "INITIALIZED BEFORE TASKS ACTIVATED " & 172 "- (C.2)" ); 173 END IF; 174 175 IF P.I /= 0 OR K /= 0 THEN 176 FAILED ("A RECORD OF TASK OBJECT IN A PACKAGE " & 177 "SPECIFICATION WAS ACTIVATED TOO SOON - (C)"); 178 END IF; 179 180 END; -- (C) 181 182 -------------------------------------------------- 183 184 GLOBAL := IDENT_INT (0); 185 186 DECLARE -- (D) 187 188 PACKAGE P IS 189 190 TYPE GRADE IS (GOOD, FAIR, POOR); 191 192 TYPE REC (G : GRADE) IS 193 RECORD 194 NULL; 195 END RECORD; 196 197 TYPE ACCR IS ACCESS REC; 198 TYPE ACCI IS ACCESS INTEGER; 199 200 TYPE ARR IS ARRAY (1..1) OF TT; 201 TYPE RAT IS 202 RECORD 203 M : ACCR := NEW REC (GRADE'VAL (GLOBAL)); 204 A : ARR; 205 N : ACCI := NEW INTEGER'(GLOBAL); 206 END RECORD; 207 RA1 : RAT; 208 PRIVATE 209 RA2 : RAT; 210 END P; 211 212 PACKAGE BODY P IS 213 RA3 : RAT; 214 I : INTEGER := GLOBAL; 215 BEGIN 216 IF RA1.M.G /= GOOD OR RA1.N.ALL /= 0 THEN 217 FAILED ( "NON-TASK COMPONENTS OF RECORD RA1 NOT " & 218 "INITIALIZED BEFORE TASKS ACTIVATED " & 219 "- (D)" ); 220 END IF; 221 222 IF RA2.M.G /= GOOD OR RA2.N.ALL /= 0 THEN 223 FAILED ( "NON-TASK COMPONENTS OF RECORD RA2 NOT " & 224 "INITIALIZED BEFORE TASKS ACTIVATED " & 225 "- (D)" ); 226 END IF; 227 228 IF RA3.M.G /= GOOD OR RA3.N.ALL /= 0 THEN 229 FAILED ( "NON-TASK COMPONENTS OF RECORD RA3 NOT " & 230 "INITIALIZED BEFORE TASKS ACTIVATED " & 231 "- (D)" ); 232 END IF; 233 234 IF I /= 0 THEN 235 FAILED ("A RECORD OF ARRAY OF TASK OBJECT IN A " & 236 "PACKAGE SPEC OR BODY WAS ACTIVATED " & 237 "TOO SOON - (D)"); 238 END IF; 239 END P; 240 241 BEGIN -- (D) 242 243 NULL; 244 245 END; -- (D) 246 247 -------------------------------------------------- 248 249 GLOBAL := IDENT_INT (0); 250 251 DECLARE -- (E) 252 253 TYPE REC IS 254 RECORD 255 B : BOOLEAN := BOOLEAN'VAL (GLOBAL); 256 T : TT; 257 C :CHARACTER :=CHARACTER'VAL (GLOBAL); 258 END RECORD; 259 260 TASK T IS 261 ENTRY E; 262 END T; 263 264 TASK BODY T IS 265 TYPE RT IS 266 RECORD 267 M : REC; 268 T : TT; 269 N : REC; 270 END RECORD; 271 AR : ARRAY (1..1) OF RT; 272 I : INTEGER := GLOBAL; 273 BEGIN 274 IF AR (1).M.B /= FALSE OR AR (1).M.C /= ASCII.NUL OR 275 AR (1).N.B /= FALSE OR AR (1).N.C /= ASCII.NUL THEN 276 FAILED ( "NON-TASK COMPONENTS OF RECORD RT NOT " & 277 "INITIALIZED BEFORE TASKS ACTIVATED " & 278 "- (E)" ); 279 END IF; 280 281 IF I /= 0 THEN 282 FAILED ("AN ARRAY OF RECORD OF TASK OBJECT IN A " & 283 "TASK BODY WAS ACTIVATED TOO SOON - (E)"); 284 END IF; 285 END T; 286 287 BEGIN -- (E) 288 289 NULL; 290 291 END; -- (E) 292 293 -------------------------------------------------- 294 295 RESULT; 296END C93001A; 297