Mercurial > hg > CbC > CbC_gcc
comparison gcc/testsuite/ada/acats/tests/cd/cd30001.a @ 111:04ced10e8804
gcc 7
author | kono |
---|---|
date | Fri, 27 Oct 2017 22:46:09 +0900 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
68:561a7518be6b | 111:04ced10e8804 |
---|---|
1 -- CD30001.A | |
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 -- | |
26 -- OBJECTIVE: | |
27 -- Check that X'Address produces a useful result when X is an aliased | |
28 -- object. | |
29 -- Check that X'Address produces a useful result when X is an object of | |
30 -- a by-reference type. | |
31 -- Check that X'Address produces a useful result when X is an entity | |
32 -- whose Address has been specified. | |
33 -- | |
34 -- Check that aliased objects and subcomponents are allocated on storage | |
35 -- element boundaries. Check that objects and subcomponents of by | |
36 -- reference types are allocated on storage element boundaries. | |
37 -- | |
38 -- Check that for an array X, X'Address points at the first component | |
39 -- of the array, and not at the array bounds. | |
40 -- | |
41 -- TEST DESCRIPTION: | |
42 -- This test defines a data structure (an array of records) where each | |
43 -- aspect of the data structure is aliased. The test checks 'Address | |
44 -- for each "layer" of aliased objects. | |
45 -- | |
46 -- APPLICABILITY CRITERIA: | |
47 -- All implementations must attempt to compile this test. | |
48 -- | |
49 -- For implementations validating against Systems Programming Annex (C): | |
50 -- this test must execute and report PASSED. | |
51 -- | |
52 -- For implementations not validating against Annex C: | |
53 -- this test may report compile time errors at one or more points | |
54 -- indicated by "-- ANX-C RQMT", in which case it may be graded as inapplicable. | |
55 -- Otherwise, the test must execute and report PASSED. | |
56 -- | |
57 -- | |
58 -- CHANGE HISTORY: | |
59 -- 22 JUL 95 SAIC Initial version | |
60 -- 08 MAY 96 SAIC Reinforced for 2.1 | |
61 -- 16 FEB 98 EDS Modified documentation | |
62 --! | |
63 | |
64 ----------------------------------------------------------------- CD30001_0 | |
65 | |
66 with SPPRT13; | |
67 package CD30001_0 is | |
68 | |
69 -- Check that X'Address produces a useful result when X is an aliased | |
70 -- object. | |
71 -- Check that X'Address produces a useful result when X is an object of | |
72 -- a by-reference type. | |
73 -- Check that X'Address produces a useful result when X is an entity | |
74 -- whose Address has been specified. | |
75 -- (using the new form of "for X'Address use ...") | |
76 -- | |
77 -- Check that aliased objects and subcomponents are allocated on storage | |
78 -- element boundaries. Check that objects and subcomponents of by | |
79 -- reference types are allocated on storage element boundaries. | |
80 | |
81 type Simple_Enum_Type is (Just, A, Little, Bit); | |
82 | |
83 type Data is record | |
84 Aliased_Comp_1 : aliased Simple_Enum_Type; | |
85 Aliased_Comp_2 : aliased Simple_Enum_Type; | |
86 end record; | |
87 | |
88 type Array_W_Aliased_Comps is array(1..2) of aliased Data; | |
89 | |
90 Aliased_Object : aliased Array_W_Aliased_Comps; | |
91 | |
92 Specific_Object : aliased Array_W_Aliased_Comps; | |
93 for Specific_Object'Address use SPPRT13.Variable_Address2; -- ANX-C RQMT. | |
94 | |
95 procedure TC_Check_Aliased_Addresses; | |
96 | |
97 procedure TC_Check_Specific_Addresses; | |
98 | |
99 procedure TC_Check_By_Reference_Types; | |
100 | |
101 end CD30001_0; | |
102 | |
103 -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- | |
104 | |
105 with Report; | |
106 with System.Storage_Elements; | |
107 with System.Address_To_Access_Conversions; | |
108 package body CD30001_0 is | |
109 | |
110 package Simple_Enum_Type_Ref_Conv is | |
111 new System.Address_To_Access_Conversions(Simple_Enum_Type); | |
112 | |
113 package Data_Ref_Conv is new System.Address_To_Access_Conversions(Data); | |
114 | |
115 package Array_W_Aliased_Comps_Ref_Conv is | |
116 new System.Address_To_Access_Conversions(Array_W_Aliased_Comps); | |
117 | |
118 use type System.Address; | |
119 use type System.Storage_Elements.Integer_Address; | |
120 use type System.Storage_Elements.Storage_Offset; | |
121 | |
122 procedure TC_Check_Aliased_Addresses is | |
123 use type Simple_Enum_Type_Ref_Conv.Object_Pointer; | |
124 use type Data_Ref_Conv.Object_Pointer; | |
125 use type Array_W_Aliased_Comps_Ref_Conv.Object_Pointer; | |
126 | |
127 begin | |
128 | |
129 -- Check the object Aliased_Object | |
130 | |
131 if Aliased_Object'Address not in System.Address then | |
132 Report.Failed("Aliased_Object'Address not an address"); | |
133 end if; | |
134 | |
135 if Array_W_Aliased_Comps_Ref_Conv.To_Pointer(Aliased_Object'Address) | |
136 /= Aliased_Object'Unchecked_Access then | |
137 Report.Failed | |
138 ("'Unchecked_Access does not match expected address value"); | |
139 end if; | |
140 | |
141 -- Check the element Aliased_Object(1) | |
142 | |
143 if Data_Ref_Conv.To_Address( Aliased_Object(1)'Access ) | |
144 /= Aliased_Object(1)'Address then | |
145 Report.Failed | |
146 ("Array element 'Access does not match expected address value"); | |
147 end if; | |
148 | |
149 -- Check that Array'Address points at the first component... | |
150 | |
151 if Array_W_Aliased_Comps_Ref_Conv.To_Address( Aliased_Object'Access ) | |
152 /= Aliased_Object(1)'Address then | |
153 Report.Failed | |
154 ("Address of array object does not equal address of first component"); | |
155 end if; | |
156 | |
157 -- Check the components of Aliased_Object(2) | |
158 | |
159 if Simple_Enum_Type_Ref_Conv.To_Address( | |
160 Aliased_Object(2).Aliased_Comp_1'Unchecked_Access) | |
161 not in System.Address then | |
162 Report.Failed("Component 2 'Unchecked_Access not a valid address"); | |
163 end if; | |
164 | |
165 if Aliased_Object(2).Aliased_Comp_2'Address not in System.Address then | |
166 Report.Failed("Component 2 not located at a valid address "); | |
167 end if; | |
168 | |
169 end TC_Check_Aliased_Addresses; | |
170 | |
171 procedure TC_Check_Specific_Addresses is | |
172 use type System.Address; | |
173 use type System.Storage_Elements.Integer_Address; | |
174 use type Simple_Enum_Type_Ref_Conv.Object_Pointer; | |
175 use type Data_Ref_Conv.Object_Pointer; | |
176 use type Array_W_Aliased_Comps_Ref_Conv.Object_Pointer; | |
177 begin | |
178 | |
179 -- Check the object Specific_Object | |
180 | |
181 if System.Storage_Elements.To_Integer(Specific_Object'Address) | |
182 /= System.Storage_Elements.To_Integer(SPPRT13.Variable_Address2) then | |
183 Report.Failed | |
184 ("Specific_Object not at address specified in representation clause"); | |
185 end if; | |
186 | |
187 if Array_W_Aliased_Comps_Ref_Conv.To_Pointer(SPPRT13.Variable_Address2) | |
188 /= Specific_Object'Unchecked_Access then | |
189 Report.Failed("Specific_Object'Unchecked_Access not expected value"); | |
190 end if; | |
191 | |
192 -- Check the element Specific_Object(1) | |
193 | |
194 if Data_Ref_Conv.To_Address( Specific_Object(1)'Access ) | |
195 /= Specific_Object(1)'Address then | |
196 Report.Failed | |
197 ("Specific Array element 'Access does not correspond to the " | |
198 & "elements 'Address"); | |
199 end if; | |
200 | |
201 -- Check that Array'Address points at the first component... | |
202 | |
203 if Array_W_Aliased_Comps_Ref_Conv.To_Address( Specific_Object'Access ) | |
204 /= Specific_Object(1)'Address then | |
205 Report.Failed | |
206 ("Address of array object does not equal address of first component"); | |
207 end if; | |
208 | |
209 -- Check the components of Specific_Object(2) | |
210 | |
211 if Simple_Enum_Type_Ref_Conv.To_Address( | |
212 Specific_Object(1).Aliased_Comp_1'Access) | |
213 not in System.Address then | |
214 Report.Failed("Access value of first record component for object at " & | |
215 "specific address not a valid address"); | |
216 end if; | |
217 | |
218 if Specific_Object(2).Aliased_Comp_2'Address not in System.Address then | |
219 Report.Failed("Second record component for object at specific " & | |
220 "address not located at a valid address"); | |
221 end if; | |
222 | |
223 end TC_Check_Specific_Addresses; | |
224 | |
225 -- Check that X'Address produces a useful result when X is an object of | |
226 -- a by-reference type. | |
227 | |
228 type Tagged_But_Not_Exciting is tagged record | |
229 A_Bit_Of_Data : Boolean; | |
230 end record; | |
231 | |
232 Tagged_Object : Tagged_But_Not_Exciting; | |
233 | |
234 procedure Muck_With_Addresses( It : in out Tagged_But_Not_Exciting; | |
235 Its_Address : in System.Address ) is | |
236 begin | |
237 if It'Address /= Its_Address then | |
238 Report.Failed("Address of object passed by reference does not " & | |
239 "match address of object passed" ); | |
240 end if; | |
241 end Muck_With_Addresses; | |
242 | |
243 procedure TC_Check_By_Reference_Types is | |
244 begin | |
245 Muck_With_Addresses( Tagged_Object, Tagged_Object'Address ); | |
246 end TC_Check_By_Reference_Types; | |
247 | |
248 end CD30001_0; | |
249 | |
250 ------------------------------------------------------------------- CD30001 | |
251 | |
252 with Report; | |
253 with CD30001_0; | |
254 procedure CD30001 is | |
255 | |
256 begin -- Main test procedure. | |
257 | |
258 Report.Test ("CD30001", | |
259 "Check that X'Address produces a useful result when X is " & | |
260 "an aliased object, or an entity whose Address has been " & | |
261 "specified" ); | |
262 | |
263 -- Check that X'Address produces a useful result when X is an aliased | |
264 -- object. | |
265 -- | |
266 -- Check that aliased objects and subcomponents are allocated on storage | |
267 -- element boundaries. Check that objects and subcomponents of by | |
268 -- reference types are allocated on storage element boundaries. | |
269 | |
270 CD30001_0.TC_Check_Aliased_Addresses; | |
271 | |
272 -- Check that X'Address produces a useful result when X is an entity | |
273 -- whose Address has been specified. | |
274 | |
275 CD30001_0.TC_Check_Specific_Addresses; | |
276 | |
277 -- Check that X'Address produces a useful result when X is an object of | |
278 -- a by-reference type. | |
279 | |
280 CD30001_0.TC_Check_By_Reference_Types; | |
281 | |
282 Report.Result; | |
283 | |
284 end CD30001; |