summaryrefslogtreecommitdiff
path: root/gcc/testsuite/gnat.dg/case_optimization_pkg1.ads
blob: da458645e9ccacac66b9cf4a61e9da119bdfc7b3 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
package Case_Optimization_Pkg1 is

   type Element is null record;

   type Internal_Element_Kinds is
     (Not_An_Element,
      An_All_Calls_Remote_Pragma,       
      An_Asynchronous_Pragma,           
      An_Atomic_Pragma,                 
      An_Atomic_Components_Pragma,      
      An_Attach_Handler_Pragma,         
      A_Controlled_Pragma,              
      A_Convention_Pragma,              
      A_Discard_Names_Pragma,           
      An_Elaborate_Pragma,              
      An_Elaborate_All_Pragma,          
      An_Elaborate_Body_Pragma,         
      An_Export_Pragma,                 
      An_Import_Pragma,                 
      An_Inline_Pragma,                 
      An_Inspection_Point_Pragma,       
      An_Interrupt_Handler_Pragma,      
      An_Interrupt_Priority_Pragma,     
      A_Linker_Options_Pragma,          
      A_List_Pragma,                    
      A_Locking_Policy_Pragma,          
      A_Normalize_Scalars_Pragma,       
      An_Optimize_Pragma,               
      A_Pack_Pragma,                    
      A_Page_Pragma,                    
      A_Preelaborate_Pragma,            
      A_Priority_Pragma,                
      A_Pure_Pragma,                    
      A_Queuing_Policy_Pragma,          
      A_Remote_Call_Interface_Pragma,   
      A_Remote_Types_Pragma,            
      A_Restrictions_Pragma,            
      A_Reviewable_Pragma,              
      A_Shared_Passive_Pragma,          
      A_Storage_Size_Pragma,            
      A_Suppress_Pragma,                
      A_Task_Dispatching_Policy_Pragma, 
      A_Volatile_Pragma,                
      A_Volatile_Components_Pragma,     
      An_Assert_Pragma,
      An_Assertion_Policy_Pragma,
      A_Detect_Blocking_Pragma,
      A_No_Return_Pragma,
      A_Partition_Elaboration_Policy_Pragma,
      A_Preelaborable_Initialization_Pragma,
      A_Priority_Specific_Dispatching_Pragma,
      A_Profile_Pragma,
      A_Relative_Deadline_Pragma,
      An_Unchecked_Union_Pragma,
      An_Unsuppress_Pragma,
      An_Implementation_Defined_Pragma, 
      An_Unknown_Pragma,
      A_Defining_Identifier,                     
      A_Defining_Character_Literal,              
      A_Defining_Enumeration_Literal,            
      A_Defining_And_Operator,                    
      A_Defining_Or_Operator,                     
      A_Defining_Xor_Operator,                    
      A_Defining_Equal_Operator,                  
      A_Defining_Not_Equal_Operator,              
      A_Defining_Less_Than_Operator,              
      A_Defining_Less_Than_Or_Equal_Operator,     
      A_Defining_Greater_Than_Operator,           
      A_Defining_Greater_Than_Or_Equal_Operator,  
      A_Defining_Plus_Operator,                   
      A_Defining_Minus_Operator,                  
      A_Defining_Concatenate_Operator,            
      A_Defining_Unary_Plus_Operator,             
      A_Defining_Unary_Minus_Operator,            
      A_Defining_Multiply_Operator,               
      A_Defining_Divide_Operator,                 
      A_Defining_Mod_Operator,                    
      A_Defining_Rem_Operator,                    
      A_Defining_Exponentiate_Operator,           
      A_Defining_Abs_Operator,                    
      A_Defining_Not_Operator,                    
      A_Defining_Expanded_Name,  
      An_Ordinary_Type_Declaration,              
      A_Task_Type_Declaration,                   
      A_Protected_Type_Declaration,              
      An_Incomplete_Type_Declaration,            
      A_Tagged_Incomplete_Type_Declaration,      
      A_Private_Type_Declaration,                
      A_Private_Extension_Declaration,           
      A_Subtype_Declaration,                     
      A_Variable_Declaration,                    
      A_Constant_Declaration,                    
      A_Deferred_Constant_Declaration,           
      A_Single_Task_Declaration,                 
      A_Single_Protected_Declaration,            
      An_Integer_Number_Declaration,             
      A_Real_Number_Declaration,                 
      An_Enumeration_Literal_Specification,      
      A_Discriminant_Specification,              
      A_Component_Declaration,                   
      A_Loop_Parameter_Specification,            
      A_Procedure_Declaration,                   
      A_Function_Declaration,                    
      A_Parameter_Specification,                 
      A_Procedure_Body_Declaration,              
      A_Function_Body_Declaration,               
      A_Return_Object_Declaration,            
      A_Null_Procedure_Declaration,           
      A_Package_Declaration,                     
      A_Package_Body_Declaration,                
      An_Object_Renaming_Declaration,            
      An_Exception_Renaming_Declaration,         
      A_Package_Renaming_Declaration,            
      A_Procedure_Renaming_Declaration,          
      A_Function_Renaming_Declaration,           
      A_Generic_Package_Renaming_Declaration,    
      A_Generic_Procedure_Renaming_Declaration,  
      A_Generic_Function_Renaming_Declaration,   
      A_Task_Body_Declaration,                   
      A_Protected_Body_Declaration,              
      An_Entry_Declaration,                      
      An_Entry_Body_Declaration,                 
      An_Entry_Index_Specification,              
      A_Procedure_Body_Stub,                     
      A_Function_Body_Stub,                      
      A_Package_Body_Stub,                       
      A_Task_Body_Stub,                          
      A_Protected_Body_Stub,                     
      An_Exception_Declaration,                  
      A_Choice_Parameter_Specification,          
      A_Generic_Procedure_Declaration,           
      A_Generic_Function_Declaration,            
      A_Generic_Package_Declaration,             
      A_Package_Instantiation,                   
      A_Procedure_Instantiation,                 
      A_Function_Instantiation,                  
      A_Formal_Object_Declaration,               
      A_Formal_Type_Declaration,                 
      A_Formal_Procedure_Declaration,            
      A_Formal_Function_Declaration,             
      A_Formal_Package_Declaration,              
      A_Formal_Package_Declaration_With_Box,     
      A_Derived_Type_Definition,             
      A_Derived_Record_Extension_Definition, 
      An_Enumeration_Type_Definition,        
      A_Signed_Integer_Type_Definition,      
      A_Modular_Type_Definition,             
      A_Root_Integer_Definition,             
      A_Root_Real_Definition,                
      A_Universal_Integer_Definition,        
      A_Universal_Real_Definition,           
      A_Universal_Fixed_Definition,          
      A_Floating_Point_Definition,           
      An_Ordinary_Fixed_Point_Definition,    
      A_Decimal_Fixed_Point_Definition,      
      An_Unconstrained_Array_Definition,     
      A_Constrained_Array_Definition,        
      A_Record_Type_Definition,              
      A_Tagged_Record_Type_Definition,       
      An_Ordinary_Interface,           
      A_Limited_Interface,             
      A_Task_Interface,                
      A_Protected_Interface,           
      A_Synchronized_Interface,        
      A_Pool_Specific_Access_To_Variable, 
      An_Access_To_Variable,              
      An_Access_To_Constant,              
      An_Access_To_Procedure,             
      An_Access_To_Protected_Procedure,   
      An_Access_To_Function,              
      An_Access_To_Protected_Function,    
      A_Subtype_Indication,             
      A_Range_Attribute_Reference,           
      A_Simple_Expression_Range,             
      A_Digits_Constraint,                   
      A_Delta_Constraint,                    
      An_Index_Constraint,                   
      A_Discriminant_Constraint,            
      A_Component_Definition,           
      A_Discrete_Subtype_Indication_As_Subtype_Definition,     
      A_Discrete_Range_Attribute_Reference_As_Subtype_Definition, 
      A_Discrete_Simple_Expression_Range_As_Subtype_Definition,   
      A_Discrete_Subtype_Indication,         
      A_Discrete_Range_Attribute_Reference,  
      A_Discrete_Simple_Expression_Range,    
      An_Unknown_Discriminant_Part,     
      A_Known_Discriminant_Part,        
      A_Record_Definition,              
      A_Null_Record_Definition,         
      A_Null_Component,                 
      A_Variant_Part,                   
      A_Variant,                        
      An_Others_Choice,                 
      An_Anonymous_Access_To_Variable,  
      An_Anonymous_Access_To_Constant,  
      An_Anonymous_Access_To_Procedure,           
      An_Anonymous_Access_To_Protected_Procedure, 
      An_Anonymous_Access_To_Function,            
      An_Anonymous_Access_To_Protected_Function, 
      A_Private_Type_Definition,        
      A_Tagged_Private_Type_Definition, 
      A_Private_Extension_Definition,   
      A_Task_Definition,                
      A_Protected_Definition,           
      A_Formal_Private_Type_Definition,         
      A_Formal_Tagged_Private_Type_Definition,  
      A_Formal_Derived_Type_Definition,         
      A_Formal_Discrete_Type_Definition,        
      A_Formal_Signed_Integer_Type_Definition,  
      A_Formal_Modular_Type_Definition,         
      A_Formal_Floating_Point_Definition,       
      A_Formal_Ordinary_Fixed_Point_Definition, 
      A_Formal_Decimal_Fixed_Point_Definition,  
      A_Formal_Ordinary_Interface,             
      A_Formal_Limited_Interface,              
      A_Formal_Task_Interface,                 
      A_Formal_Protected_Interface,            
      A_Formal_Synchronized_Interface,        
      A_Formal_Unconstrained_Array_Definition,  
      A_Formal_Constrained_Array_Definition,    
      A_Formal_Pool_Specific_Access_To_Variable,  
      A_Formal_Access_To_Variable,             
      A_Formal_Access_To_Constant,       
      A_Formal_Access_To_Procedure,              
      A_Formal_Access_To_Protected_Procedure,    
      A_Formal_Access_To_Function,               
      A_Formal_Access_To_Protected_Function,     
      An_Integer_Literal,                        
      A_Real_Literal,                            
      A_String_Literal,                          
      An_Identifier,                             
      An_And_Operator,                     
      An_Or_Operator,                      
      An_Xor_Operator,                     
      An_Equal_Operator,                   
      A_Not_Equal_Operator,                
      A_Less_Than_Operator,                
      A_Less_Than_Or_Equal_Operator,       
      A_Greater_Than_Operator,             
      A_Greater_Than_Or_Equal_Operator,    
      A_Plus_Operator,                     
      A_Minus_Operator,                    
      A_Concatenate_Operator,              
      A_Unary_Plus_Operator,               
      A_Unary_Minus_Operator,              
      A_Multiply_Operator,                 
      A_Divide_Operator,                   
      A_Mod_Operator,                      
      A_Rem_Operator,                      
      An_Exponentiate_Operator,            
      An_Abs_Operator,                     
      A_Not_Operator,                      
      A_Character_Literal,                       
      An_Enumeration_Literal,                    
      An_Explicit_Dereference,                   
      A_Function_Call,                           
      An_Indexed_Component,                      
      A_Slice,                                   
      A_Selected_Component,                      
      An_Access_Attribute,           
      An_Address_Attribute,          
      An_Adjacent_Attribute,         
      An_Aft_Attribute,              
      An_Alignment_Attribute,        
      A_Base_Attribute,              
      A_Bit_Order_Attribute,         
      A_Body_Version_Attribute,      
      A_Callable_Attribute,          
      A_Caller_Attribute,            
      A_Ceiling_Attribute,           
      A_Class_Attribute,             
      A_Component_Size_Attribute,    
      A_Compose_Attribute,           
      A_Constrained_Attribute,       
      A_Copy_Sign_Attribute,         
      A_Count_Attribute,             
      A_Definite_Attribute,          
      A_Delta_Attribute,             
      A_Denorm_Attribute,            
      A_Digits_Attribute,            
      An_Exponent_Attribute,         
      An_External_Tag_Attribute,     
      A_First_Attribute,             
      A_First_Bit_Attribute,         
      A_Floor_Attribute,             
      A_Fore_Attribute,              
      A_Fraction_Attribute,          
      An_Identity_Attribute,         
      An_Image_Attribute,            
      An_Input_Attribute,            
      A_Last_Attribute,              
      A_Last_Bit_Attribute,          
      A_Leading_Part_Attribute,      
      A_Length_Attribute,            
      A_Machine_Attribute,           
      A_Machine_Emax_Attribute,      
      A_Machine_Emin_Attribute,      
      A_Machine_Mantissa_Attribute,  
      A_Machine_Overflows_Attribute, 
      A_Machine_Radix_Attribute,     
      A_Machine_Rounds_Attribute,    
      A_Max_Attribute,               
      A_Max_Size_In_Storage_Elements_Attribute, 
      A_Min_Attribute,               
      A_Model_Attribute,             
      A_Model_Emin_Attribute,        
      A_Model_Epsilon_Attribute,     
      A_Model_Mantissa_Attribute,    
      A_Model_Small_Attribute,       
      A_Modulus_Attribute,           
      An_Output_Attribute,          
      A_Partition_ID_Attribute,      
      A_Pos_Attribute,               
      A_Position_Attribute,          
      A_Pred_Attribute,              
      A_Range_Attribute,             
      A_Read_Attribute,              
      A_Remainder_Attribute,         
      A_Round_Attribute,             
      A_Rounding_Attribute,          
      A_Safe_First_Attribute,        
      A_Safe_Last_Attribute,         
      A_Scale_Attribute,             
      A_Scaling_Attribute,           
      A_Signed_Zeros_Attribute,      
      A_Size_Attribute,              
      A_Small_Attribute,             
      A_Storage_Pool_Attribute,      
      A_Storage_Size_Attribute,      
      A_Succ_Attribute,              
      A_Tag_Attribute,               
      A_Terminated_Attribute,        
      A_Truncation_Attribute,        
      An_Unbiased_Rounding_Attribute, 
      An_Unchecked_Access_Attribute, 
      A_Val_Attribute,               
      A_Valid_Attribute,             
      A_Value_Attribute,             
      A_Version_Attribute,           
      A_Wide_Image_Attribute,        
      A_Wide_Value_Attribute,        
      A_Wide_Width_Attribute,        
      A_Width_Attribute,             
      A_Write_Attribute,             
      A_Machine_Rounding_Attribute,
      A_Mod_Attribute,
      A_Priority_Attribute,
      A_Stream_Size_Attribute,
      A_Wide_Wide_Image_Attribute,
      A_Wide_Wide_Value_Attribute,
      A_Wide_Wide_Width_Attribute,
      An_Implementation_Defined_Attribute,  
      An_Unknown_Attribute,
      A_Record_Aggregate,                        
      An_Extension_Aggregate,                    
      A_Positional_Array_Aggregate,              
      A_Named_Array_Aggregate,                   
      An_And_Then_Short_Circuit,                 
      An_Or_Else_Short_Circuit,                  
      An_In_Range_Membership_Test,               
      A_Not_In_Range_Membership_Test,            
      An_In_Type_Membership_Test,                
      A_Not_In_Type_Membership_Test,             
      A_Null_Literal,                            
      A_Parenthesized_Expression,                
      A_Type_Conversion,                         
      A_Qualified_Expression,                    
      An_Allocation_From_Subtype,                
      An_Allocation_From_Qualified_Expression,   
      A_Pragma_Argument_Association,         
      A_Discriminant_Association,            
      A_Record_Component_Association,        
      An_Array_Component_Association,        
      A_Parameter_Association,               
      A_Generic_Association,                 
      A_Null_Statement,                    
      An_Assignment_Statement,             
      An_If_Statement,                     
      A_Case_Statement,                    
      A_Loop_Statement,                    
      A_While_Loop_Statement,              
      A_For_Loop_Statement,                
      A_Block_Statement,                   
      An_Exit_Statement,                   
      A_Goto_Statement,                    
      A_Procedure_Call_Statement,          
      A_Return_Statement,                  
      An_Extended_Return_Statement,        
      An_Accept_Statement,                 
      An_Entry_Call_Statement,             
      A_Requeue_Statement,                 
      A_Requeue_Statement_With_Abort,      
      A_Delay_Until_Statement,             
      A_Delay_Relative_Statement,          
      A_Terminate_Alternative_Statement,   
      A_Selective_Accept_Statement,        
      A_Timed_Entry_Call_Statement,        
      A_Conditional_Entry_Call_Statement,  
      An_Asynchronous_Select_Statement,    
      An_Abort_Statement,                  
      A_Raise_Statement,                   
      A_Code_Statement,                    
      An_If_Path,                     
      An_Elsif_Path,                  
      An_Else_Path,                   
      A_Case_Path,                    
      A_Select_Path,                  
      An_Or_Path,                     
      A_Then_Abort_Path,              
      A_Use_Package_Clause,           
      A_Use_Type_Clause,              
      A_With_Clause,                  
      An_Attribute_Definition_Clause,           
      An_Enumeration_Representation_Clause,     
      A_Record_Representation_Clause,           
      An_At_Clause,                             
      A_Component_Clause,             
      An_Exception_Handler,    
      Non_Trivial_Mapping,
      Not_Implemented_Mapping,
      Trivial_Mapping,        
      No_Mapping);

   subtype Internal_Expression_Kinds is Internal_Element_Kinds
      range An_Integer_Literal .. An_Allocation_From_Qualified_Expression;

   subtype Internal_Operator_Symbol_Kinds is Internal_Expression_Kinds
      range An_And_Operator .. A_Not_Operator;

   function Int_Kind (E : Element) return Internal_Element_Kinds;

end Case_Optimization_Pkg1;