annotate gcc/testsuite/ada/acats/tests/cb/cb20001.a @ 111:04ced10e8804

gcc 7
author kono
date Fri, 27 Oct 2017 22:46:09 +0900
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
111
kono
parents:
diff changeset
1 -- CB20001.A
kono
parents:
diff changeset
2 --
kono
parents:
diff changeset
3 -- Grant of Unlimited Rights
kono
parents:
diff changeset
4 --
kono
parents:
diff changeset
5 -- Under contracts F33600-87-D-0337, F33600-84-D-0280, MDA903-79-C-0687,
kono
parents:
diff changeset
6 -- F08630-91-C-0015, and DCA100-97-D-0025, the U.S. Government obtained
kono
parents:
diff changeset
7 -- unlimited rights in the software and documentation contained herein.
kono
parents:
diff changeset
8 -- Unlimited rights are defined in DFAR 252.227-7013(a)(19). By making
kono
parents:
diff changeset
9 -- this public release, the Government intends to confer upon all
kono
parents:
diff changeset
10 -- recipients unlimited rights equal to those held by the Government.
kono
parents:
diff changeset
11 -- These rights include rights to use, duplicate, release or disclose the
kono
parents:
diff changeset
12 -- released technical data and computer software in whole or in part, in
kono
parents:
diff changeset
13 -- any manner and for any purpose whatsoever, and to have or permit others
kono
parents:
diff changeset
14 -- to do so.
kono
parents:
diff changeset
15 --
kono
parents:
diff changeset
16 -- DISCLAIMER
kono
parents:
diff changeset
17 --
kono
parents:
diff changeset
18 -- ALL MATERIALS OR INFORMATION HEREIN RELEASED, MADE AVAILABLE OR
kono
parents:
diff changeset
19 -- DISCLOSED ARE AS IS. THE GOVERNMENT MAKES NO EXPRESS OR IMPLIED
kono
parents:
diff changeset
20 -- WARRANTY AS TO ANY MATTER WHATSOEVER, INCLUDING THE CONDITIONS OF THE
kono
parents:
diff changeset
21 -- SOFTWARE, DOCUMENTATION OR OTHER INFORMATION RELEASED, MADE AVAILABLE
kono
parents:
diff changeset
22 -- OR DISCLOSED, OR THE OWNERSHIP, MERCHANTABILITY, OR FITNESS FOR A
kono
parents:
diff changeset
23 -- PARTICULAR PURPOSE OF SAID MATERIAL.
kono
parents:
diff changeset
24 --*
kono
parents:
diff changeset
25 --
kono
parents:
diff changeset
26 -- OBJECTIVE:
kono
parents:
diff changeset
27 -- Check that exceptions can be handled in accept bodies, and that a
kono
parents:
diff changeset
28 -- task object that has an exception handled in an accept body is still
kono
parents:
diff changeset
29 -- viable for future use.
kono
parents:
diff changeset
30 --
kono
parents:
diff changeset
31 -- TEST DESCRIPTION:
kono
parents:
diff changeset
32 -- Declare a task that has exception handlers within an accept
kono
parents:
diff changeset
33 -- statement in the task body. Declare a task object, and make entry
kono
parents:
diff changeset
34 -- calls with data that will cause various exceptions to be raised
kono
parents:
diff changeset
35 -- by the accept statement. Ensure that the exceptions are:
kono
parents:
diff changeset
36 -- 1) raised and handled locally in the accept body
kono
parents:
diff changeset
37 -- 2) raised in the accept body and handled/reraised to be handled
kono
parents:
diff changeset
38 -- by the task body
kono
parents:
diff changeset
39 -- 3) raised in the accept body and propagated to the calling
kono
parents:
diff changeset
40 -- procedure.
kono
parents:
diff changeset
41 --
kono
parents:
diff changeset
42 --
kono
parents:
diff changeset
43 -- CHANGE HISTORY:
kono
parents:
diff changeset
44 -- 06 Dec 94 SAIC ACVC 2.0
kono
parents:
diff changeset
45 --
kono
parents:
diff changeset
46 --!
kono
parents:
diff changeset
47
kono
parents:
diff changeset
48 with Report;
kono
parents:
diff changeset
49
kono
parents:
diff changeset
50 package CB20001_0 is
kono
parents:
diff changeset
51
kono
parents:
diff changeset
52 Incorrect_Data,
kono
parents:
diff changeset
53 Location_Error,
kono
parents:
diff changeset
54 Off_Screen_Data : exception;
kono
parents:
diff changeset
55
kono
parents:
diff changeset
56 TC_Handled_In_Accept,
kono
parents:
diff changeset
57 TC_Reraised_In_Accept,
kono
parents:
diff changeset
58 TC_Handled_In_Task_Block,
kono
parents:
diff changeset
59 TC_Handled_In_Caller : boolean := False;
kono
parents:
diff changeset
60
kono
parents:
diff changeset
61 type Location_Type is range 0 .. 2000;
kono
parents:
diff changeset
62
kono
parents:
diff changeset
63 task type Submarine_Type is
kono
parents:
diff changeset
64 entry Contact (Location : in Location_Type);
kono
parents:
diff changeset
65 end Submarine_Type;
kono
parents:
diff changeset
66
kono
parents:
diff changeset
67 Current_Position : Location_Type := 0;
kono
parents:
diff changeset
68
kono
parents:
diff changeset
69 end CB20001_0;
kono
parents:
diff changeset
70
kono
parents:
diff changeset
71
kono
parents:
diff changeset
72 --=================================================================--
kono
parents:
diff changeset
73
kono
parents:
diff changeset
74
kono
parents:
diff changeset
75 package body CB20001_0 is
kono
parents:
diff changeset
76
kono
parents:
diff changeset
77
kono
parents:
diff changeset
78 task body Submarine_Type is
kono
parents:
diff changeset
79 begin
kono
parents:
diff changeset
80 loop
kono
parents:
diff changeset
81
kono
parents:
diff changeset
82 Task_Block:
kono
parents:
diff changeset
83 begin
kono
parents:
diff changeset
84 select
kono
parents:
diff changeset
85 accept Contact (Location : in Location_Type) do
kono
parents:
diff changeset
86 if Location > 1000 then
kono
parents:
diff changeset
87 raise Off_Screen_Data;
kono
parents:
diff changeset
88 elsif (Location > 500) and (Location <= 1000) then
kono
parents:
diff changeset
89 raise Location_Error;
kono
parents:
diff changeset
90 elsif (Location > 100) and (Location <= 500) then
kono
parents:
diff changeset
91 raise Incorrect_Data;
kono
parents:
diff changeset
92 else
kono
parents:
diff changeset
93 Current_Position := Location;
kono
parents:
diff changeset
94 end if;
kono
parents:
diff changeset
95 exception
kono
parents:
diff changeset
96 when Off_Screen_Data =>
kono
parents:
diff changeset
97 TC_Handled_In_Accept := True;
kono
parents:
diff changeset
98 when Location_Error =>
kono
parents:
diff changeset
99 TC_Reraised_In_Accept := True;
kono
parents:
diff changeset
100 raise; -- Reraise the Location_Error exception
kono
parents:
diff changeset
101 -- in the task block.
kono
parents:
diff changeset
102 end Contact;
kono
parents:
diff changeset
103 or
kono
parents:
diff changeset
104 terminate;
kono
parents:
diff changeset
105 end select;
kono
parents:
diff changeset
106
kono
parents:
diff changeset
107 exception
kono
parents:
diff changeset
108
kono
parents:
diff changeset
109 when Off_Screen_Data =>
kono
parents:
diff changeset
110 TC_Handled_In_Accept := False;
kono
parents:
diff changeset
111 Report.Failed ("Off_Screen_Data exception " &
kono
parents:
diff changeset
112 "improperly handled in task block");
kono
parents:
diff changeset
113
kono
parents:
diff changeset
114 when Location_Error =>
kono
parents:
diff changeset
115 TC_Handled_In_Task_Block := True;
kono
parents:
diff changeset
116 end Task_Block;
kono
parents:
diff changeset
117
kono
parents:
diff changeset
118 end loop;
kono
parents:
diff changeset
119
kono
parents:
diff changeset
120 exception
kono
parents:
diff changeset
121
kono
parents:
diff changeset
122 when Location_Error | Off_Screen_Data =>
kono
parents:
diff changeset
123 TC_Handled_In_Accept := False;
kono
parents:
diff changeset
124 TC_Handled_In_Task_Block := False;
kono
parents:
diff changeset
125 Report.Failed ("Exception improperly propagated out to task body");
kono
parents:
diff changeset
126 when others =>
kono
parents:
diff changeset
127 null;
kono
parents:
diff changeset
128 end Submarine_Type;
kono
parents:
diff changeset
129
kono
parents:
diff changeset
130 end CB20001_0;
kono
parents:
diff changeset
131
kono
parents:
diff changeset
132
kono
parents:
diff changeset
133 --=================================================================--
kono
parents:
diff changeset
134
kono
parents:
diff changeset
135
kono
parents:
diff changeset
136 with CB20001_0;
kono
parents:
diff changeset
137 with Report;
kono
parents:
diff changeset
138 with ImpDef;
kono
parents:
diff changeset
139
kono
parents:
diff changeset
140 procedure CB20001 is
kono
parents:
diff changeset
141
kono
parents:
diff changeset
142 package Submarine_Tracking renames CB20001_0;
kono
parents:
diff changeset
143
kono
parents:
diff changeset
144 Trident : Submarine_Tracking.Submarine_Type; -- Declare task
kono
parents:
diff changeset
145 Sonar_Contact : Submarine_Tracking.Location_Type;
kono
parents:
diff changeset
146
kono
parents:
diff changeset
147 TC_LEB_Error,
kono
parents:
diff changeset
148 TC_Main_Handler_Used : Boolean := False;
kono
parents:
diff changeset
149
kono
parents:
diff changeset
150 begin
kono
parents:
diff changeset
151
kono
parents:
diff changeset
152 Report.Test ("CB20001", "Check that exceptions can be handled " &
kono
parents:
diff changeset
153 "in accept bodies");
kono
parents:
diff changeset
154
kono
parents:
diff changeset
155
kono
parents:
diff changeset
156 Off_Screen_Block:
kono
parents:
diff changeset
157 begin
kono
parents:
diff changeset
158 Sonar_Contact := 1500;
kono
parents:
diff changeset
159 Trident.Contact (Sonar_Contact); -- Cause Off_Screen_Data exception
kono
parents:
diff changeset
160 -- to be raised and handled in a task
kono
parents:
diff changeset
161 -- accept body.
kono
parents:
diff changeset
162 exception
kono
parents:
diff changeset
163 when Submarine_Tracking.Off_Screen_Data =>
kono
parents:
diff changeset
164 TC_Main_Handler_Used := True;
kono
parents:
diff changeset
165 Report.Failed ("Off_Screen_Data exception improperly handled " &
kono
parents:
diff changeset
166 "in calling procedure");
kono
parents:
diff changeset
167 when others =>
kono
parents:
diff changeset
168 Report.Failed ("Exception handled unexpectedly in " &
kono
parents:
diff changeset
169 "Off_Screen_Block");
kono
parents:
diff changeset
170 end Off_Screen_Block;
kono
parents:
diff changeset
171
kono
parents:
diff changeset
172
kono
parents:
diff changeset
173 Location_Error_Block:
kono
parents:
diff changeset
174 begin
kono
parents:
diff changeset
175 Sonar_Contact := 700;
kono
parents:
diff changeset
176 Trident.Contact (Sonar_Contact); -- Cause Location_Error exception
kono
parents:
diff changeset
177 -- to be raised in task accept body,
kono
parents:
diff changeset
178 -- propogated to a task block, and
kono
parents:
diff changeset
179 -- handled there. Corresponding
kono
parents:
diff changeset
180 -- exception propagated here also.
kono
parents:
diff changeset
181 Report.Failed ("Expected exception not raised");
kono
parents:
diff changeset
182 exception
kono
parents:
diff changeset
183 when Submarine_Tracking.Location_Error =>
kono
parents:
diff changeset
184 TC_LEB_Error := True;
kono
parents:
diff changeset
185 when others =>
kono
parents:
diff changeset
186 Report.Failed ("Exception handled unexpectedly in " &
kono
parents:
diff changeset
187 "Location_Error_Block");
kono
parents:
diff changeset
188 end Location_Error_Block;
kono
parents:
diff changeset
189
kono
parents:
diff changeset
190
kono
parents:
diff changeset
191 Incorrect_Data_Block:
kono
parents:
diff changeset
192 begin
kono
parents:
diff changeset
193 Sonar_Contact := 200;
kono
parents:
diff changeset
194 Trident.Contact (Sonar_Contact); -- Cause Incorrect_Data exception
kono
parents:
diff changeset
195 -- to be raised in task accept body,
kono
parents:
diff changeset
196 -- propogated to calling procedure.
kono
parents:
diff changeset
197 Report.Failed ("Expected exception not raised");
kono
parents:
diff changeset
198 exception
kono
parents:
diff changeset
199 when Submarine_Tracking.Incorrect_Data =>
kono
parents:
diff changeset
200 Submarine_Tracking.TC_Handled_In_Caller := True;
kono
parents:
diff changeset
201 when others =>
kono
parents:
diff changeset
202 Report.Failed ("Exception handled unexpectedly in " &
kono
parents:
diff changeset
203 "Incorrect_Data_Block");
kono
parents:
diff changeset
204 end Incorrect_Data_Block;
kono
parents:
diff changeset
205
kono
parents:
diff changeset
206
kono
parents:
diff changeset
207 if TC_Main_Handler_Used or
kono
parents:
diff changeset
208 not (Submarine_Tracking.TC_Handled_In_Caller and -- Check to see that
kono
parents:
diff changeset
209 Submarine_Tracking.TC_Handled_In_Task_Block and -- all exceptions
kono
parents:
diff changeset
210 Submarine_Tracking.TC_Handled_In_Accept and -- were handled in
kono
parents:
diff changeset
211 Submarine_Tracking.TC_Reraised_In_Accept and -- proper locations.
kono
parents:
diff changeset
212 TC_LEB_Error)
kono
parents:
diff changeset
213 then
kono
parents:
diff changeset
214 Report.Failed ("Exceptions handled in incorrect locations");
kono
parents:
diff changeset
215 end if;
kono
parents:
diff changeset
216
kono
parents:
diff changeset
217 if Integer(Submarine_Tracking.Current_Position) /= 0 then
kono
parents:
diff changeset
218 Report.Failed ("Variable incorrectly written in task processing");
kono
parents:
diff changeset
219 end if;
kono
parents:
diff changeset
220
kono
parents:
diff changeset
221 delay ImpDef.Minimum_Task_Switch;
kono
parents:
diff changeset
222 if Trident'Callable then
kono
parents:
diff changeset
223 Report.Failed ("Task didn't terminate with exception propagation");
kono
parents:
diff changeset
224 end if;
kono
parents:
diff changeset
225
kono
parents:
diff changeset
226 Report.Result;
kono
parents:
diff changeset
227
kono
parents:
diff changeset
228 end CB20001;