1 ------------------------------------------------------------------------------
3 -- GNAT COMPILER COMPONENTS --
5 -- G E N _ I L . F I E L D S --
9 -- Copyright (C) 2020-2023, Free Software Foundation, Inc. --
11 -- GNAT is free software; you can redistribute it and/or modify it under --
12 -- terms of the GNU General Public License as published by the Free Soft- --
13 -- ware Foundation; either version 3, or (at your option) any later ver- --
14 -- sion. GNAT is distributed in the hope that it will be useful, but WITH- --
15 -- OUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY --
16 -- or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License --
17 -- for more details. You should have received a copy of the GNU General --
18 -- Public License distributed with GNAT; see file COPYING3. If not, go to --
19 -- http://www.gnu.org/licenses for a complete copy of the license. --
21 -- GNAT was originally developed by the GNAT team at New York University. --
22 -- Extensive contributions were provided by Ada Core Technologies Inc. --
24 ------------------------------------------------------------------------------
26 package Gen_IL.Fields is
28 -- The following is "optional field enumeration" -- i.e. it is Field_Enum
29 -- (declared below) plus the special null value No_Field. See the spec of
30 -- Gen_IL.Gen for how to modify this. (Of course, in Ada we have to define
31 -- this backwards from the above conceptual description.)
33 -- Note that there are various subranges of this type declared below,
34 -- which might need to be kept in sync when modifying this.
36 -- Be sure to put new fields in the appropriate subrange (Field_Enum,
37 -- Node_Field, Entity_Field -- search for comments below).
39 type Opt_Field_Enum is
42 -- Start of node fields:
53 Is_Ignored_Ghost_Node,
59 Accept_Handler_Records,
62 Access_To_Subprogram_Definition,
63 Access_Types_To_Process,
65 Activation_Chain_Entity,
67 Actual_Designated_Subtype,
68 Address_Warning_Posted,
77 Aspect_On_Partial_View,
79 Aspect_Specifications,
93 Check_Address_Alignment,
99 Comes_From_Check_Or_Contract,
100 Comes_From_Extended_Return_Statement,
102 Compile_Time_Known_Aggregate,
103 Component_Associations,
105 Component_Definition,
109 Componentwise_Assignment,
120 Controlling_Argument,
122 Corresponding_Aspect,
124 Corresponding_Entry_Body,
125 Corresponding_Formal_Spec,
126 Corresponding_Generic_Association,
127 Corresponding_Integer_Value,
129 Corresponding_Spec_Of_Stub,
134 Default_Storage_Pool,
136 Default_Subtype_Mark,
143 Discr_Check_Funcs_Built,
146 Discrete_Subtype_Definition,
147 Discrete_Subtype_Definitions,
148 Discriminant_Specifications,
150 Do_Discriminant_Check,
156 Elaborate_All_Desirable,
157 Elaborate_All_Present,
166 Entity_Or_Associated_Node,
167 Entry_Body_Formal_Part,
168 Entry_Call_Alternative,
169 Entry_Call_Statement,
172 Entry_Index_Specification,
179 Explicit_Actual_Parameter,
180 Explicit_Generic_Actual_Parameter,
185 First_Inlined_Subprogram,
190 Formal_Type_Definition,
192 For_Special_Return_Object,
193 From_Aspect_Specification,
195 From_Conditional_Expression,
197 Generalized_Indexing,
198 Generic_Associations,
199 Generic_Formal_Declarations,
202 Handled_Statement_Sequence,
204 Has_Created_Identifier,
205 Has_Dereference_Action,
206 Has_Dynamic_Length_Check,
209 Has_No_Elaboration_Code,
210 Has_Pragma_Suppress_All,
212 Has_Relative_Deadline_Pragma,
213 Has_Secondary_Private_View,
216 Has_Storage_Size_Pragma,
219 Has_Wide_Wide_Character,
221 Hidden_By_Use_Clause,
227 Import_Interface_Present,
231 Inherited_Discriminant,
235 Is_Accessibility_Actual,
237 Is_Asynchronous_Call_Block,
240 Is_Checked_Ghost_Pragma,
241 Is_Component_Left_Opnd,
242 Is_Component_Right_Opnd,
243 Is_Controlling_Actual,
244 Is_Declaration_Level_Node,
248 Is_Dynamic_Coextension,
249 Is_Effective_Use_Clause,
250 Is_Elaboration_Checks_OK_Node,
252 Is_Elaboration_Warnings_OK_Node,
254 Is_Entry_Barrier_Function,
255 Is_Expanded_Build_In_Place_Call,
256 Is_Expanded_Contract,
257 Is_Finalization_Wrapper,
259 Is_Generic_Contract_Pragma,
260 Is_Homogeneous_Aggregate,
261 Is_Parenthesis_Aggregate,
262 Is_Enum_Array_Aggregate,
264 Is_Ignored_Ghost_Pragma,
265 Is_In_Discriminant_Check,
267 Is_Initialization_Block,
268 Is_Known_Guaranteed_ABE,
272 Is_Power_Of_2_For_Shift,
273 Is_Preelaborable_Call,
275 Is_Protected_Subprogram_Body,
276 Is_Qualified_Universal_Literal,
279 Is_SPARK_Mode_On_Node,
280 Is_Static_Coextension,
281 Is_Static_Expression,
282 Is_Subprogram_Descriptor,
283 Is_Task_Allocation_Block,
284 Is_Task_Body_Procedure,
289 Iterator_Specification,
298 Limited_View_Installed,
302 Local_Raise_Statements,
304 Loop_Parameter_Specification,
308 Multidefined_Bindings,
309 Must_Be_Byte_Aligned,
323 No_Elaboration_Check,
324 No_Entities_Ref_In_Spec,
327 No_Minimize_Eliminate,
329 Null_Excluding_Subtype,
330 Null_Exclusion_Present,
331 Null_Exclusion_In_Return_Present,
337 Original_Discriminant,
339 Others_Discrete_Choices,
341 Parameter_Associations,
342 Parameter_Specifications,
347 Pragma_Argument_Associations,
358 Private_Declarations,
362 Protected_Definition,
364 Raises_Constraint_Error,
367 Real_Range_Specification,
370 Record_Extension_Part,
374 Return_Object_Declarations,
375 Return_Statement_Entity,
379 Save_Invocation_Graph_Of_Body,
380 SCIL_Controlling_Tag,
399 Suppress_Assignment_Checks,
400 Suppress_Loop_Warnings,
401 Synchronized_Present,
409 Triggering_Alternative,
410 Triggering_Statement,
416 Unknown_Discriminants_Present,
417 Unreferenced_In_Spec,
420 Visible_Declarations,
421 Uninitialized_Variable,
423 Was_Attribute_Reference,
424 Was_Default_Init_Box_Association,
425 Was_Expression_Function,
428 -- End of node fields.
430 Between_Node_And_Entity_Fields,
432 -- Start of entity fields:
439 Access_Disp_Table_Elab_Flag,
440 Access_Subprogram_Wrapper,
441 Activation_Record_Component,
445 Anonymous_Designated_Type,
449 Associated_Formal_Package,
450 Associated_Node_For_Itype,
451 Associated_Storage_Pool,
453 BIP_Initialization_Call,
456 Body_Needed_For_Inlining,
461 Can_Use_Internal_Rep,
462 Checks_May_Be_Suppressed,
463 Class_Postconditions,
465 Class_Preconditions_Subprogram,
469 Component_Bit_Offset,
475 Corresponding_Concurrent_Type,
476 Corresponding_Discriminant,
477 Corresponding_Equality,
478 Corresponding_Function,
479 Corresponding_Procedure,
480 Corresponding_Record_Component,
481 Corresponding_Record_Type,
482 Corresponding_Remote_Type,
488 Default_Aspect_Component_Value,
489 Default_Aspect_Value,
490 Default_Expr_Function,
491 Default_Expressions_Processed,
501 Direct_Primitive_Operations,
502 Directly_Designated_Type,
507 Discriminant_Checking_Func,
508 Discriminant_Constraint,
509 Discriminant_Default_Value,
511 Dispatch_Table_Wrappers,
514 DT_Offset_To_Top_Func,
517 Elaborate_Body_Desirable,
519 Elaboration_Entity_Required,
524 Entry_Cancel_Parameter,
527 Entry_Index_Constant,
528 Entry_Max_Queue_Lengths_Array,
529 Entry_Parameters_Type,
533 Enumeration_Rep_Expr,
537 Extra_Accessibility_Of_Result,
542 Finalize_Storage_Only,
545 First_Exit_Statement,
548 First_Private_Entity,
556 Has_Aliased_Components,
557 Has_Alignment_Clause,
558 Has_All_Calls_Remote,
559 Has_Atomic_Components,
560 Has_Biased_Representation,
562 Has_Completion_In_Body,
563 Has_Complex_Representation,
564 Has_Component_Size_Clause,
565 Has_Constrained_Partial_View,
567 Has_Controlled_Component,
568 Has_Controlling_Result,
569 Has_Convention_Pragma,
573 Has_Delayed_Rep_Aspects,
576 Has_Dynamic_Predicate_Aspect,
577 Has_Enumeration_Rep_Clause,
579 Has_Expanded_Contract,
580 Has_Forward_Instantiation,
581 Has_Fully_Qualified_Name,
582 Has_Ghost_Predicate_Aspect,
585 Has_Implicit_Dereference,
586 Has_Independent_Components,
587 Has_Inheritable_Invariants,
589 Has_Inherited_Invariants,
591 Has_Loop_Entry_Attributes,
592 Has_Machine_Radix_Clause,
595 Has_Nested_Block_With_Handler,
596 Has_Nested_Subprogram,
597 Has_Non_Standard_Rep,
598 Has_Object_Size_Clause,
599 Has_Out_Or_In_Out_Parameter,
602 Has_Partial_Visible_Refinement,
603 Has_Per_Object_Constraint,
604 Has_Pragma_Controlled,
605 Has_Pragma_Elaborate_Body,
607 Has_Pragma_Inline_Always,
608 Has_Pragma_No_Inline,
611 Has_Pragma_Preelab_Init,
613 Has_Pragma_Pure_Function,
614 Has_Pragma_Thread_Local_Storage,
615 Has_Pragma_Unmodified,
616 Has_Pragma_Unreferenced,
617 Has_Pragma_Unreferenced_Objects,
620 Has_Primitive_Operations,
621 Has_Private_Ancestor,
622 Has_Private_Declaration,
623 Has_Private_Extension,
627 Has_Record_Rep_Clause,
632 Has_Specified_Layout,
633 Has_Specified_Stream_Input,
634 Has_Specified_Stream_Output,
635 Has_Specified_Stream_Read,
636 Has_Specified_Stream_Write,
637 Has_Static_Discriminants,
638 Has_Static_Predicate,
639 Has_Static_Predicate_Aspect,
640 Has_Storage_Size_Clause,
641 Has_Stream_Size_Clause,
646 Has_Unknown_Discriminants,
647 Has_Visible_Refinement,
648 Has_Volatile_Components,
651 Hiding_Loop_Variable,
652 Hidden_In_Formal_Instance,
654 Ignored_Class_Postconditions,
655 Ignored_Class_Preconditions,
656 Ignore_SPARK_Mode_Pragmas,
659 Indirect_Call_Wrapper,
663 Initialization_Statements,
668 Is_Abstract_Subprogram,
671 Is_Activation_Record,
682 Is_Checked_Ghost_Entity,
684 Is_Class_Wide_Equivalent_Type,
685 Is_Class_Wide_Wrapper,
687 Is_Completely_Hidden,
688 Is_Concurrent_Record_Type,
689 Is_Constr_Subt_For_U_Nominal,
690 Is_Constr_Subt_For_UN_Aliased,
693 Is_Controlled_Active,
694 Is_Controlling_Formal,
697 Is_Descendant_Of_Address,
699 Is_Discrim_SO_Function,
700 Is_Discriminant_Check_Function,
701 Is_Dispatch_Table_Entity,
702 Is_Dispatch_Table_Wrapper,
703 Is_Dispatching_Operation,
704 Is_Elaboration_Checks_OK_Id,
705 Is_Elaboration_Warnings_OK_Id,
709 Is_Exception_Handler,
711 Is_Finalized_Transient,
713 Is_Fixed_Lower_Bound_Array_Subtype,
714 Is_Fixed_Lower_Bound_Index_Subtype,
715 Is_Formal_Subprogram,
717 Is_Generic_Actual_Subprogram,
718 Is_Generic_Actual_Type,
722 Is_Hidden_Non_Overridden_Subpgm,
723 Is_Hidden_Open_Scope,
724 Is_Ignored_Ghost_Entity,
725 Is_Ignored_Transient,
726 Is_Immediately_Visible,
727 Is_Implementation_Defined,
730 Is_Initial_Condition_Procedure,
736 Is_Interrupt_Handler,
737 Is_Intrinsic_Subprogram,
738 Is_Invariant_Procedure,
743 Is_Limited_Composite,
744 Is_Limited_Interface,
746 Is_Local_Anonymous_Access,
748 Is_Machine_Code_Subprogram,
749 Is_Non_Static_Subtype,
752 Is_Only_Out_Parameter,
753 Is_Package_Body_Entity,
755 Is_Packed_Array_Impl_Type,
757 Is_Param_Block_Component_Type,
758 Is_Partial_Invariant_Procedure,
759 Is_Potentially_Use_Visible,
760 Is_Predicate_Function,
763 Is_Primitive_Wrapper,
764 Is_Private_Composite,
765 Is_Private_Descendant,
766 Is_Private_Primitive,
769 Is_Pure_Unit_Access_Type,
772 Is_Remote_Call_Interface,
774 Is_Renaming_Of_Object,
776 Is_Safe_To_Reevaluate,
779 Is_Statically_Allocated,
783 Is_Trivial_Subprogram,
786 Is_Underlying_Full_View,
787 Is_Underlying_Record_View,
790 Is_Uplevel_Referenced_Entity,
796 Is_Volatile_Full_Access,
799 Kill_Elaboration_Checks,
801 Known_To_Have_Preelab_Init,
802 Last_Aggregate_Assignment,
806 Linker_Section_Pragma,
815 May_Inherit_Delayed_Rep_Aspects,
817 Minimum_Accessibility,
819 Must_Be_On_Byte_Boundary,
820 Must_Have_Preelab_Init,
821 Needs_Activation_Record,
825 Next_Inlined_Subprogram,
826 No_Dynamic_Predicate_On_Actual,
828 No_Predicate_On_Actual,
832 No_Tagged_Streams_Pragma,
836 Normalized_First_Bit,
839 Optimize_Alignment_Space,
840 Optimize_Alignment_Time,
841 Original_Access_Type,
843 Original_Protected_Subprogram,
844 Original_Record_Component,
846 Overridden_Operation,
847 Package_Instantiation,
848 Packed_Array_Impl_Type,
850 Part_Of_Constituents,
852 Partial_View_Has_Unknown_Discr,
853 Pending_Access_Types,
855 Predicate_Expression,
860 Protected_Body_Subprogram,
862 Protected_Subprogram,
868 Referenced_As_Out_Parameter,
869 Refinement_Constituents,
870 Register_Exception_Call,
871 Related_Array_Object,
875 Relative_Deadline_Variable,
877 Renamed_Or_Alias, -- Shared among Alias, Renamed_Entity, Renamed_Object
884 Reverse_Storage_Order,
890 Sec_Stack_Needed_For_Return,
891 Shared_Var_Procs_Instance,
893 Size_Depends_On_Discriminant,
894 Size_Known_At_Compile_Time,
897 SPARK_Aux_Pragma_Inherited,
899 SPARK_Pragma_Inherited,
901 SSO_Set_High_By_Default,
902 SSO_Set_Low_By_Default,
904 Static_Discrete_Predicate,
905 Static_Elaboration_Desired,
906 Static_Initialization,
907 Static_Real_Or_String_Predicate,
908 Status_Flag_Or_Transient_Decl,
909 Storage_Size_Variable,
911 Stores_Attribute_Old_Prefix,
913 String_Literal_Length,
914 String_Literal_Low_Bound,
915 Subprograms_For_Type,
917 Suppress_Elaboration_Warnings,
918 Suppress_Initialization,
919 Suppress_Style_Checks,
920 Suppress_Value_Tracking_On_Call,
924 Underlying_Full_View,
925 Underlying_Record_View,
928 Used_As_Generic_Actual,
934 Warnings_Off_Used_Unmodified,
935 Warnings_Off_Used_Unreferenced,
940 -- End of entity fields.
943 subtype Field_Enum is Opt_Field_Enum
944 range Opt_Field_Enum'Succ (No_Field) .. Opt_Field_Enum'Last;
945 -- Enumeration of fields -- Opt_Field_Enum without the special null value