1-- C41306C.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  F  IS A FUNCTION RETURNING AN ACCESS VALUE DESIGNATING
26--     A TASK OF A TYPE HAVING
27--     AN ENTRY  E ,  AN ENTRY CALL OF THE FORM
28--
29--                           F.E
30--
31--     IS PERMITTED.
32
33
34-- RM  02/02/82
35-- ABW 07/16/82
36-- EG  05/28/85
37
38WITH REPORT; USE REPORT;
39
40PROCEDURE C41306C IS
41
42BEGIN
43
44     TEST ( "C41306C" , "CHECK THAT IF  F  IS A FUNCTION RETURNING" &
45                        " AN ACCESS VALUE DESIGNATING"              &
46                        " A TASK OF A TYPE HAVING AN ENTRY  E ,  AN" &
47                        " ENTRY CALL OF THE FORM  F.E  IS PERMITTED" );
48
49
50     -------------------------------------------------------------------
51
52     DECLARE
53
54          X  : INTEGER  :=  0 ;
55
56          TASK TYPE  T  IS
57               ENTRY  E ;
58          END  T ;
59
60          TYPE  A_T  IS  ACCESS T ;
61
62          TASK BODY  T  IS
63          BEGIN
64               ACCEPT  E  DO
65                    X := IDENT_INT(17) ;
66               END  E ;
67          END  T ;
68
69          FUNCTION  F1  RETURN  A_T  IS
70               A_T_VAR1 : A_T := NEW T ;
71          BEGIN
72               RETURN  A_T_VAR1 ;
73          END  F1 ;
74
75          FUNCTION F2 (A, B : BOOLEAN) RETURN A_T IS
76               A_T_VAR2 : A_T := NEW T;
77          BEGIN
78               IF A AND B THEN
79                    NULL;
80               END IF;
81               RETURN A_T_VAR2;
82          END F2;
83
84     BEGIN
85
86          F1.E ;      --  THE ELABOR. OF  F1 (BODY)  ACTIVATES THE TASK,
87                      --      WHICH  PROCEEDS TO WAIT FOR ENTRY  E  TO
88                      --      BE CALLED.
89
90                      --  THE CALLED ENTRY CAUSES  X  TO BE SET TO  17 .
91
92          IF  X /= 17
93          THEN
94               FAILED( "WRONG VALUE FOR GLOBAL VARIABLE   (1)" );
95          END IF;
96
97          X := 0;
98          F2(TRUE, TRUE).E;   -- THE ELABORATION OF F2 (BODY) ACTIVATES
99                              -- THE TASK, WHICH PROCEEDS TO WAIT FOR
100                              -- ENTRY E TO BE CALLED.
101
102                              -- THE CALLED ENTRY CAUSES X TO BE SET TO
103                              -- 17.
104
105          IF X /= 17 THEN
106               FAILED ("WRONG VALUE FOR GLOBAL VARIABLE (2)");
107          END IF;
108
109     END ;
110
111     -------------------------------------------------------------------
112
113     DECLARE
114
115          X  : INTEGER  :=  0 ;
116
117          TASK TYPE  T  IS
118               ENTRY  E ;
119          END  T ;
120
121          TYPE  A_T  IS  ACCESS T ;
122
123          TASK BODY  T  IS
124          BEGIN
125               ACCEPT  E  DO
126                    X := IDENT_INT(17) ;
127               END  E ;
128          END  T ;
129
130          FUNCTION  F3  RETURN  A_T  IS
131          BEGIN
132               RETURN  NEW T ;
133          END  F3;
134
135          FUNCTION F4 (C, D : BOOLEAN) RETURN A_T IS
136          BEGIN
137               IF C AND D THEN
138                    NULL;
139               END IF;
140               RETURN NEW T;
141          END F4;
142
143     BEGIN
144
145          F3.E ;      --  THE ELABOR. OF  F3 (BODY)  ACTIVATES THE TASK,
146                      --      WHICH  PROCEEDS TO WAIT FOR ENTRY  E  TO
147                      --      BE CALLED.
148
149                      --  THE CALLED ENTRY CAUSES  X  TO BE SET TO  17 .
150
151          IF  X /= 17
152          THEN
153               FAILED( "WRONG VALUE FOR GLOBAL VARIABLE   (3)" );
154          END IF;
155
156          X := 0;
157          F4(TRUE, TRUE).E;   -- THE ELABORATION OF F4 (BODY) ACTIVATES
158                              -- THE TASK WHICH PROCEEDS TO WAIT FOR
159                              -- ENTRY E TO BE CALLED.
160
161                              -- THE CALLED ENTRY CAUSES X TO BE SET TO
162                              -- 17.
163
164          IF X /= 17 THEN
165               FAILED ("WRONG VALUE FOR GLOBAL VARIABLE (4)");
166          END IF;
167
168     END ;
169
170     -------------------------------------------------------------------
171
172     DECLARE
173
174          X  : INTEGER  :=  0 ;
175
176          TASK TYPE  T  IS
177               ENTRY  E ;
178          END  T ;
179
180          TYPE  A_T  IS  ACCESS T ;
181
182          TASK BODY  T  IS
183          BEGIN
184               ACCEPT  E  DO
185                    X := IDENT_INT(17) ;
186               END  E ;
187          END  T ;
188
189     BEGIN
190
191          DECLARE
192
193               F3 : A_T := NEW T;
194
195          BEGIN
196
197               F3.E;
198
199                      --  THE CALLED ENTRY CAUSES  X  TO BE SET TO  17 .
200
201               IF  X /= 17 THEN
202                    FAILED( "WRONG VALUE FOR GLOBAL VARIABLE   (5)" );
203               END IF;
204
205          END;
206
207     END ;
208
209     -------------------------------------------------------------------
210
211
212     RESULT;
213
214
215END C41306C;
216