OSDN Git Service

2010-10-26 Javier Miranda <miranda@adacore.com>
[pf3gnuchains/gcc-fork.git] / gcc / ada / einfo.adb
1 ------------------------------------------------------------------------------
2 --                                                                          --
3 --                         GNAT COMPILER COMPONENTS                         --
4 --                                                                          --
5 --                                E I N F O                                 --
6 --                                                                          --
7 --                                 B o d y                                  --
8 --                                                                          --
9 --          Copyright (C) 1992-2010, Free Software Foundation, Inc.         --
10 --                                                                          --
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.                                     --
17 --                                                                          --
18 -- As a special exception under Section 7 of GPL version 3, you are granted --
19 -- additional permissions described in the GCC Runtime Library Exception,   --
20 -- version 3.1, as published by the Free Software Foundation.               --
21 --                                                                          --
22 -- You should have received a copy of the GNU General Public License and    --
23 -- a copy of the GCC Runtime Library Exception along with this program;     --
24 -- see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see    --
25 -- <http://www.gnu.org/licenses/>.                                          --
26 --                                                                          --
27 -- GNAT was originally developed  by the GNAT team at  New York University. --
28 -- Extensive contributions were provided by Ada Core Technologies Inc.      --
29 --                                                                          --
30 ------------------------------------------------------------------------------
31
32 pragma Style_Checks (All_Checks);
33 --  Turn off subprogram ordering, not used for this unit
34
35 with Atree;    use Atree;
36 with Nlists;   use Nlists;
37 with Output;   use Output;
38 with Sinfo;    use Sinfo;
39 with Stand;    use Stand;
40
41 package body Einfo is
42
43    use Atree.Unchecked_Access;
44    --  This is one of the packages that is allowed direct untyped access to
45    --  the fields in a node, since it provides the next level abstraction
46    --  which incorporates appropriate checks.
47
48    ----------------------------------------------
49    -- Usage of Fields in Defining Entity Nodes --
50    ----------------------------------------------
51
52    --  Four of these fields are defined in Sinfo, since they in are the base
53    --  part of the node. The access routines for these four fields and the
54    --  corresponding set procedures are defined in Sinfo. These fields are
55    --  present in all entities. Note that Homonym is also in the base part of
56    --  the node, but has access routines that are more properly part of Einfo,
57    --  which is why they are defined here.
58
59    --    Chars                           Name1
60    --    Next_Entity                     Node2
61    --    Scope                           Node3
62    --    Etype                           Node5
63
64    --   Remaining fields are present only in extended nodes (i.e. entities)
65
66    --  The following fields are present in all entities
67
68    --    Homonym                         Node4
69    --    First_Rep_Item                  Node6
70    --    Freeze_Node                     Node7
71
72    --  The usage of other fields (and the entity kinds to which it applies)
73    --  depends on the particular field (see Einfo spec for details).
74
75    --    Associated_Node_For_Itype       Node8
76    --    Dependent_Instances             Elist8
77    --    Hiding_Loop_Variable            Node8
78    --    Mechanism                       Uint8 (but returns Mechanism_Type)
79    --    Normalized_First_Bit            Uint8
80    --    Postcondition_Proc              Node8
81    --    Return_Applies_To               Node8
82    --    First_Exit_Statement            Node8
83
84    --    Class_Wide_Type                 Node9
85    --    Current_Value                   Node9
86    --    Renaming_Map                    Uint9
87
88    --    Direct_Primitive_Operations     Elist10
89    --    Discriminal_Link                Node10
90    --    Float_Rep                       Uint10 (but returns Float_Rep_Kind)
91    --    Handler_Records                 List10
92    --    Normalized_Position_Max         Uint10
93
94    --    Component_Bit_Offset            Uint11
95    --    Full_View                       Node11
96    --    Entry_Component                 Node11
97    --    Enumeration_Pos                 Uint11
98    --    Generic_Homonym                 Node11
99    --    Protected_Body_Subprogram       Node11
100    --    Block_Node                      Node11
101
102    --    Barrier_Function                Node12
103    --    Enumeration_Rep                 Uint12
104    --    Esize                           Uint12
105    --    Next_Inlined_Subprogram         Node12
106
107    --    Corresponding_Equality          Node13
108    --    Component_Clause                Node13
109    --    Elaboration_Entity              Node13
110    --    Extra_Accessibility             Node13
111    --    RM_Size                         Uint13
112
113    --    Alignment                       Uint14
114    --    First_Optional_Parameter        Node14
115    --    Normalized_Position             Uint14
116    --    Shadow_Entities                 List14
117
118    --    Discriminant_Number             Uint15
119    --    DT_Position                     Uint15
120    --    DT_Entry_Count                  Uint15
121    --    Entry_Bodies_Array              Node15
122    --    Entry_Parameters_Type           Node15
123    --    Extra_Formal                    Node15
124    --    Lit_Indexes                     Node15
125    --    Related_Instance                Node15
126    --    Scale_Value                     Uint15
127    --    Storage_Size_Variable           Node15
128    --    String_Literal_Low_Bound        Node15
129
130    --    Access_Disp_Table               Elist16
131    --    Cloned_Subtype                  Node16
132    --    DTC_Entity                      Node16
133    --    Entry_Formal                    Node16
134    --    First_Private_Entity            Node16
135    --    Lit_Strings                     Node16
136    --    String_Literal_Length           Uint16
137    --    Unset_Reference                 Node16
138
139    --    Actual_Subtype                  Node17
140    --    Digits_Value                    Uint17
141    --    Discriminal                     Node17
142    --    First_Entity                    Node17
143    --    First_Index                     Node17
144    --    First_Literal                   Node17
145    --    Master_Id                       Node17
146    --    Modulus                         Uint17
147    --    Non_Limited_View                Node17
148    --    Prival                          Node17
149
150    --    Alias                           Node18
151    --    Corresponding_Concurrent_Type   Node18
152    --    Corresponding_Protected_Entry   Node18
153    --    Corresponding_Record_Type       Node18
154    --    Delta_Value                     Ureal18
155    --    Enclosing_Scope                 Node18
156    --    Equivalent_Type                 Node18
157    --    Private_Dependents              Elist18
158    --    Renamed_Entity                  Node18
159    --    Renamed_Object                  Node18
160
161    --    Body_Entity                     Node19
162    --    Corresponding_Discriminant      Node19
163    --    Finalization_Chain_Entity       Node19
164    --    Parent_Subtype                  Node19
165    --    Related_Array_Object            Node19
166    --    Size_Check_Code                 Node19
167    --    Spec_Entity                     Node19
168    --    Underlying_Full_View            Node19
169
170    --    Component_Type                  Node20
171    --    Default_Value                   Node20
172    --    Directly_Designated_Type        Node20
173    --    Discriminant_Checking_Func      Node20
174    --    Discriminant_Default_Value      Node20
175    --    Last_Entity                     Node20
176    --    Prival_Link                     Node20
177    --    Register_Exception_Call         Node20
178    --    Scalar_Range                    Node20
179
180    --    Accept_Address                  Elist21
181    --    Default_Expr_Function           Node21
182    --    Discriminant_Constraint         Elist21
183    --    Interface_Name                  Node21
184    --    Original_Array_Type             Node21
185    --    Small_Value                     Ureal21
186
187    --    Associated_Storage_Pool         Node22
188    --    Component_Size                  Uint22
189    --    Corresponding_Remote_Type       Node22
190    --    Enumeration_Rep_Expr            Node22
191    --    Exception_Code                  Uint22
192    --    Original_Record_Component       Node22
193    --    Private_View                    Node22
194    --    Protected_Formal                Node22
195    --    Scope_Depth_Value               Uint22
196    --    Shared_Var_Procs_Instance       Node22
197
198    --    Associated_Final_Chain          Node23
199    --    CR_Discriminant                 Node23
200    --    Entry_Cancel_Parameter          Node23
201    --    Enum_Pos_To_Rep                 Node23
202    --    Extra_Constrained               Node23
203    --    Generic_Renamings               Elist23
204    --    Inner_Instances                 Elist23
205    --    Limited_View                    Node23
206    --    Packed_Array_Type               Node23
207    --    Protection_Object               Node23
208    --    Stored_Constraint               Elist23
209
210    --    Related_Expression              Node24
211    --    Spec_PPC_List                   Node24
212
213    --    Interface_Alias                 Node25
214    --    Interfaces                      Elist25
215    --    Debug_Renaming_Link             Node25
216    --    DT_Offset_To_Top_Func           Node25
217    --    PPC_Wrapper                     Node25
218    --    Static_Predicate                List25
219    --    Task_Body_Procedure             Node25
220
221    --    Dispatch_Table_Wrappers         Elist26
222    --    Last_Assignment                 Node26
223    --    Overridden_Operation            Node26
224    --    Package_Instantiation           Node26
225    --    Relative_Deadline_Variable      Node26
226    --    Static_Initialization           Node26
227
228    --    Current_Use_Clause              Node27
229    --    Related_Type                    Node27
230    --    Wrapped_Entity                  Node27
231
232    --    Extra_Formals                   Node28
233    --    Underlying_Record_View          Node28
234
235    --    Subprograms_For_Type            Node29
236
237    ---------------------------------------------
238    -- Usage of Flags in Defining Entity Nodes --
239    ---------------------------------------------
240
241    --  All flags are unique, there is no overlaying, so each flag is physically
242    --  present in every entity. However, for many of the flags, it only makes
243    --  sense for them to be set true for certain subsets of entity kinds. See
244    --  the spec of Einfo for further details.
245
246    --  Note: Flag1-Flag3 are absent from this list, for historical reasons
247
248    --    Is_Frozen                       Flag4
249    --    Has_Discriminants               Flag5
250    --    Is_Dispatching_Operation        Flag6
251    --    Is_Immediately_Visible          Flag7
252    --    In_Use                          Flag8
253    --    Is_Potentially_Use_Visible      Flag9
254    --    Is_Public                       Flag10
255
256    --    Is_Inlined                      Flag11
257    --    Is_Constrained                  Flag12
258    --    Is_Generic_Type                 Flag13
259    --    Depends_On_Private              Flag14
260    --    Is_Aliased                      Flag15
261    --    Is_Volatile                     Flag16
262    --    Is_Internal                     Flag17
263    --    Has_Delayed_Freeze              Flag18
264    --    Is_Abstract_Subprogram          Flag19
265    --    Is_Concurrent_Record_Type       Flag20
266
267    --    Has_Master_Entity               Flag21
268    --    Needs_No_Actuals                Flag22
269    --    Has_Storage_Size_Clause         Flag23
270    --    Is_Imported                     Flag24
271    --    Is_Limited_Record               Flag25
272    --    Has_Completion                  Flag26
273    --    Has_Pragma_Controlled           Flag27
274    --    Is_Statically_Allocated         Flag28
275    --    Has_Size_Clause                 Flag29
276    --    Has_Task                        Flag30
277
278    --    Checks_May_Be_Suppressed        Flag31
279    --    Kill_Elaboration_Checks         Flag32
280    --    Kill_Range_Checks               Flag33
281    --    Kill_Tag_Checks                 Flag34
282    --    Is_Class_Wide_Equivalent_Type   Flag35
283    --    Referenced_As_LHS               Flag36
284    --    Is_Known_Non_Null               Flag37
285    --    Can_Never_Be_Null               Flag38
286    --    Body_Needed_For_SAL             Flag40
287
288    --    Treat_As_Volatile               Flag41
289    --    Is_Controlled                   Flag42
290    --    Has_Controlled_Component        Flag43
291    --    Is_Pure                         Flag44
292    --    In_Private_Part                 Flag45
293    --    Has_Alignment_Clause            Flag46
294    --    Has_Exit                        Flag47
295    --    In_Package_Body                 Flag48
296    --    Reachable                       Flag49
297    --    Delay_Subprogram_Descriptors    Flag50
298
299    --    Is_Packed                       Flag51
300    --    Is_Entry_Formal                 Flag52
301    --    Is_Private_Descendant           Flag53
302    --    Return_Present                  Flag54
303    --    Is_Tagged_Type                  Flag55
304    --    Has_Homonym                     Flag56
305    --    Is_Hidden                       Flag57
306    --    Non_Binary_Modulus              Flag58
307    --    Is_Preelaborated                Flag59
308    --    Is_Shared_Passive               Flag60
309
310    --    Is_Remote_Types                 Flag61
311    --    Is_Remote_Call_Interface        Flag62
312    --    Is_Character_Type               Flag63
313    --    Is_Intrinsic_Subprogram         Flag64
314    --    Has_Record_Rep_Clause           Flag65
315    --    Has_Enumeration_Rep_Clause      Flag66
316    --    Has_Small_Clause                Flag67
317    --    Has_Component_Size_Clause       Flag68
318    --    Is_Access_Constant              Flag69
319    --    Is_First_Subtype                Flag70
320
321    --    Has_Completion_In_Body          Flag71
322    --    Has_Unknown_Discriminants       Flag72
323    --    Is_Child_Unit                   Flag73
324    --    Is_CPP_Class                    Flag74
325    --    Has_Non_Standard_Rep            Flag75
326    --    Is_Constructor                  Flag76
327    --    Static_Elaboration_Desired      Flag77
328    --    Is_Tag                          Flag78
329    --    Has_All_Calls_Remote            Flag79
330    --    Is_Constr_Subt_For_U_Nominal    Flag80
331
332    --    Is_Asynchronous                 Flag81
333    --    Has_Gigi_Rep_Item               Flag82
334    --    Has_Machine_Radix_Clause        Flag83
335    --    Machine_Radix_10                Flag84
336    --    Is_Atomic                       Flag85
337    --    Has_Atomic_Components           Flag86
338    --    Has_Volatile_Components         Flag87
339    --    Discard_Names                   Flag88
340    --    Is_Interrupt_Handler            Flag89
341    --    Returns_By_Ref                  Flag90
342
343    --    Is_Itype                        Flag91
344    --    Size_Known_At_Compile_Time      Flag92
345    --    Has_Subprogram_Descriptor       Flag93
346    --    Is_Generic_Actual_Type          Flag94
347    --    Uses_Sec_Stack                  Flag95
348    --    Warnings_Off                    Flag96
349    --    Is_Controlling_Formal           Flag97
350    --    Has_Controlling_Result          Flag98
351    --    Is_Exported                     Flag99
352    --    Has_Specified_Layout            Flag100
353
354    --    Has_Nested_Block_With_Handler   Flag101
355    --    Is_Called                       Flag102
356    --    Is_Completely_Hidden            Flag103
357    --    Address_Taken                   Flag104
358    --    Suppress_Init_Proc              Flag105
359    --    Is_Limited_Composite            Flag106
360    --    Is_Private_Composite            Flag107
361    --    Default_Expressions_Processed   Flag108
362    --    Is_Non_Static_Subtype           Flag109
363    --    Has_External_Tag_Rep_Clause     Flag110
364
365    --    Is_Formal_Subprogram            Flag111
366    --    Is_Renaming_Of_Object           Flag112
367    --    No_Return                       Flag113
368    --    Delay_Cleanups                  Flag114
369    --    Never_Set_In_Source             Flag115
370    --    Is_Visible_Child_Unit           Flag116
371    --    Is_Unchecked_Union              Flag117
372    --    Is_For_Access_Subtype           Flag118
373    --    Has_Convention_Pragma           Flag119
374    --    Has_Primitive_Operations        Flag120
375
376    --    Has_Pragma_Pack                 Flag121
377    --    Is_Bit_Packed_Array             Flag122
378    --    Has_Unchecked_Union             Flag123
379    --    Is_Eliminated                   Flag124
380    --    C_Pass_By_Copy                  Flag125
381    --    Is_Instantiated                 Flag126
382    --    Is_Valued_Procedure             Flag127
383    --    (used for Component_Alignment)  Flag128
384    --    (used for Component_Alignment)  Flag129
385    --    Is_Generic_Instance             Flag130
386
387    --    No_Pool_Assigned                Flag131
388    --    Is_AST_Entry                    Flag132
389    --    Is_VMS_Exception                Flag133
390    --    Is_Optional_Parameter           Flag134
391    --    Has_Aliased_Components          Flag135
392    --    No_Strict_Aliasing              Flag136
393    --    Is_Machine_Code_Subprogram      Flag137
394    --    Is_Packed_Array_Type            Flag138
395    --    Has_Biased_Representation       Flag139
396    --    Has_Complex_Representation      Flag140
397
398    --    Is_Constr_Subt_For_UN_Aliased   Flag141
399    --    Has_Missing_Return              Flag142
400    --    Has_Recursive_Call              Flag143
401    --    Is_Unsigned_Type                Flag144
402    --    Strict_Alignment                Flag145
403    --    Is_Abstract_Type                Flag146
404    --    Needs_Debug_Info                Flag147
405    --    Suppress_Elaboration_Warnings   Flag148
406    --    Is_Compilation_Unit             Flag149
407    --    Has_Pragma_Elaborate_Body       Flag150
408
409    --    Entry_Accepted                  Flag152
410    --    Is_Obsolescent                  Flag153
411    --    Has_Per_Object_Constraint       Flag154
412    --    Has_Private_Declaration         Flag155
413    --    Referenced                      Flag156
414    --    Has_Pragma_Inline               Flag157
415    --    Finalize_Storage_Only           Flag158
416    --    From_With_Type                  Flag159
417    --    Is_Package_Body_Entity          Flag160
418
419    --    Has_Qualified_Name              Flag161
420    --    Nonzero_Is_True                 Flag162
421    --    Is_True_Constant                Flag163
422    --    Reverse_Bit_Order               Flag164
423    --    Suppress_Style_Checks           Flag165
424    --    Debug_Info_Off                  Flag166
425    --    Sec_Stack_Needed_For_Return     Flag167
426    --    Materialize_Entity              Flag168
427    --    Has_Pragma_Thread_Local_Storage Flag169
428    --    Is_Known_Valid                  Flag170
429
430    --    Is_Hidden_Open_Scope            Flag171
431    --    Has_Object_Size_Clause          Flag172
432    --    Has_Fully_Qualified_Name        Flag173
433    --    Elaboration_Entity_Required     Flag174
434    --    Has_Forward_Instantiation       Flag175
435    --    Is_Discrim_SO_Function          Flag176
436    --    Size_Depends_On_Discriminant    Flag177
437    --    Is_Null_Init_Proc               Flag178
438    --    Has_Pragma_Pure_Function        Flag179
439    --    Has_Pragma_Unreferenced         Flag180
440
441    --    Has_Contiguous_Rep              Flag181
442    --    Has_Xref_Entry                  Flag182
443    --    Must_Be_On_Byte_Boundary        Flag183
444    --    Has_Stream_Size_Clause          Flag184
445    --    Is_Ada_2005_Only                Flag185
446    --    Is_Interface                    Flag186
447    --    Has_Constrained_Partial_View    Flag187
448    --    Has_Persistent_BSS              Flag188
449    --    Is_Pure_Unit_Access_Type        Flag189
450    --    Has_Specified_Stream_Input      Flag190
451
452    --    Has_Specified_Stream_Output     Flag191
453    --    Has_Specified_Stream_Read       Flag192
454    --    Has_Specified_Stream_Write      Flag193
455    --    Is_Local_Anonymous_Access       Flag194
456    --    Is_Primitive_Wrapper            Flag195
457    --    Was_Hidden                      Flag196
458    --    Is_Limited_Interface            Flag197
459    --    Has_Pragma_Ordered              Flag198
460    --    Is_Ada_2012_Only                Flag199
461
462    --    Has_Delayed_Aspects             Flag200
463    --    Has_Anon_Block_Suffix           Flag201
464    --    Itype_Printed                   Flag202
465    --    Has_Pragma_Pure                 Flag203
466    --    Is_Known_Null                   Flag204
467    --    Low_Bound_Tested                Flag205
468    --    Is_Visible_Formal               Flag206
469    --    Known_To_Have_Preelab_Init      Flag207
470    --    Must_Have_Preelab_Init          Flag208
471    --    Is_Return_Object                Flag209
472    --    Elaborate_Body_Desirable        Flag210
473
474    --    Has_Static_Discriminants        Flag211
475    --    Has_Pragma_Unreferenced_Objects Flag212
476    --    Requires_Overriding             Flag213
477    --    Has_RACW                        Flag214
478    --    Has_Up_Level_Access             Flag215
479    --    Universal_Aliasing              Flag216
480    --    Suppress_Value_Tracking_On_Call Flag217
481    --    Is_Primitive                    Flag218
482    --    Has_Initial_Value               Flag219
483    --    Has_Dispatch_Table              Flag220
484
485    --    Has_Pragma_Preelab_Init         Flag221
486    --    Used_As_Generic_Actual          Flag222
487    --    Is_Descendent_Of_Address        Flag223
488    --    Is_Raised                       Flag224
489    --    Is_Thunk                        Flag225
490    --    Is_Only_Out_Parameter           Flag226
491    --    Referenced_As_Out_Parameter     Flag227
492    --    Has_Thunks                      Flag228
493    --    Can_Use_Internal_Rep            Flag229
494    --    Has_Pragma_Inline_Always        Flag230
495
496    --    Renamed_In_Spec                 Flag231
497    --    Has_Invariants                  Flag232
498    --    Has_Pragma_Unmodified           Flag233
499    --    Is_Dispatch_Table_Entity        Flag234
500    --    Is_Trivial_Subprogram           Flag235
501    --    Warnings_Off_Used               Flag236
502    --    Warnings_Off_Used_Unmodified    Flag237
503    --    Warnings_Off_Used_Unreferenced  Flag238
504    --    OK_To_Reorder_Components        Flag239
505    --    Has_Postconditions              Flag240
506
507    --    Optimize_Alignment_Space        Flag241
508    --    Optimize_Alignment_Time         Flag242
509    --    Overlays_Constant               Flag243
510    --    Is_RACW_Stub_Type               Flag244
511    --    Is_Private_Primitive            Flag245
512    --    Is_Underlying_Record_View       Flag246
513    --    OK_To_Rename                    Flag247
514    --    Has_Inheritable_Invariants      Flag248
515    --    Has_Predicates                  Flag250
516
517    --    (unused)                        Flag39
518    --    (unused)                        Flag151
519    --    (unused)                        Flag249
520    --    (unused)                        Flag251
521    --    (unused)                        Flag252
522    --    (unused)                        Flag253
523    --    (unused)                        Flag254
524
525    -----------------------
526    -- Local subprograms --
527    -----------------------
528
529    function Rep_Clause (Id : E; Rep_Name : Name_Id) return N;
530    --  Returns the attribute definition clause for Id whose name is Rep_Name.
531    --  Returns Empty if no matching attribute definition clause found for Id.
532
533    ---------------
534    -- Float_Rep --
535    ---------------
536
537    function Float_Rep (Id : E) return F is
538       pragma Assert (Is_Floating_Point_Type (Id));
539    begin
540       return F'Val (UI_To_Int (Uint10 (Base_Type (Id))));
541    end Float_Rep;
542
543    ----------------
544    -- Rep_Clause --
545    ----------------
546
547    function Rep_Clause (Id : E; Rep_Name : Name_Id) return N is
548       Ritem : Node_Id;
549
550    begin
551       Ritem := First_Rep_Item (Id);
552       while Present (Ritem) loop
553          if Nkind (Ritem) = N_Attribute_Definition_Clause
554            and then Chars (Ritem) = Rep_Name
555          then
556             return Ritem;
557          else
558             Next_Rep_Item (Ritem);
559          end if;
560       end loop;
561
562       return Empty;
563    end Rep_Clause;
564
565    --------------------------------
566    -- Attribute Access Functions --
567    --------------------------------
568
569    function Accept_Address (Id : E) return L is
570    begin
571       return Elist21 (Id);
572    end Accept_Address;
573
574    function Access_Disp_Table (Id : E) return L is
575    begin
576       pragma Assert (Is_Tagged_Type (Id));
577       return Elist16 (Implementation_Base_Type (Id));
578    end Access_Disp_Table;
579
580    function Actual_Subtype (Id : E) return E is
581    begin
582       pragma Assert
583          (Ekind_In (Id, E_Constant, E_Variable, E_Generic_In_Out_Parameter)
584            or else Is_Formal (Id));
585       return Node17 (Id);
586    end Actual_Subtype;
587
588    function Address_Taken (Id : E) return B is
589    begin
590       return Flag104 (Id);
591    end Address_Taken;
592
593    function Alias (Id : E) return E is
594    begin
595       pragma Assert
596         (Is_Overloadable (Id) or else Ekind (Id) = E_Subprogram_Type);
597       return Node18 (Id);
598    end Alias;
599
600    function Alignment (Id : E) return U is
601    begin
602       pragma Assert (Is_Type (Id)
603                        or else Is_Formal (Id)
604                        or else Ekind_In (Id, E_Loop_Parameter,
605                                              E_Constant,
606                                              E_Exception,
607                                              E_Variable));
608       return Uint14 (Id);
609    end Alignment;
610
611    function Associated_Final_Chain (Id : E) return E is
612    begin
613       pragma Assert (Is_Access_Type (Id));
614       return Node23 (Id);
615    end Associated_Final_Chain;
616
617    function Associated_Formal_Package (Id : E) return E is
618    begin
619       pragma Assert (Ekind (Id) = E_Package);
620       return Node12 (Id);
621    end Associated_Formal_Package;
622
623    function Associated_Node_For_Itype (Id : E) return N is
624    begin
625       return Node8 (Id);
626    end Associated_Node_For_Itype;
627
628    function Associated_Storage_Pool (Id : E) return E is
629    begin
630       pragma Assert (Is_Access_Type (Id));
631       return Node22 (Root_Type (Id));
632    end Associated_Storage_Pool;
633
634    function Barrier_Function (Id : E) return N is
635    begin
636       pragma Assert (Is_Entry (Id));
637       return Node12 (Id);
638    end Barrier_Function;
639
640    function Block_Node (Id : E) return N is
641    begin
642       pragma Assert (Ekind (Id) = E_Block);
643       return Node11 (Id);
644    end Block_Node;
645
646    function Body_Entity (Id : E) return E is
647    begin
648       pragma Assert (Ekind_In (Id, E_Package, E_Generic_Package));
649       return Node19 (Id);
650    end Body_Entity;
651
652    function Body_Needed_For_SAL (Id : E) return B is
653    begin
654       pragma Assert
655         (Ekind (Id) = E_Package
656            or else Is_Subprogram (Id)
657            or else Is_Generic_Unit (Id));
658       return Flag40 (Id);
659    end Body_Needed_For_SAL;
660
661    function C_Pass_By_Copy (Id : E) return B is
662    begin
663       pragma Assert (Is_Record_Type (Id));
664       return Flag125 (Implementation_Base_Type (Id));
665    end C_Pass_By_Copy;
666
667    function Can_Never_Be_Null (Id : E) return B is
668    begin
669       return Flag38 (Id);
670    end Can_Never_Be_Null;
671
672    function Checks_May_Be_Suppressed (Id : E) return B is
673    begin
674       return Flag31 (Id);
675    end Checks_May_Be_Suppressed;
676
677    function Class_Wide_Type (Id : E) return E is
678    begin
679       pragma Assert (Is_Type (Id));
680       return Node9 (Id);
681    end Class_Wide_Type;
682
683    function Cloned_Subtype (Id : E) return E is
684    begin
685       pragma Assert (Ekind_In (Id, E_Record_Subtype, E_Class_Wide_Subtype));
686       return Node16 (Id);
687    end Cloned_Subtype;
688
689    function Component_Bit_Offset (Id : E) return U is
690    begin
691       pragma Assert (Ekind_In (Id, E_Component, E_Discriminant));
692       return Uint11 (Id);
693    end Component_Bit_Offset;
694
695    function Component_Clause (Id : E) return N is
696    begin
697       pragma Assert (Ekind_In (Id, E_Component, E_Discriminant));
698       return Node13 (Id);
699    end Component_Clause;
700
701    function Component_Size (Id : E) return U is
702    begin
703       pragma Assert (Is_Array_Type (Id));
704       return Uint22 (Implementation_Base_Type (Id));
705    end Component_Size;
706
707    function Component_Type (Id : E) return E is
708    begin
709       pragma Assert (Is_Array_Type (Id) or else Is_String_Type (Id));
710       return Node20 (Implementation_Base_Type (Id));
711    end Component_Type;
712
713    function Corresponding_Concurrent_Type (Id : E) return E is
714    begin
715       pragma Assert (Ekind (Id) = E_Record_Type);
716       return Node18 (Id);
717    end Corresponding_Concurrent_Type;
718
719    function Corresponding_Discriminant (Id : E) return E is
720    begin
721       pragma Assert (Ekind (Id) = E_Discriminant);
722       return Node19 (Id);
723    end Corresponding_Discriminant;
724
725    function Corresponding_Equality (Id : E) return E is
726    begin
727       pragma Assert
728         (Ekind (Id) = E_Function
729           and then not Comes_From_Source (Id)
730           and then Chars (Id) = Name_Op_Ne);
731       return Node13 (Id);
732    end Corresponding_Equality;
733
734    function Corresponding_Protected_Entry (Id : E) return E is
735    begin
736       pragma Assert (Ekind (Id) = E_Subprogram_Body);
737       return Node18 (Id);
738    end Corresponding_Protected_Entry;
739
740    function Corresponding_Record_Type (Id : E) return E is
741    begin
742       pragma Assert (Is_Concurrent_Type (Id));
743       return Node18 (Id);
744    end Corresponding_Record_Type;
745
746    function Corresponding_Remote_Type (Id : E) return E is
747    begin
748       return Node22 (Id);
749    end Corresponding_Remote_Type;
750
751    function Current_Use_Clause (Id : E) return E is
752    begin
753       pragma Assert (Ekind (Id) = E_Package or else Is_Type (Id));
754       return Node27 (Id);
755    end Current_Use_Clause;
756
757    function Current_Value (Id : E) return N is
758    begin
759       pragma Assert (Ekind (Id) in Object_Kind);
760       return Node9 (Id);
761    end Current_Value;
762
763    function CR_Discriminant (Id : E) return E is
764    begin
765       return Node23 (Id);
766    end CR_Discriminant;
767
768    function Debug_Info_Off (Id : E) return B is
769    begin
770       return Flag166 (Id);
771    end Debug_Info_Off;
772
773    function Debug_Renaming_Link (Id : E) return E is
774    begin
775       return Node25 (Id);
776    end Debug_Renaming_Link;
777
778    function Default_Expr_Function (Id : E) return E is
779    begin
780       pragma Assert (Is_Formal (Id));
781       return Node21 (Id);
782    end Default_Expr_Function;
783
784    function Default_Expressions_Processed (Id : E) return B is
785    begin
786       return Flag108 (Id);
787    end Default_Expressions_Processed;
788
789    function Default_Value (Id : E) return N is
790    begin
791       pragma Assert (Is_Formal (Id));
792       return Node20 (Id);
793    end Default_Value;
794
795    function Delay_Cleanups (Id : E) return B is
796    begin
797       return Flag114 (Id);
798    end Delay_Cleanups;
799
800    function Delay_Subprogram_Descriptors (Id : E) return B is
801    begin
802       return Flag50 (Id);
803    end Delay_Subprogram_Descriptors;
804
805    function Delta_Value (Id : E) return R is
806    begin
807       pragma Assert (Is_Fixed_Point_Type (Id));
808       return Ureal18 (Id);
809    end Delta_Value;
810
811    function Dependent_Instances (Id : E) return L is
812    begin
813       pragma Assert (Is_Generic_Instance (Id));
814       return Elist8 (Id);
815    end Dependent_Instances;
816
817    function Depends_On_Private (Id : E) return B is
818    begin
819       pragma Assert (Nkind (Id) in N_Entity);
820       return Flag14 (Id);
821    end Depends_On_Private;
822
823    function Digits_Value (Id : E) return U is
824    begin
825       pragma Assert
826         (Is_Floating_Point_Type (Id)
827           or else Is_Decimal_Fixed_Point_Type (Id));
828       return Uint17 (Id);
829    end Digits_Value;
830
831    function Direct_Primitive_Operations (Id : E) return L is
832    begin
833       pragma Assert (Is_Tagged_Type (Id));
834       return Elist10 (Id);
835    end Direct_Primitive_Operations;
836
837    function Directly_Designated_Type (Id : E) return E is
838    begin
839       pragma Assert (Is_Access_Type (Id));
840       return Node20 (Id);
841    end Directly_Designated_Type;
842
843    function Discard_Names (Id : E) return B is
844    begin
845       return Flag88 (Id);
846    end Discard_Names;
847
848    function Discriminal (Id : E) return E is
849    begin
850       pragma Assert (Ekind (Id) = E_Discriminant);
851       return Node17 (Id);
852    end Discriminal;
853
854    function Discriminal_Link (Id : E) return N is
855    begin
856       return Node10 (Id);
857    end Discriminal_Link;
858
859    function Discriminant_Checking_Func (Id : E) return E is
860    begin
861       pragma Assert (Ekind (Id) = E_Component);
862       return Node20 (Id);
863    end Discriminant_Checking_Func;
864
865    function Discriminant_Constraint (Id : E) return L is
866    begin
867       pragma Assert (Is_Composite_Type (Id) and then Has_Discriminants (Id));
868       return Elist21 (Id);
869    end Discriminant_Constraint;
870
871    function Discriminant_Default_Value (Id : E) return N is
872    begin
873       pragma Assert (Ekind (Id) = E_Discriminant);
874       return Node20 (Id);
875    end Discriminant_Default_Value;
876
877    function Discriminant_Number (Id : E) return U is
878    begin
879       pragma Assert (Ekind (Id) = E_Discriminant);
880       return Uint15 (Id);
881    end Discriminant_Number;
882
883    function Dispatch_Table_Wrappers (Id : E) return L is
884    begin
885       pragma Assert (Is_Tagged_Type (Id));
886       return Elist26 (Implementation_Base_Type (Id));
887    end Dispatch_Table_Wrappers;
888
889    function DT_Entry_Count (Id : E) return U is
890    begin
891       pragma Assert (Ekind (Id) = E_Component and then Is_Tag (Id));
892       return Uint15 (Id);
893    end DT_Entry_Count;
894
895    function DT_Offset_To_Top_Func (Id : E) return E is
896    begin
897       pragma Assert (Ekind (Id) = E_Component and then Is_Tag (Id));
898       return Node25 (Id);
899    end DT_Offset_To_Top_Func;
900
901    function DT_Position (Id : E) return U is
902    begin
903       pragma Assert (Ekind_In (Id, E_Function, E_Procedure)
904                        and then Present (DTC_Entity (Id)));
905       return Uint15 (Id);
906    end DT_Position;
907
908    function DTC_Entity (Id : E) return E is
909    begin
910       pragma Assert (Ekind_In (Id, E_Function, E_Procedure));
911       return Node16 (Id);
912    end DTC_Entity;
913
914    function Elaborate_Body_Desirable (Id : E) return B is
915    begin
916       pragma Assert (Ekind (Id) = E_Package);
917       return Flag210 (Id);
918    end Elaborate_Body_Desirable;
919
920    function Elaboration_Entity (Id : E) return E is
921    begin
922       pragma Assert
923         (Is_Subprogram (Id)
924            or else
925          Ekind (Id) = E_Package
926            or else
927          Is_Generic_Unit (Id));
928       return Node13 (Id);
929    end Elaboration_Entity;
930
931    function Elaboration_Entity_Required (Id : E) return B is
932    begin
933       pragma Assert
934         (Is_Subprogram (Id)
935            or else
936          Ekind (Id) = E_Package
937            or else
938          Is_Generic_Unit (Id));
939       return Flag174 (Id);
940    end Elaboration_Entity_Required;
941
942    function Enclosing_Scope (Id : E) return E is
943    begin
944       return Node18 (Id);
945    end Enclosing_Scope;
946
947    function Entry_Accepted (Id : E) return B is
948    begin
949       pragma Assert (Is_Entry (Id));
950       return Flag152 (Id);
951    end Entry_Accepted;
952
953    function Entry_Bodies_Array (Id : E) return E is
954    begin
955       return Node15 (Id);
956    end Entry_Bodies_Array;
957
958    function Entry_Cancel_Parameter (Id : E) return E is
959    begin
960       return Node23 (Id);
961    end Entry_Cancel_Parameter;
962
963    function Entry_Component (Id : E) return E is
964    begin
965       return Node11 (Id);
966    end Entry_Component;
967
968    function Entry_Formal (Id : E) return E is
969    begin
970       return Node16 (Id);
971    end Entry_Formal;
972
973    function Entry_Index_Constant (Id : E) return N is
974    begin
975       pragma Assert (Ekind (Id) = E_Entry_Index_Parameter);
976       return Node18 (Id);
977    end Entry_Index_Constant;
978
979    function Entry_Parameters_Type (Id : E) return E is
980    begin
981       return Node15 (Id);
982    end Entry_Parameters_Type;
983
984    function Enum_Pos_To_Rep (Id : E) return E is
985    begin
986       pragma Assert (Ekind (Id) = E_Enumeration_Type);
987       return Node23 (Id);
988    end Enum_Pos_To_Rep;
989
990    function Enumeration_Pos (Id : E) return Uint is
991    begin
992       pragma Assert (Ekind (Id) = E_Enumeration_Literal);
993       return Uint11 (Id);
994    end Enumeration_Pos;
995
996    function Enumeration_Rep (Id : E) return U is
997    begin
998       pragma Assert (Ekind (Id) = E_Enumeration_Literal);
999       return Uint12 (Id);
1000    end Enumeration_Rep;
1001
1002    function Enumeration_Rep_Expr (Id : E) return N is
1003    begin
1004       pragma Assert (Ekind (Id) = E_Enumeration_Literal);
1005       return Node22 (Id);
1006    end Enumeration_Rep_Expr;
1007
1008    function Equivalent_Type (Id : E) return E is
1009    begin
1010       pragma Assert
1011         (Ekind_In (Id, E_Class_Wide_Type,
1012                        E_Class_Wide_Subtype,
1013                        E_Access_Protected_Subprogram_Type,
1014                        E_Anonymous_Access_Protected_Subprogram_Type,
1015                        E_Access_Subprogram_Type,
1016                        E_Exception_Type));
1017       return Node18 (Id);
1018    end Equivalent_Type;
1019
1020    function Esize (Id : E) return Uint is
1021    begin
1022       return Uint12 (Id);
1023    end Esize;
1024
1025    function Exception_Code (Id : E) return Uint is
1026    begin
1027       pragma Assert (Ekind (Id) = E_Exception);
1028       return Uint22 (Id);
1029    end Exception_Code;
1030
1031    function Extra_Accessibility (Id : E) return E is
1032    begin
1033       pragma Assert (Is_Formal (Id) or else Ekind (Id) = E_Variable);
1034       return Node13 (Id);
1035    end Extra_Accessibility;
1036
1037    function Extra_Constrained (Id : E) return E is
1038    begin
1039       pragma Assert (Is_Formal (Id) or else Ekind (Id) = E_Variable);
1040       return Node23 (Id);
1041    end Extra_Constrained;
1042
1043    function Extra_Formal (Id : E) return E is
1044    begin
1045       return Node15 (Id);
1046    end Extra_Formal;
1047
1048    function Extra_Formals (Id : E) return E is
1049    begin
1050       pragma Assert
1051         (Is_Overloadable (Id)
1052           or else Ekind_In (Id, E_Entry_Family,
1053                                 E_Subprogram_Body,
1054                                 E_Subprogram_Type));
1055       return Node28 (Id);
1056    end Extra_Formals;
1057
1058    function Can_Use_Internal_Rep (Id : E) return B is
1059    begin
1060       pragma Assert (Is_Access_Subprogram_Type (Base_Type (Id)));
1061       return Flag229 (Base_Type (Id));
1062    end Can_Use_Internal_Rep;
1063
1064    function Finalization_Chain_Entity (Id : E) return E is
1065    begin
1066       return Node19 (Id);
1067    end Finalization_Chain_Entity;
1068
1069    function Finalize_Storage_Only (Id : E) return B is
1070    begin
1071       pragma Assert (Is_Type (Id));
1072       return Flag158 (Base_Type (Id));
1073    end Finalize_Storage_Only;
1074
1075    function First_Entity (Id : E) return E is
1076    begin
1077       return Node17 (Id);
1078    end First_Entity;
1079
1080    function First_Exit_Statement (Id : E) return N is
1081    begin
1082       pragma Assert (Ekind (Id) = E_Loop);
1083       return Node8 (Id);
1084    end First_Exit_Statement;
1085
1086    function First_Index (Id : E) return N is
1087    begin
1088       pragma Assert (Is_Array_Type (Id) or else Is_String_Type (Id));
1089       return Node17 (Id);
1090    end First_Index;
1091
1092    function First_Literal (Id : E) return E is
1093    begin
1094       pragma Assert (Is_Enumeration_Type (Id));
1095       return Node17 (Id);
1096    end First_Literal;
1097
1098    function First_Optional_Parameter (Id : E) return E is
1099    begin
1100       pragma Assert (Ekind_In (Id, E_Function, E_Procedure));
1101       return Node14 (Id);
1102    end First_Optional_Parameter;
1103
1104    function First_Private_Entity (Id : E) return E is
1105    begin
1106       pragma Assert (Ekind_In (Id, E_Package, E_Generic_Package)
1107                        or else Ekind (Id) in Concurrent_Kind);
1108       return Node16 (Id);
1109    end First_Private_Entity;
1110
1111    function First_Rep_Item (Id : E) return E is
1112    begin
1113       return Node6 (Id);
1114    end First_Rep_Item;
1115
1116    function Freeze_Node (Id : E) return N is
1117    begin
1118       return Node7 (Id);
1119    end Freeze_Node;
1120
1121    function From_With_Type (Id : E) return B is
1122    begin
1123       return Flag159 (Id);
1124    end From_With_Type;
1125
1126    function Full_View (Id : E) return E is
1127    begin
1128       pragma Assert (Is_Type (Id) or else Ekind (Id) = E_Constant);
1129       return Node11 (Id);
1130    end Full_View;
1131
1132    function Generic_Homonym (Id : E) return E is
1133    begin
1134       pragma Assert (Ekind (Id) = E_Generic_Package);
1135       return Node11 (Id);
1136    end Generic_Homonym;
1137
1138    function Generic_Renamings (Id : E) return L is
1139    begin
1140       return Elist23 (Id);
1141    end Generic_Renamings;
1142
1143    function Handler_Records (Id : E) return S is
1144    begin
1145       return List10 (Id);
1146    end Handler_Records;
1147
1148    function Has_Aliased_Components (Id : E) return B is
1149    begin
1150       return Flag135 (Implementation_Base_Type (Id));
1151    end Has_Aliased_Components;
1152
1153    function Has_Alignment_Clause (Id : E) return B is
1154    begin
1155       return Flag46 (Id);
1156    end Has_Alignment_Clause;
1157
1158    function Has_All_Calls_Remote (Id : E) return B is
1159    begin
1160       return Flag79 (Id);
1161    end Has_All_Calls_Remote;
1162
1163    function Has_Anon_Block_Suffix (Id : E) return B is
1164    begin
1165       return Flag201 (Id);
1166    end Has_Anon_Block_Suffix;
1167
1168    function Has_Atomic_Components (Id : E) return B is
1169    begin
1170       return Flag86 (Implementation_Base_Type (Id));
1171    end Has_Atomic_Components;
1172
1173    function Has_Biased_Representation (Id : E) return B is
1174    begin
1175       return Flag139 (Id);
1176    end Has_Biased_Representation;
1177
1178    function Has_Completion (Id : E) return B is
1179    begin
1180       return Flag26 (Id);
1181    end Has_Completion;
1182
1183    function Has_Completion_In_Body (Id : E) return B is
1184    begin
1185       pragma Assert (Is_Type (Id));
1186       return Flag71 (Id);
1187    end Has_Completion_In_Body;
1188
1189    function Has_Complex_Representation (Id : E) return B is
1190    begin
1191       pragma Assert (Is_Type (Id));
1192       return Flag140 (Implementation_Base_Type (Id));
1193    end Has_Complex_Representation;
1194
1195    function Has_Component_Size_Clause (Id : E) return B is
1196    begin
1197       pragma Assert (Is_Array_Type (Id));
1198       return Flag68 (Implementation_Base_Type (Id));
1199    end Has_Component_Size_Clause;
1200
1201    function Has_Constrained_Partial_View (Id : E) return B is
1202    begin
1203       pragma Assert (Is_Type (Id));
1204       return Flag187 (Id);
1205    end Has_Constrained_Partial_View;
1206
1207    function Has_Controlled_Component (Id : E) return B is
1208    begin
1209       return Flag43 (Base_Type (Id));
1210    end Has_Controlled_Component;
1211
1212    function Has_Contiguous_Rep (Id : E) return B is
1213    begin
1214       return Flag181 (Id);
1215    end Has_Contiguous_Rep;
1216
1217    function Has_Controlling_Result (Id : E) return B is
1218    begin
1219       return Flag98 (Id);
1220    end Has_Controlling_Result;
1221
1222    function Has_Convention_Pragma (Id : E) return B is
1223    begin
1224       return Flag119 (Id);
1225    end Has_Convention_Pragma;
1226
1227    function Has_Delayed_Aspects (Id : E) return B is
1228    begin
1229       pragma Assert (Nkind (Id) in N_Entity);
1230       return Flag200 (Id);
1231    end Has_Delayed_Aspects;
1232
1233    function Has_Delayed_Freeze (Id : E) return B is
1234    begin
1235       pragma Assert (Nkind (Id) in N_Entity);
1236       return Flag18 (Id);
1237    end Has_Delayed_Freeze;
1238
1239    function Has_Discriminants (Id : E) return B is
1240    begin
1241       pragma Assert (Nkind (Id) in N_Entity);
1242       return Flag5 (Id);
1243    end Has_Discriminants;
1244
1245    function Has_Dispatch_Table (Id : E) return B is
1246    begin
1247       pragma Assert (Is_Tagged_Type (Id));
1248       return Flag220 (Id);
1249    end Has_Dispatch_Table;
1250
1251    function Has_Enumeration_Rep_Clause (Id : E) return B is
1252    begin
1253       pragma Assert (Is_Enumeration_Type (Id));
1254       return Flag66 (Id);
1255    end Has_Enumeration_Rep_Clause;
1256
1257    function Has_Exit (Id : E) return B is
1258    begin
1259       return Flag47 (Id);
1260    end Has_Exit;
1261
1262    function Has_External_Tag_Rep_Clause (Id : E) return B is
1263    begin
1264       pragma Assert (Is_Tagged_Type (Id));
1265       return Flag110 (Id);
1266    end Has_External_Tag_Rep_Clause;
1267
1268    function Has_Forward_Instantiation (Id : E) return B is
1269    begin
1270       return Flag175 (Id);
1271    end Has_Forward_Instantiation;
1272
1273    function Has_Fully_Qualified_Name (Id : E) return B is
1274    begin
1275       return Flag173 (Id);
1276    end Has_Fully_Qualified_Name;
1277
1278    function Has_Gigi_Rep_Item (Id : E) return B is
1279    begin
1280       return Flag82 (Id);
1281    end Has_Gigi_Rep_Item;
1282
1283    function Has_Homonym (Id : E) return B is
1284    begin
1285       return Flag56 (Id);
1286    end Has_Homonym;
1287
1288    function Has_Inheritable_Invariants (Id : E) return B is
1289    begin
1290       pragma Assert (Is_Type (Id));
1291       return Flag248 (Id);
1292    end Has_Inheritable_Invariants;
1293
1294    function Has_Initial_Value (Id : E) return B is
1295    begin
1296       pragma Assert (Ekind (Id) = E_Variable or else Is_Formal (Id));
1297       return Flag219 (Id);
1298    end Has_Initial_Value;
1299
1300    function Has_Invariants (Id : E) return B is
1301    begin
1302       pragma Assert (Is_Type (Id) or else Ekind (Id) = E_Procedure);
1303       return Flag232 (Id);
1304    end Has_Invariants;
1305
1306    function Has_Machine_Radix_Clause (Id : E) return B is
1307    begin
1308       pragma Assert (Is_Decimal_Fixed_Point_Type (Id));
1309       return Flag83 (Id);
1310    end Has_Machine_Radix_Clause;
1311
1312    function Has_Master_Entity (Id : E) return B is
1313    begin
1314       return Flag21 (Id);
1315    end Has_Master_Entity;
1316
1317    function Has_Missing_Return (Id : E) return B is
1318    begin
1319       pragma Assert (Ekind_In (Id, E_Function, E_Generic_Function));
1320       return Flag142 (Id);
1321    end Has_Missing_Return;
1322
1323    function Has_Nested_Block_With_Handler (Id : E) return B is
1324    begin
1325       return Flag101 (Id);
1326    end Has_Nested_Block_With_Handler;
1327
1328    function Has_Non_Standard_Rep (Id : E) return B is
1329    begin
1330       return Flag75 (Implementation_Base_Type (Id));
1331    end Has_Non_Standard_Rep;
1332
1333    function Has_Object_Size_Clause (Id : E) return B is
1334    begin
1335       pragma Assert (Is_Type (Id));
1336       return Flag172 (Id);
1337    end Has_Object_Size_Clause;
1338
1339    function Has_Per_Object_Constraint (Id : E) return B is
1340    begin
1341       return Flag154 (Id);
1342    end Has_Per_Object_Constraint;
1343
1344    function Has_Persistent_BSS (Id : E) return B is
1345    begin
1346       return Flag188 (Id);
1347    end Has_Persistent_BSS;
1348
1349    function Has_Postconditions (Id : E) return B is
1350    begin
1351       pragma Assert (Is_Subprogram (Id));
1352       return Flag240 (Id);
1353    end Has_Postconditions;
1354
1355    function Has_Pragma_Controlled (Id : E) return B is
1356    begin
1357       pragma Assert (Is_Access_Type (Id));
1358       return Flag27 (Implementation_Base_Type (Id));
1359    end Has_Pragma_Controlled;
1360
1361    function Has_Pragma_Elaborate_Body (Id : E) return B is
1362    begin
1363       return Flag150 (Id);
1364    end Has_Pragma_Elaborate_Body;
1365
1366    function Has_Pragma_Inline (Id : E) return B is
1367    begin
1368       return Flag157 (Id);
1369    end Has_Pragma_Inline;
1370
1371    function Has_Pragma_Inline_Always (Id : E) return B is
1372    begin
1373       return Flag230 (Id);
1374    end Has_Pragma_Inline_Always;
1375
1376    function Has_Pragma_Ordered (Id : E) return B is
1377    begin
1378       pragma Assert (Is_Enumeration_Type (Id));
1379       return Flag198 (Implementation_Base_Type (Id));
1380    end Has_Pragma_Ordered;
1381
1382    function Has_Pragma_Pack (Id : E) return B is
1383    begin
1384       pragma Assert (Is_Record_Type (Id) or else Is_Array_Type (Id));
1385       return Flag121 (Implementation_Base_Type (Id));
1386    end Has_Pragma_Pack;
1387
1388    function Has_Pragma_Preelab_Init (Id : E) return B is
1389    begin
1390       return Flag221 (Id);
1391    end Has_Pragma_Preelab_Init;
1392
1393    function Has_Pragma_Pure (Id : E) return B is
1394    begin
1395       return Flag203 (Id);
1396    end Has_Pragma_Pure;
1397
1398    function Has_Pragma_Pure_Function (Id : E) return B is
1399    begin
1400       return Flag179 (Id);
1401    end Has_Pragma_Pure_Function;
1402
1403    function Has_Pragma_Thread_Local_Storage (Id : E) return B is
1404    begin
1405       return Flag169 (Id);
1406    end Has_Pragma_Thread_Local_Storage;
1407
1408    function Has_Pragma_Unmodified (Id : E) return B is
1409    begin
1410       return Flag233 (Id);
1411    end Has_Pragma_Unmodified;
1412
1413    function Has_Pragma_Unreferenced (Id : E) return B is
1414    begin
1415       return Flag180 (Id);
1416    end Has_Pragma_Unreferenced;
1417
1418    function Has_Pragma_Unreferenced_Objects (Id : E) return B is
1419    begin
1420       pragma Assert (Is_Type (Id));
1421       return Flag212 (Id);
1422    end Has_Pragma_Unreferenced_Objects;
1423
1424    function Has_Predicates (Id : E) return B is
1425    begin
1426       return Flag250 (Id);
1427    end Has_Predicates;
1428
1429    function Has_Primitive_Operations (Id : E) return B is
1430    begin
1431       pragma Assert (Is_Type (Id));
1432       return Flag120 (Base_Type (Id));
1433    end Has_Primitive_Operations;
1434
1435    function Has_Private_Declaration (Id : E) return B is
1436    begin
1437       return Flag155 (Id);
1438    end Has_Private_Declaration;
1439
1440    function Has_Qualified_Name (Id : E) return B is
1441    begin
1442       return Flag161 (Id);
1443    end Has_Qualified_Name;
1444
1445    function Has_RACW (Id : E) return B is
1446    begin
1447       pragma Assert (Ekind (Id) = E_Package);
1448       return Flag214 (Id);
1449    end Has_RACW;
1450
1451    function Has_Record_Rep_Clause (Id : E) return B is
1452    begin
1453       pragma Assert (Is_Record_Type (Id));
1454       return Flag65 (Implementation_Base_Type (Id));
1455    end Has_Record_Rep_Clause;
1456
1457    function Has_Recursive_Call (Id : E) return B is
1458    begin
1459       pragma Assert (Is_Subprogram (Id));
1460       return Flag143 (Id);
1461    end Has_Recursive_Call;
1462
1463    function Has_Size_Clause (Id : E) return B is
1464    begin
1465       return Flag29 (Id);
1466    end Has_Size_Clause;
1467
1468    function Has_Small_Clause (Id : E) return B is
1469    begin
1470       return Flag67 (Id);
1471    end Has_Small_Clause;
1472
1473    function Has_Specified_Layout (Id : E) return B is
1474    begin
1475       pragma Assert (Is_Type (Id));
1476       return Flag100 (Implementation_Base_Type (Id));
1477    end Has_Specified_Layout;
1478
1479    function Has_Specified_Stream_Input (Id : E) return B is
1480    begin
1481       pragma Assert (Is_Type (Id));
1482       return Flag190 (Id);
1483    end Has_Specified_Stream_Input;
1484
1485    function Has_Specified_Stream_Output (Id : E) return B is
1486    begin
1487       pragma Assert (Is_Type (Id));
1488       return Flag191 (Id);
1489    end Has_Specified_Stream_Output;
1490
1491    function Has_Specified_Stream_Read (Id : E) return B is
1492    begin
1493       pragma Assert (Is_Type (Id));
1494       return Flag192 (Id);
1495    end Has_Specified_Stream_Read;
1496
1497    function Has_Specified_Stream_Write (Id : E) return B is
1498    begin
1499       pragma Assert (Is_Type (Id));
1500       return Flag193 (Id);
1501    end Has_Specified_Stream_Write;
1502
1503    function Has_Static_Discriminants (Id : E) return B is
1504    begin
1505       pragma Assert (Is_Type (Id));
1506       return Flag211 (Id);
1507    end Has_Static_Discriminants;
1508
1509    function Has_Storage_Size_Clause (Id : E) return B is
1510    begin
1511       pragma Assert (Is_Access_Type (Id) or else Is_Task_Type (Id));
1512       return Flag23 (Implementation_Base_Type (Id));
1513    end Has_Storage_Size_Clause;
1514
1515    function Has_Stream_Size_Clause (Id : E) return B is
1516    begin
1517       return Flag184 (Id);
1518    end Has_Stream_Size_Clause;
1519
1520    function Has_Subprogram_Descriptor (Id : E) return B is
1521    begin
1522       return Flag93 (Id);
1523    end Has_Subprogram_Descriptor;
1524
1525    function Has_Task (Id : E) return B is
1526    begin
1527       return Flag30 (Base_Type (Id));
1528    end Has_Task;
1529
1530    function Has_Thunks (Id : E) return B is
1531    begin
1532       return Flag228 (Id);
1533    end Has_Thunks;
1534
1535    function Has_Unchecked_Union (Id : E) return B is
1536    begin
1537       return Flag123 (Base_Type (Id));
1538    end Has_Unchecked_Union;
1539
1540    function Has_Unknown_Discriminants (Id : E) return B is
1541    begin
1542       pragma Assert (Is_Type (Id));
1543       return Flag72 (Id);
1544    end Has_Unknown_Discriminants;
1545
1546    function Has_Up_Level_Access (Id : E) return B is
1547    begin
1548       pragma Assert
1549         (Ekind_In (Id, E_Variable, E_Constant, E_Loop_Parameter));
1550       return Flag215 (Id);
1551    end Has_Up_Level_Access;
1552
1553    function Has_Volatile_Components (Id : E) return B is
1554    begin
1555       return Flag87 (Implementation_Base_Type (Id));
1556    end Has_Volatile_Components;
1557
1558    function Has_Xref_Entry (Id : E) return B is
1559    begin
1560       return Flag182 (Implementation_Base_Type (Id));
1561    end Has_Xref_Entry;
1562
1563    function Hiding_Loop_Variable (Id : E) return E is
1564    begin
1565       pragma Assert (Ekind (Id) = E_Variable);
1566       return Node8 (Id);
1567    end Hiding_Loop_Variable;
1568
1569    function Homonym (Id : E) return E is
1570    begin
1571       return Node4 (Id);
1572    end Homonym;
1573
1574    function Interface_Alias (Id : E) return E is
1575    begin
1576       pragma Assert (Is_Subprogram (Id));
1577       return Node25 (Id);
1578    end Interface_Alias;
1579
1580    function Interfaces (Id : E) return L is
1581    begin
1582       pragma Assert (Is_Record_Type (Id));
1583       return Elist25 (Id);
1584    end Interfaces;
1585
1586    function In_Package_Body (Id : E) return B is
1587    begin
1588       return Flag48 (Id);
1589    end In_Package_Body;
1590
1591    function In_Private_Part (Id : E) return B is
1592    begin
1593       return Flag45 (Id);
1594    end In_Private_Part;
1595
1596    function In_Use (Id : E) return B is
1597    begin
1598       pragma Assert (Nkind (Id) in N_Entity);
1599       return Flag8 (Id);
1600    end In_Use;
1601
1602    function Inner_Instances (Id : E) return L is
1603    begin
1604       return Elist23 (Id);
1605    end Inner_Instances;
1606
1607    function Interface_Name (Id : E) return N is
1608    begin
1609       return Node21 (Id);
1610    end Interface_Name;
1611
1612    function Is_Abstract_Subprogram (Id : E) return B is
1613    begin
1614       pragma Assert (Is_Overloadable (Id));
1615       return Flag19 (Id);
1616    end Is_Abstract_Subprogram;
1617
1618    function Is_Abstract_Type (Id : E) return B is
1619    begin
1620       pragma Assert (Is_Type (Id));
1621       return Flag146 (Id);
1622    end Is_Abstract_Type;
1623
1624    function Is_Local_Anonymous_Access (Id : E) return B is
1625    begin
1626       pragma Assert (Is_Access_Type (Id));
1627       return Flag194 (Id);
1628    end Is_Local_Anonymous_Access;
1629
1630    function Is_Access_Constant (Id : E) return B is
1631    begin
1632       pragma Assert (Is_Access_Type (Id));
1633       return Flag69 (Id);
1634    end Is_Access_Constant;
1635
1636    function Is_Ada_2005_Only (Id : E) return B is
1637    begin
1638       return Flag185 (Id);
1639    end Is_Ada_2005_Only;
1640
1641    function Is_Ada_2012_Only (Id : E) return B is
1642    begin
1643       return Flag199 (Id);
1644    end Is_Ada_2012_Only;
1645
1646    function Is_Aliased (Id : E) return B is
1647    begin
1648       pragma Assert (Nkind (Id) in N_Entity);
1649       return Flag15 (Id);
1650    end Is_Aliased;
1651
1652    function Is_AST_Entry (Id : E) return B is
1653    begin
1654       pragma Assert (Is_Entry (Id));
1655       return Flag132 (Id);
1656    end Is_AST_Entry;
1657
1658    function Is_Asynchronous (Id : E) return B is
1659    begin
1660       pragma Assert (Ekind (Id) = E_Procedure or else Is_Type (Id));
1661       return Flag81 (Id);
1662    end Is_Asynchronous;
1663
1664    function Is_Atomic (Id : E) return B is
1665    begin
1666       return Flag85 (Id);
1667    end Is_Atomic;
1668
1669    function Is_Bit_Packed_Array (Id : E) return B is
1670    begin
1671       return Flag122 (Implementation_Base_Type (Id));
1672    end Is_Bit_Packed_Array;
1673
1674    function Is_Called (Id : E) return B is
1675    begin
1676       pragma Assert (Ekind_In (Id, E_Procedure, E_Function));
1677       return Flag102 (Id);
1678    end Is_Called;
1679
1680    function Is_Character_Type (Id : E) return B is
1681    begin
1682       return Flag63 (Id);
1683    end Is_Character_Type;
1684
1685    function Is_Child_Unit (Id : E) return B is
1686    begin
1687       return Flag73 (Id);
1688    end Is_Child_Unit;
1689
1690    function Is_Class_Wide_Equivalent_Type (Id : E) return B is
1691    begin
1692       return Flag35 (Id);
1693    end Is_Class_Wide_Equivalent_Type;
1694
1695    function Is_Compilation_Unit (Id : E) return B is
1696    begin
1697       return Flag149 (Id);
1698    end Is_Compilation_Unit;
1699
1700    function Is_Completely_Hidden (Id : E) return B is
1701    begin
1702       pragma Assert (Ekind (Id) = E_Discriminant);
1703       return Flag103 (Id);
1704    end Is_Completely_Hidden;
1705
1706    function Is_Constr_Subt_For_U_Nominal (Id : E) return B is
1707    begin
1708       return Flag80 (Id);
1709    end Is_Constr_Subt_For_U_Nominal;
1710
1711    function Is_Constr_Subt_For_UN_Aliased (Id : E) return B is
1712    begin
1713       return Flag141 (Id);
1714    end Is_Constr_Subt_For_UN_Aliased;
1715
1716    function Is_Constrained (Id : E) return B is
1717    begin
1718       pragma Assert (Nkind (Id) in N_Entity);
1719       return Flag12 (Id);
1720    end Is_Constrained;
1721
1722    function Is_Constructor (Id : E) return B is
1723    begin
1724       return Flag76 (Id);
1725    end Is_Constructor;
1726
1727    function Is_Controlled (Id : E) return B is
1728    begin
1729       return Flag42 (Base_Type (Id));
1730    end Is_Controlled;
1731
1732    function Is_Controlling_Formal (Id : E) return B is
1733    begin
1734       pragma Assert (Is_Formal (Id));
1735       return Flag97 (Id);
1736    end Is_Controlling_Formal;
1737
1738    function Is_CPP_Class (Id : E) return B is
1739    begin
1740       return Flag74 (Id);
1741    end Is_CPP_Class;
1742
1743    function Is_Descendent_Of_Address (Id : E) return B is
1744    begin
1745       pragma Assert (Is_Type (Id));
1746       return Flag223 (Id);
1747    end Is_Descendent_Of_Address;
1748
1749    function Is_Discrim_SO_Function (Id : E) return B is
1750    begin
1751       return Flag176 (Id);
1752    end Is_Discrim_SO_Function;
1753
1754    function Is_Dispatch_Table_Entity (Id : E) return B is
1755    begin
1756       return Flag234 (Id);
1757    end Is_Dispatch_Table_Entity;
1758
1759    function Is_Dispatching_Operation (Id : E) return B is
1760    begin
1761       pragma Assert (Nkind (Id) in N_Entity);
1762       return Flag6 (Id);
1763    end Is_Dispatching_Operation;
1764
1765    function Is_Eliminated (Id : E) return B is
1766    begin
1767       return Flag124 (Id);
1768    end Is_Eliminated;
1769
1770    function Is_Entry_Formal (Id : E) return B is
1771    begin
1772       return Flag52 (Id);
1773    end Is_Entry_Formal;
1774
1775    function Is_Exported (Id : E) return B is
1776    begin
1777       return Flag99 (Id);
1778    end Is_Exported;
1779
1780    function Is_First_Subtype (Id : E) return B is
1781    begin
1782       return Flag70 (Id);
1783    end Is_First_Subtype;
1784
1785    function Is_For_Access_Subtype (Id : E) return B is
1786    begin
1787       pragma Assert (Ekind_In (Id, E_Record_Subtype, E_Private_Subtype));
1788       return Flag118 (Id);
1789    end Is_For_Access_Subtype;
1790
1791    function Is_Formal_Subprogram (Id : E) return B is
1792    begin
1793       return Flag111 (Id);
1794    end Is_Formal_Subprogram;
1795
1796    function Is_Frozen (Id : E) return B is
1797    begin
1798       return Flag4 (Id);
1799    end Is_Frozen;
1800
1801    function Is_Generic_Actual_Type (Id : E) return B is
1802    begin
1803       pragma Assert (Is_Type (Id));
1804       return Flag94 (Id);
1805    end Is_Generic_Actual_Type;
1806
1807    function Is_Generic_Instance (Id : E) return B is
1808    begin
1809       return Flag130 (Id);
1810    end Is_Generic_Instance;
1811
1812    function Is_Generic_Type (Id : E) return B is
1813    begin
1814       pragma Assert (Nkind (Id) in N_Entity);
1815       return Flag13 (Id);
1816    end Is_Generic_Type;
1817
1818    function Is_Hidden (Id : E) return B is
1819    begin
1820       return Flag57 (Id);
1821    end Is_Hidden;
1822
1823    function Is_Hidden_Open_Scope (Id : E) return B is
1824    begin
1825       return Flag171 (Id);
1826    end Is_Hidden_Open_Scope;
1827
1828    function Is_Immediately_Visible (Id : E) return B is
1829    begin
1830       pragma Assert (Nkind (Id) in N_Entity);
1831       return Flag7 (Id);
1832    end Is_Immediately_Visible;
1833
1834    function Is_Imported (Id : E) return B is
1835    begin
1836       return Flag24 (Id);
1837    end Is_Imported;
1838
1839    function Is_Inlined (Id : E) return B is
1840    begin
1841       return Flag11 (Id);
1842    end Is_Inlined;
1843
1844    function Is_Interface (Id : E) return B is
1845    begin
1846       return Flag186 (Id);
1847    end Is_Interface;
1848
1849    function Is_Instantiated (Id : E) return B is
1850    begin
1851       return Flag126 (Id);
1852    end Is_Instantiated;
1853
1854    function Is_Internal (Id : E) return B is
1855    begin
1856       pragma Assert (Nkind (Id) in N_Entity);
1857       return Flag17 (Id);
1858    end Is_Internal;
1859
1860    function Is_Interrupt_Handler (Id : E) return B is
1861    begin
1862       pragma Assert (Nkind (Id) in N_Entity);
1863       return Flag89 (Id);
1864    end Is_Interrupt_Handler;
1865
1866    function Is_Intrinsic_Subprogram (Id : E) return B is
1867    begin
1868       return Flag64 (Id);
1869    end Is_Intrinsic_Subprogram;
1870
1871    function Is_Itype (Id : E) return B is
1872    begin
1873       return Flag91 (Id);
1874    end Is_Itype;
1875
1876    function Is_Known_Non_Null (Id : E) return B is
1877    begin
1878       return Flag37 (Id);
1879    end Is_Known_Non_Null;
1880
1881    function Is_Known_Null (Id : E) return B is
1882    begin
1883       return Flag204 (Id);
1884    end Is_Known_Null;
1885
1886    function Is_Known_Valid (Id : E) return B is
1887    begin
1888       return Flag170 (Id);
1889    end Is_Known_Valid;
1890
1891    function Is_Limited_Composite (Id : E) return B is
1892    begin
1893       return Flag106 (Id);
1894    end Is_Limited_Composite;
1895
1896    function Is_Limited_Interface (Id : E) return B is
1897    begin
1898       return Flag197 (Id);
1899    end Is_Limited_Interface;
1900
1901    function Is_Limited_Record (Id : E) return B is
1902    begin
1903       return Flag25 (Id);
1904    end Is_Limited_Record;
1905
1906    function Is_Machine_Code_Subprogram (Id : E) return B is
1907    begin
1908       pragma Assert (Is_Subprogram (Id));
1909       return Flag137 (Id);
1910    end Is_Machine_Code_Subprogram;
1911
1912    function Is_Non_Static_Subtype (Id : E) return B is
1913    begin
1914       pragma Assert (Is_Type (Id));
1915       return Flag109 (Id);
1916    end Is_Non_Static_Subtype;
1917
1918    function Is_Null_Init_Proc (Id : E) return B is
1919    begin
1920       pragma Assert (Ekind (Id) = E_Procedure);
1921       return Flag178 (Id);
1922    end Is_Null_Init_Proc;
1923
1924    function Is_Obsolescent (Id : E) return B is
1925    begin
1926       return Flag153 (Id);
1927    end Is_Obsolescent;
1928
1929    function Is_Only_Out_Parameter (Id : E) return B is
1930    begin
1931       pragma Assert (Is_Formal (Id));
1932       return Flag226 (Id);
1933    end Is_Only_Out_Parameter;
1934
1935    function Is_Optional_Parameter (Id : E) return B is
1936    begin
1937       pragma Assert (Is_Formal (Id));
1938       return Flag134 (Id);
1939    end Is_Optional_Parameter;
1940
1941    function Is_Package_Body_Entity (Id : E) return B is
1942    begin
1943       return Flag160 (Id);
1944    end Is_Package_Body_Entity;
1945
1946    function Is_Packed (Id : E) return B is
1947    begin
1948       return Flag51 (Implementation_Base_Type (Id));
1949    end Is_Packed;
1950
1951    function Is_Packed_Array_Type (Id : E) return B is
1952    begin
1953       return Flag138 (Id);
1954    end Is_Packed_Array_Type;
1955
1956    function Is_Potentially_Use_Visible (Id : E) return B is
1957    begin
1958       pragma Assert (Nkind (Id) in N_Entity);
1959       return Flag9 (Id);
1960    end Is_Potentially_Use_Visible;
1961
1962    function Is_Preelaborated (Id : E) return B is
1963    begin
1964       return Flag59 (Id);
1965    end Is_Preelaborated;
1966
1967    function Is_Primitive (Id : E) return B is
1968    begin
1969       pragma Assert
1970         (Is_Overloadable (Id)
1971          or else Ekind_In (Id, E_Generic_Function, E_Generic_Procedure));
1972       return Flag218 (Id);
1973    end Is_Primitive;
1974
1975    function Is_Primitive_Wrapper (Id : E) return B is
1976    begin
1977       pragma Assert (Ekind_In (Id, E_Function, E_Procedure));
1978       return Flag195 (Id);
1979    end Is_Primitive_Wrapper;
1980
1981    function Is_Private_Composite (Id : E) return B is
1982    begin
1983       pragma Assert (Is_Type (Id));
1984       return Flag107 (Id);
1985    end Is_Private_Composite;
1986
1987    function Is_Private_Descendant (Id : E) return B is
1988    begin
1989       return Flag53 (Id);
1990    end Is_Private_Descendant;
1991
1992    function Is_Private_Primitive (Id : E) return B is
1993    begin
1994       pragma Assert (Ekind_In (Id, E_Function, E_Procedure));
1995       return Flag245 (Id);
1996    end Is_Private_Primitive;
1997
1998    function Is_Public (Id : E) return B is
1999    begin
2000       pragma Assert (Nkind (Id) in N_Entity);
2001       return Flag10 (Id);
2002    end Is_Public;
2003
2004    function Is_Pure (Id : E) return B is
2005    begin
2006       return Flag44 (Id);
2007    end Is_Pure;
2008
2009    function Is_Pure_Unit_Access_Type (Id : E) return B is
2010    begin
2011       pragma Assert (Is_Access_Type (Id));
2012       return Flag189 (Id);
2013    end Is_Pure_Unit_Access_Type;
2014
2015    function Is_RACW_Stub_Type (Id : E) return B is
2016    begin
2017       pragma Assert (Is_Type (Id));
2018       return Flag244 (Id);
2019    end Is_RACW_Stub_Type;
2020
2021    function Is_Raised (Id : E) return B is
2022    begin
2023       pragma Assert (Ekind (Id) = E_Exception);
2024       return Flag224 (Id);
2025    end Is_Raised;
2026
2027    function Is_Remote_Call_Interface (Id : E) return B is
2028    begin
2029       return Flag62 (Id);
2030    end Is_Remote_Call_Interface;
2031
2032    function Is_Remote_Types (Id : E) return B is
2033    begin
2034       return Flag61 (Id);
2035    end Is_Remote_Types;
2036
2037    function Is_Renaming_Of_Object (Id : E) return B is
2038    begin
2039       return Flag112 (Id);
2040    end Is_Renaming_Of_Object;
2041
2042    function Is_Return_Object (Id : E) return B is
2043    begin
2044       return Flag209 (Id);
2045    end Is_Return_Object;
2046
2047    function Is_Shared_Passive (Id : E) return B is
2048    begin
2049       return Flag60 (Id);
2050    end Is_Shared_Passive;
2051
2052    function Is_Statically_Allocated (Id : E) return B is
2053    begin
2054       return Flag28 (Id);
2055    end Is_Statically_Allocated;
2056
2057    function Is_Tag (Id : E) return B is
2058    begin
2059       pragma Assert (Nkind (Id) in N_Entity);
2060       return Flag78 (Id);
2061    end Is_Tag;
2062
2063    function Is_Tagged_Type (Id : E) return B is
2064    begin
2065       return Flag55 (Id);
2066    end Is_Tagged_Type;
2067
2068    function Is_Thunk (Id : E) return B is
2069    begin
2070       pragma Assert (Is_Subprogram (Id));
2071       return Flag225 (Id);
2072    end Is_Thunk;
2073
2074    function Is_Trivial_Subprogram (Id : E) return B is
2075    begin
2076       return Flag235 (Id);
2077    end Is_Trivial_Subprogram;
2078
2079    function Is_True_Constant (Id : E) return B is
2080    begin
2081       return Flag163 (Id);
2082    end Is_True_Constant;
2083
2084    function Is_Unchecked_Union (Id : E) return B is
2085    begin
2086       return Flag117 (Implementation_Base_Type (Id));
2087    end Is_Unchecked_Union;
2088
2089    function Is_Underlying_Record_View (Id : E) return B is
2090    begin
2091       return Flag246 (Id);
2092    end Is_Underlying_Record_View;
2093
2094    function Is_Unsigned_Type (Id : E) return B is
2095    begin
2096       pragma Assert (Is_Type (Id));
2097       return Flag144 (Id);
2098    end Is_Unsigned_Type;
2099
2100    function Is_Valued_Procedure (Id : E) return B is
2101    begin
2102       pragma Assert (Ekind (Id) = E_Procedure);
2103       return Flag127 (Id);
2104    end Is_Valued_Procedure;
2105
2106    function Is_Visible_Child_Unit (Id : E) return B is
2107    begin
2108       pragma Assert (Is_Child_Unit (Id));
2109       return Flag116 (Id);
2110    end Is_Visible_Child_Unit;
2111
2112    function Is_Visible_Formal (Id : E) return B is
2113    begin
2114       return Flag206 (Id);
2115    end Is_Visible_Formal;
2116
2117    function Is_VMS_Exception (Id : E) return B is
2118    begin
2119       return Flag133 (Id);
2120    end Is_VMS_Exception;
2121
2122    function Is_Volatile (Id : E) return B is
2123    begin
2124       pragma Assert (Nkind (Id) in N_Entity);
2125
2126       if Is_Type (Id) then
2127          return Flag16 (Base_Type (Id));
2128       else
2129          return Flag16 (Id);
2130       end if;
2131    end Is_Volatile;
2132
2133    function Itype_Printed (Id : E) return B is
2134    begin
2135       pragma Assert (Is_Itype (Id));
2136       return Flag202 (Id);
2137    end Itype_Printed;
2138
2139    function Kill_Elaboration_Checks (Id : E) return B is
2140    begin
2141       return Flag32 (Id);
2142    end Kill_Elaboration_Checks;
2143
2144    function Kill_Range_Checks (Id : E) return B is
2145    begin
2146       return Flag33 (Id);
2147    end Kill_Range_Checks;
2148
2149    function Kill_Tag_Checks (Id : E) return B is
2150    begin
2151       return Flag34 (Id);
2152    end Kill_Tag_Checks;
2153
2154    function Known_To_Have_Preelab_Init (Id : E) return B is
2155    begin
2156       pragma Assert (Is_Type (Id));
2157       return Flag207 (Id);
2158    end Known_To_Have_Preelab_Init;
2159
2160    function Last_Assignment (Id : E) return N is
2161    begin
2162       pragma Assert (Is_Assignable (Id));
2163       return Node26 (Id);
2164    end Last_Assignment;
2165
2166    function Last_Entity (Id : E) return E is
2167    begin
2168       return Node20 (Id);
2169    end Last_Entity;
2170
2171    function Limited_View (Id : E) return E is
2172    begin
2173       pragma Assert (Ekind (Id) = E_Package);
2174       return Node23 (Id);
2175    end Limited_View;
2176
2177    function Lit_Indexes (Id : E) return E is
2178    begin
2179       pragma Assert (Is_Enumeration_Type (Id));
2180       return Node15 (Id);
2181    end Lit_Indexes;
2182
2183    function Lit_Strings (Id : E) return E is
2184    begin
2185       pragma Assert (Is_Enumeration_Type (Id));
2186       return Node16 (Id);
2187    end Lit_Strings;
2188
2189    function Low_Bound_Tested (Id : E) return B is
2190    begin
2191       return Flag205 (Id);
2192    end Low_Bound_Tested;
2193
2194    function Machine_Radix_10 (Id : E) return B is
2195    begin
2196       pragma Assert (Is_Decimal_Fixed_Point_Type (Id));
2197       return Flag84 (Id);
2198    end Machine_Radix_10;
2199
2200    function Master_Id (Id : E) return E is
2201    begin
2202       pragma Assert (Is_Access_Type (Id));
2203       return Node17 (Id);
2204    end Master_Id;
2205
2206    function Materialize_Entity (Id : E) return B is
2207    begin
2208       return Flag168 (Id);
2209    end Materialize_Entity;
2210
2211    function Mechanism (Id : E) return M is
2212    begin
2213       pragma Assert (Ekind (Id) = E_Function or else Is_Formal (Id));
2214       return UI_To_Int (Uint8 (Id));
2215    end Mechanism;
2216
2217    function Modulus (Id : E) return Uint is
2218    begin
2219       pragma Assert (Is_Modular_Integer_Type (Id));
2220       return Uint17 (Base_Type (Id));
2221    end Modulus;
2222
2223    function Must_Be_On_Byte_Boundary (Id : E) return B is
2224    begin
2225       pragma Assert (Is_Type (Id));
2226       return Flag183 (Id);
2227    end Must_Be_On_Byte_Boundary;
2228
2229    function Must_Have_Preelab_Init (Id : E) return B is
2230    begin
2231       pragma Assert (Is_Type (Id));
2232       return Flag208 (Id);
2233    end Must_Have_Preelab_Init;
2234
2235    function Needs_Debug_Info (Id : E) return B is
2236    begin
2237       return Flag147 (Id);
2238    end Needs_Debug_Info;
2239
2240    function Needs_No_Actuals (Id : E) return B is
2241    begin
2242       pragma Assert
2243         (Is_Overloadable (Id)
2244           or else Ekind_In (Id, E_Subprogram_Type, E_Entry_Family));
2245       return Flag22 (Id);
2246    end Needs_No_Actuals;
2247
2248    function Never_Set_In_Source (Id : E) return B is
2249    begin
2250       return Flag115 (Id);
2251    end Never_Set_In_Source;
2252
2253    function Next_Inlined_Subprogram (Id : E) return E is
2254    begin
2255       return Node12 (Id);
2256    end Next_Inlined_Subprogram;
2257
2258    function No_Pool_Assigned (Id : E) return B is
2259    begin
2260       pragma Assert (Is_Access_Type (Id));
2261       return Flag131 (Root_Type (Id));
2262    end No_Pool_Assigned;
2263
2264    function No_Return (Id : E) return B is
2265    begin
2266       return Flag113 (Id);
2267    end No_Return;
2268
2269    function No_Strict_Aliasing (Id : E) return B is
2270    begin
2271       pragma Assert (Is_Access_Type (Id));
2272       return Flag136 (Base_Type (Id));
2273    end No_Strict_Aliasing;
2274
2275    function Non_Binary_Modulus (Id : E) return B is
2276    begin
2277       pragma Assert (Is_Type (Id));
2278       return Flag58 (Base_Type (Id));
2279    end Non_Binary_Modulus;
2280
2281    function Non_Limited_View (Id : E) return E is
2282    begin
2283       pragma Assert (Ekind (Id) in Incomplete_Kind);
2284       return Node17 (Id);
2285    end Non_Limited_View;
2286
2287    function Nonzero_Is_True (Id : E) return B is
2288    begin
2289       pragma Assert (Root_Type (Id) = Standard_Boolean);
2290       return Flag162 (Base_Type (Id));
2291    end Nonzero_Is_True;
2292
2293    function Normalized_First_Bit (Id : E) return U is
2294    begin
2295       pragma Assert (Ekind_In (Id, E_Component, E_Discriminant));
2296       return Uint8 (Id);
2297    end Normalized_First_Bit;
2298
2299    function Normalized_Position (Id : E) return U is
2300    begin
2301       pragma Assert (Ekind_In (Id, E_Component, E_Discriminant));
2302       return Uint14 (Id);
2303    end Normalized_Position;
2304
2305    function Normalized_Position_Max (Id : E) return U is
2306    begin
2307       pragma Assert (Ekind_In (Id, E_Component, E_Discriminant));
2308       return Uint10 (Id);
2309    end Normalized_Position_Max;
2310
2311    function OK_To_Rename (Id : E) return B is
2312    begin
2313       pragma Assert (Ekind (Id) = E_Variable);
2314       return Flag247 (Id);
2315    end OK_To_Rename;
2316
2317    function OK_To_Reorder_Components (Id : E) return B is
2318    begin
2319       pragma Assert (Is_Record_Type (Id));
2320       return Flag239 (Base_Type (Id));
2321    end OK_To_Reorder_Components;
2322
2323    function Optimize_Alignment_Space (Id : E) return B is
2324    begin
2325       pragma Assert
2326         (Is_Type (Id) or else Ekind_In (Id, E_Constant, E_Variable));
2327       return Flag241 (Id);
2328    end Optimize_Alignment_Space;
2329
2330    function Optimize_Alignment_Time (Id : E) return B is
2331    begin
2332       pragma Assert
2333         (Is_Type (Id) or else Ekind_In (Id, E_Constant, E_Variable));
2334       return Flag242 (Id);
2335    end Optimize_Alignment_Time;
2336
2337    function Original_Array_Type (Id : E) return E is
2338    begin
2339       pragma Assert (Is_Array_Type (Id) or else Is_Modular_Integer_Type (Id));
2340       return Node21 (Id);
2341    end Original_Array_Type;
2342
2343    function Original_Record_Component (Id : E) return E is
2344    begin
2345       pragma Assert (Ekind_In (Id, E_Void, E_Component, E_Discriminant));
2346       return Node22 (Id);
2347    end Original_Record_Component;
2348
2349    function Overlays_Constant (Id : E) return B is
2350    begin
2351       return Flag243 (Id);
2352    end Overlays_Constant;
2353
2354    function Overridden_Operation (Id : E) return E is
2355    begin
2356       return Node26 (Id);
2357    end Overridden_Operation;
2358
2359    function Package_Instantiation (Id : E) return N is
2360    begin
2361       pragma Assert (Ekind_In (Id, E_Package, E_Generic_Package));
2362       return Node26 (Id);
2363    end Package_Instantiation;
2364
2365    function Packed_Array_Type (Id : E) return E is
2366    begin
2367       pragma Assert (Is_Array_Type (Id));
2368       return Node23 (Id);
2369    end Packed_Array_Type;
2370
2371    function Parent_Subtype (Id : E) return E is
2372    begin
2373       pragma Assert (Is_Record_Type (Id));
2374       return Node19 (Base_Type (Id));
2375    end Parent_Subtype;
2376
2377    function Postcondition_Proc (Id : E) return E is
2378    begin
2379       pragma Assert (Ekind (Id) = E_Procedure);
2380       return Node8 (Id);
2381    end Postcondition_Proc;
2382
2383    function PPC_Wrapper (Id : E) return E is
2384    begin
2385       pragma Assert (Ekind_In (Id, E_Entry, E_Entry_Family));
2386       return Node25 (Id);
2387    end PPC_Wrapper;
2388
2389    function Prival (Id : E) return E is
2390    begin
2391       pragma Assert (Is_Protected_Component (Id));
2392       return Node17 (Id);
2393    end Prival;
2394
2395    function Prival_Link (Id : E) return E is
2396    begin
2397       pragma Assert (Ekind_In (Id, E_Constant, E_Variable));
2398       return Node20 (Id);
2399    end Prival_Link;
2400
2401    function Private_Dependents (Id : E) return L is
2402    begin
2403       pragma Assert (Is_Incomplete_Or_Private_Type (Id));
2404       return Elist18 (Id);
2405    end Private_Dependents;
2406
2407    function Private_View (Id : E) return N is
2408    begin
2409       pragma Assert (Is_Private_Type (Id));
2410       return Node22 (Id);
2411    end Private_View;
2412
2413    function Protected_Body_Subprogram (Id : E) return E is
2414    begin
2415       pragma Assert (Is_Subprogram (Id) or else Is_Entry (Id));
2416       return Node11 (Id);
2417    end Protected_Body_Subprogram;
2418
2419    function Protected_Formal (Id : E) return E is
2420    begin
2421       pragma Assert (Is_Formal (Id));
2422       return Node22 (Id);
2423    end Protected_Formal;
2424
2425    function Protection_Object (Id : E) return E is
2426    begin
2427       pragma Assert
2428         (Ekind_In (Id, E_Entry, E_Entry_Family, E_Function, E_Procedure));
2429       return Node23 (Id);
2430    end Protection_Object;
2431
2432    function Reachable (Id : E) return B is
2433    begin
2434       return Flag49 (Id);
2435    end Reachable;
2436
2437    function Referenced (Id : E) return B is
2438    begin
2439       return Flag156 (Id);
2440    end Referenced;
2441
2442    function Referenced_As_LHS (Id : E) return B is
2443    begin
2444       return Flag36 (Id);
2445    end Referenced_As_LHS;
2446
2447    function Referenced_As_Out_Parameter (Id : E) return B is
2448    begin
2449       return Flag227 (Id);
2450    end Referenced_As_Out_Parameter;
2451
2452    function Register_Exception_Call (Id : E) return N is
2453    begin
2454       pragma Assert (Ekind (Id) = E_Exception);
2455       return Node20 (Id);
2456    end Register_Exception_Call;
2457
2458    function Related_Array_Object (Id : E) return E is
2459    begin
2460       pragma Assert (Is_Array_Type (Id));
2461       return Node19 (Id);
2462    end Related_Array_Object;
2463
2464    function Related_Expression (Id : E) return N is
2465    begin
2466       pragma Assert (Ekind (Id) in Type_Kind
2467                        or else Ekind_In (Id, E_Constant, E_Variable));
2468       return Node24 (Id);
2469    end Related_Expression;
2470
2471    function Related_Instance (Id : E) return E is
2472    begin
2473       pragma Assert (Ekind_In (Id, E_Package, E_Package_Body));
2474       return Node15 (Id);
2475    end Related_Instance;
2476
2477    function Related_Type (Id : E) return E is
2478    begin
2479       pragma Assert (Ekind_In (Id, E_Component, E_Constant, E_Variable));
2480       return Node27 (Id);
2481    end Related_Type;
2482
2483    function Relative_Deadline_Variable (Id : E) return E is
2484    begin
2485       pragma Assert (Is_Task_Type (Id));
2486       return Node26 (Implementation_Base_Type (Id));
2487    end Relative_Deadline_Variable;
2488
2489    function Renamed_Entity (Id : E) return N is
2490    begin
2491       return Node18 (Id);
2492    end Renamed_Entity;
2493
2494    function Renamed_In_Spec (Id : E) return B is
2495    begin
2496       pragma Assert (Ekind (Id) = E_Package);
2497       return Flag231 (Id);
2498    end Renamed_In_Spec;
2499
2500    function Renamed_Object (Id : E) return N is
2501    begin
2502       return Node18 (Id);
2503    end Renamed_Object;
2504
2505    function Renaming_Map (Id : E) return U is
2506    begin
2507       return Uint9 (Id);
2508    end Renaming_Map;
2509
2510    function Requires_Overriding (Id : E) return B is
2511    begin
2512       pragma Assert (Is_Overloadable (Id));
2513       return Flag213 (Id);
2514    end Requires_Overriding;
2515
2516    function Return_Present (Id : E) return B is
2517    begin
2518       return Flag54 (Id);
2519    end Return_Present;
2520
2521    function Return_Applies_To (Id : E) return N is
2522    begin
2523       return Node8 (Id);
2524    end Return_Applies_To;
2525
2526    function Returns_By_Ref (Id : E) return B is
2527    begin
2528       return Flag90 (Id);
2529    end Returns_By_Ref;
2530
2531    function Reverse_Bit_Order (Id : E) return B is
2532    begin
2533       pragma Assert (Is_Record_Type (Id));
2534       return Flag164 (Base_Type (Id));
2535    end Reverse_Bit_Order;
2536
2537    function RM_Size (Id : E) return U is
2538    begin
2539       pragma Assert (Is_Type (Id));
2540       return Uint13 (Id);
2541    end RM_Size;
2542
2543    function Scalar_Range (Id : E) return N is
2544    begin
2545       return Node20 (Id);
2546    end Scalar_Range;
2547
2548    function Scale_Value (Id : E) return U is
2549    begin
2550       return Uint15 (Id);
2551    end Scale_Value;
2552
2553    function Scope_Depth_Value (Id : E) return U is
2554    begin
2555       return Uint22 (Id);
2556    end Scope_Depth_Value;
2557
2558    function Sec_Stack_Needed_For_Return (Id : E) return B is
2559    begin
2560       return Flag167 (Id);
2561    end Sec_Stack_Needed_For_Return;
2562
2563    function Shadow_Entities (Id : E) return S is
2564    begin
2565       pragma Assert (Ekind_In (Id, E_Package, E_Generic_Package));
2566       return List14 (Id);
2567    end Shadow_Entities;
2568
2569    function Shared_Var_Procs_Instance (Id : E) return E is
2570    begin
2571       pragma Assert (Ekind (Id) = E_Variable);
2572       return Node22 (Id);
2573    end Shared_Var_Procs_Instance;
2574
2575    function Size_Check_Code (Id : E) return N is
2576    begin
2577       pragma Assert (Ekind_In (Id, E_Constant, E_Variable));
2578       return Node19 (Id);
2579    end Size_Check_Code;
2580
2581    function Size_Depends_On_Discriminant (Id : E) return B is
2582    begin
2583       return Flag177 (Id);
2584    end Size_Depends_On_Discriminant;
2585
2586    function Size_Known_At_Compile_Time (Id : E) return B is
2587    begin
2588       return Flag92 (Id);
2589    end Size_Known_At_Compile_Time;
2590
2591    function Small_Value (Id : E) return R is
2592    begin
2593       pragma Assert (Is_Fixed_Point_Type (Id));
2594       return Ureal21 (Id);
2595    end Small_Value;
2596
2597    function Spec_Entity (Id : E) return E is
2598    begin
2599       pragma Assert (Ekind (Id) = E_Package_Body or else Is_Formal (Id));
2600       return Node19 (Id);
2601    end Spec_Entity;
2602
2603    function Spec_PPC_List (Id : E) return N is
2604    begin
2605       pragma Assert
2606         (Ekind_In (Id,  E_Entry, E_Entry_Family)
2607           or else Is_Subprogram (Id)
2608           or else Is_Generic_Subprogram (Id));
2609       return Node24 (Id);
2610    end Spec_PPC_List;
2611
2612    function Static_Predicate (Id : E) return S is
2613    begin
2614       pragma Assert (Is_Discrete_Type (Id));
2615       return List25 (Id);
2616    end Static_Predicate;
2617
2618    function Storage_Size_Variable (Id : E) return E is
2619    begin
2620       pragma Assert (Is_Access_Type (Id) or else Is_Task_Type (Id));
2621       return Node15 (Implementation_Base_Type (Id));
2622    end Storage_Size_Variable;
2623
2624    function Static_Elaboration_Desired (Id : E) return B is
2625    begin
2626       pragma Assert (Ekind (Id) = E_Package);
2627       return Flag77 (Id);
2628    end Static_Elaboration_Desired;
2629
2630    function Static_Initialization (Id : E) return N is
2631    begin
2632       pragma Assert
2633         (Ekind (Id) = E_Procedure and then not Is_Dispatching_Operation (Id));
2634       return Node26 (Id);
2635    end Static_Initialization;
2636
2637    function Stored_Constraint (Id : E) return L is
2638    begin
2639       pragma Assert
2640         (Is_Composite_Type (Id) and then not Is_Array_Type (Id));
2641       return Elist23 (Id);
2642    end Stored_Constraint;
2643
2644    function Strict_Alignment (Id : E) return B is
2645    begin
2646       return Flag145 (Implementation_Base_Type (Id));
2647    end Strict_Alignment;
2648
2649    function String_Literal_Length (Id : E) return U is
2650    begin
2651       return Uint16 (Id);
2652    end String_Literal_Length;
2653
2654    function String_Literal_Low_Bound (Id : E) return N is
2655    begin
2656       return Node15 (Id);
2657    end String_Literal_Low_Bound;
2658
2659    function Subprograms_For_Type (Id : E) return E is
2660    begin
2661       pragma Assert (Is_Type (Id) or else Is_Subprogram (Id));
2662       return Node29 (Id);
2663    end Subprograms_For_Type;
2664
2665    function Suppress_Elaboration_Warnings (Id : E) return B is
2666    begin
2667       return Flag148 (Id);
2668    end Suppress_Elaboration_Warnings;
2669
2670    function Suppress_Init_Proc (Id : E) return B is
2671    begin
2672       return Flag105 (Base_Type (Id));
2673    end Suppress_Init_Proc;
2674
2675    function Suppress_Style_Checks (Id : E) return B is
2676    begin
2677       return Flag165 (Id);
2678    end Suppress_Style_Checks;
2679
2680    function Suppress_Value_Tracking_On_Call (Id : E) return B is
2681    begin
2682       return Flag217 (Id);
2683    end Suppress_Value_Tracking_On_Call;
2684
2685    function Task_Body_Procedure (Id : E) return N is
2686    begin
2687       pragma Assert (Ekind (Id) in Task_Kind);
2688       return Node25 (Id);
2689    end Task_Body_Procedure;
2690
2691    function Treat_As_Volatile (Id : E) return B is
2692    begin
2693       return Flag41 (Id);
2694    end Treat_As_Volatile;
2695
2696    function Underlying_Full_View (Id : E) return E is
2697    begin
2698       pragma Assert (Ekind (Id) in Private_Kind);
2699       return Node19 (Id);
2700    end Underlying_Full_View;
2701
2702    function Underlying_Record_View (Id : E) return E is
2703    begin
2704       return Node28 (Id);
2705    end Underlying_Record_View;
2706
2707    function Universal_Aliasing (Id : E) return B is
2708    begin
2709       pragma Assert (Is_Type (Id));
2710       return Flag216 (Base_Type (Id));
2711    end Universal_Aliasing;
2712
2713    function Unset_Reference (Id : E) return N is
2714    begin
2715       return Node16 (Id);
2716    end Unset_Reference;
2717
2718    function Used_As_Generic_Actual (Id : E) return B is
2719    begin
2720       return Flag222 (Id);
2721    end Used_As_Generic_Actual;
2722
2723    function Uses_Sec_Stack (Id : E) return B is
2724    begin
2725       return Flag95 (Id);
2726    end Uses_Sec_Stack;
2727
2728    function Warnings_Off (Id : E) return B is
2729    begin
2730       return Flag96 (Id);
2731    end Warnings_Off;
2732
2733    function Warnings_Off_Used (Id : E) return B is
2734    begin
2735       return Flag236 (Id);
2736    end Warnings_Off_Used;
2737
2738    function Warnings_Off_Used_Unmodified (Id : E) return B is
2739    begin
2740       return Flag237 (Id);
2741    end Warnings_Off_Used_Unmodified;
2742
2743    function Warnings_Off_Used_Unreferenced (Id : E) return B is
2744    begin
2745       return Flag238 (Id);
2746    end Warnings_Off_Used_Unreferenced;
2747
2748    function Wrapped_Entity (Id : E) return E is
2749    begin
2750       pragma Assert (Ekind_In (Id, E_Function, E_Procedure)
2751                        and then Is_Primitive_Wrapper (Id));
2752       return Node27 (Id);
2753    end Wrapped_Entity;
2754
2755    function Was_Hidden (Id : E) return B is
2756    begin
2757       return Flag196 (Id);
2758    end Was_Hidden;
2759
2760    ------------------------------
2761    -- Classification Functions --
2762    ------------------------------
2763
2764    function Is_Access_Type                      (Id : E) return B is
2765    begin
2766       return Ekind (Id) in Access_Kind;
2767    end Is_Access_Type;
2768
2769    function Is_Access_Protected_Subprogram_Type (Id : E) return B is
2770    begin
2771       return Ekind (Id) in Access_Protected_Kind;
2772    end Is_Access_Protected_Subprogram_Type;
2773
2774    function Is_Access_Subprogram_Type           (Id : E) return B is
2775    begin
2776       return Ekind (Id) in Access_Subprogram_Kind;
2777    end Is_Access_Subprogram_Type;
2778
2779    function Is_Aggregate_Type                   (Id : E) return B is
2780    begin
2781       return Ekind (Id) in Aggregate_Kind;
2782    end Is_Aggregate_Type;
2783
2784    function Is_Array_Type                       (Id : E) return B is
2785    begin
2786       return Ekind (Id) in Array_Kind;
2787    end Is_Array_Type;
2788
2789    function Is_Assignable                       (Id : E) return B is
2790    begin
2791       return Ekind (Id) in Assignable_Kind;
2792    end Is_Assignable;
2793
2794    function Is_Class_Wide_Type                  (Id : E) return B is
2795    begin
2796       return Ekind (Id) in Class_Wide_Kind;
2797    end Is_Class_Wide_Type;
2798
2799    function Is_Composite_Type                   (Id : E) return B is
2800    begin
2801       return Ekind (Id) in Composite_Kind;
2802    end Is_Composite_Type;
2803
2804    function Is_Concurrent_Body                  (Id : E) return B is
2805    begin
2806       return Ekind (Id) in
2807         Concurrent_Body_Kind;
2808    end Is_Concurrent_Body;
2809
2810    function Is_Concurrent_Record_Type           (Id : E) return B is
2811    begin
2812       return Flag20 (Id);
2813    end Is_Concurrent_Record_Type;
2814
2815    function Is_Concurrent_Type                  (Id : E) return B is
2816    begin
2817       return Ekind (Id) in Concurrent_Kind;
2818    end Is_Concurrent_Type;
2819
2820    function Is_Decimal_Fixed_Point_Type         (Id : E) return B is
2821    begin
2822       return Ekind (Id) in
2823         Decimal_Fixed_Point_Kind;
2824    end Is_Decimal_Fixed_Point_Type;
2825
2826    function Is_Digits_Type                      (Id : E) return B is
2827    begin
2828       return Ekind (Id) in Digits_Kind;
2829    end Is_Digits_Type;
2830
2831    function Is_Discrete_Or_Fixed_Point_Type     (Id : E) return B is
2832    begin
2833       return Ekind (Id) in Discrete_Or_Fixed_Point_Kind;
2834    end Is_Discrete_Or_Fixed_Point_Type;
2835
2836    function Is_Discrete_Type                    (Id : E) return B is
2837    begin
2838       return Ekind (Id) in Discrete_Kind;
2839    end Is_Discrete_Type;
2840
2841    function Is_Elementary_Type                  (Id : E) return B is
2842    begin
2843       return Ekind (Id) in Elementary_Kind;
2844    end Is_Elementary_Type;
2845
2846    function Is_Entry                            (Id : E) return B is
2847    begin
2848       return Ekind (Id) in Entry_Kind;
2849    end Is_Entry;
2850
2851    function Is_Enumeration_Type                 (Id : E) return B is
2852    begin
2853       return Ekind (Id) in
2854         Enumeration_Kind;
2855    end Is_Enumeration_Type;
2856
2857    function Is_Fixed_Point_Type                 (Id : E) return B is
2858    begin
2859       return Ekind (Id) in
2860         Fixed_Point_Kind;
2861    end Is_Fixed_Point_Type;
2862
2863    function Is_Floating_Point_Type              (Id : E) return B is
2864    begin
2865       return Ekind (Id) in Float_Kind;
2866    end Is_Floating_Point_Type;
2867
2868    function Is_Formal                           (Id : E) return B is
2869    begin
2870       return Ekind (Id) in Formal_Kind;
2871    end Is_Formal;
2872
2873    function Is_Formal_Object                    (Id : E) return B is
2874    begin
2875       return Ekind (Id) in Formal_Object_Kind;
2876    end Is_Formal_Object;
2877
2878    function Is_Generic_Subprogram               (Id : E) return B is
2879    begin
2880       return Ekind (Id) in Generic_Subprogram_Kind;
2881    end Is_Generic_Subprogram;
2882
2883    function Is_Generic_Unit                     (Id : E) return B is
2884    begin
2885       return Ekind (Id) in Generic_Unit_Kind;
2886    end Is_Generic_Unit;
2887
2888    function Is_Incomplete_Or_Private_Type       (Id : E) return B is
2889    begin
2890       return Ekind (Id) in
2891         Incomplete_Or_Private_Kind;
2892    end Is_Incomplete_Or_Private_Type;
2893
2894    function Is_Incomplete_Type                  (Id : E) return B is
2895    begin
2896       return Ekind (Id) in
2897         Incomplete_Kind;
2898    end Is_Incomplete_Type;
2899
2900    function Is_Integer_Type                     (Id : E) return B is
2901    begin
2902       return Ekind (Id) in Integer_Kind;
2903    end Is_Integer_Type;
2904
2905    function Is_Modular_Integer_Type             (Id : E) return B is
2906    begin
2907       return Ekind (Id) in
2908         Modular_Integer_Kind;
2909    end Is_Modular_Integer_Type;
2910
2911    function Is_Named_Number                     (Id : E) return B is
2912    begin
2913       return Ekind (Id) in Named_Kind;
2914    end Is_Named_Number;
2915
2916    function Is_Numeric_Type                     (Id : E) return B is
2917    begin
2918       return Ekind (Id) in Numeric_Kind;
2919    end Is_Numeric_Type;
2920
2921    function Is_Object                           (Id : E) return B is
2922    begin
2923       return Ekind (Id) in Object_Kind;
2924    end Is_Object;
2925
2926    function Is_Ordinary_Fixed_Point_Type        (Id : E) return B is
2927    begin
2928       return Ekind (Id) in
2929         Ordinary_Fixed_Point_Kind;
2930    end Is_Ordinary_Fixed_Point_Type;
2931
2932    function Is_Overloadable                     (Id : E) return B is
2933    begin
2934       return Ekind (Id) in Overloadable_Kind;
2935    end Is_Overloadable;
2936
2937    function Is_Private_Type                     (Id : E) return B is
2938    begin
2939       return Ekind (Id) in Private_Kind;
2940    end Is_Private_Type;
2941
2942    function Is_Protected_Type                   (Id : E) return B is
2943    begin
2944       return Ekind (Id) in Protected_Kind;
2945    end Is_Protected_Type;
2946
2947    function Is_Real_Type                        (Id : E) return B is
2948    begin
2949       return Ekind (Id) in Real_Kind;
2950    end Is_Real_Type;
2951
2952    function Is_Record_Type                      (Id : E) return B is
2953    begin
2954       return Ekind (Id) in Record_Kind;
2955    end Is_Record_Type;
2956
2957    function Is_Scalar_Type                      (Id : E) return B is
2958    begin
2959       return Ekind (Id) in Scalar_Kind;
2960    end Is_Scalar_Type;
2961
2962    function Is_Signed_Integer_Type              (Id : E) return B is
2963    begin
2964       return Ekind (Id) in Signed_Integer_Kind;
2965    end Is_Signed_Integer_Type;
2966
2967    function Is_Subprogram                       (Id : E) return B is
2968    begin
2969       return Ekind (Id) in Subprogram_Kind;
2970    end Is_Subprogram;
2971
2972    function Is_Task_Type                        (Id : E) return B is
2973    begin
2974       return Ekind (Id) in Task_Kind;
2975    end Is_Task_Type;
2976
2977    function Is_Type                             (Id : E) return B is
2978    begin
2979       return Ekind (Id) in Type_Kind;
2980    end Is_Type;
2981
2982    ------------------------------
2983    -- Attribute Set Procedures --
2984    ------------------------------
2985
2986    --  Note: in many of these set procedures an "obvious" assertion is missing.
2987    --  The reason for this is that in many cases, a field is set before the
2988    --  Ekind field is set, so that the field is set when Ekind = E_Void. It
2989    --  it is possible to add assertions that specifically include the E_Void
2990    --  possibility, but in some cases, we just omit the assertions.
2991
2992    procedure Set_Accept_Address (Id : E; V : L) is
2993    begin
2994       Set_Elist21 (Id, V);
2995    end Set_Accept_Address;
2996
2997    procedure Set_Access_Disp_Table (Id : E; V : L) is
2998    begin
2999       pragma Assert (Is_Tagged_Type (Id) and then Id = Base_Type (Id));
3000       Set_Elist16 (Id, V);
3001    end Set_Access_Disp_Table;
3002
3003    procedure Set_Associated_Final_Chain (Id : E; V : E) is
3004    begin
3005       pragma Assert (Is_Access_Type (Id));
3006       Set_Node23 (Id, V);
3007    end Set_Associated_Final_Chain;
3008
3009    procedure Set_Associated_Formal_Package (Id : E; V : E) is
3010    begin
3011       Set_Node12 (Id, V);
3012    end Set_Associated_Formal_Package;
3013
3014    procedure Set_Associated_Node_For_Itype (Id : E; V : E) is
3015    begin
3016       Set_Node8 (Id, V);
3017    end Set_Associated_Node_For_Itype;
3018
3019    procedure Set_Associated_Storage_Pool (Id : E; V : E) is
3020    begin
3021       pragma Assert (Is_Access_Type (Id) and then Id = Base_Type (Id));
3022       Set_Node22 (Id, V);
3023    end Set_Associated_Storage_Pool;
3024
3025    procedure Set_Actual_Subtype (Id : E; V : E) is
3026    begin
3027       pragma Assert
3028          (Ekind_In (Id, E_Constant, E_Variable, E_Generic_In_Out_Parameter)
3029            or else Is_Formal (Id));
3030       Set_Node17 (Id, V);
3031    end Set_Actual_Subtype;
3032
3033    procedure Set_Address_Taken (Id : E; V : B := True) is
3034    begin
3035       Set_Flag104 (Id, V);
3036    end Set_Address_Taken;
3037
3038    procedure Set_Alias (Id : E; V : E) is
3039    begin
3040       pragma Assert
3041         (Is_Overloadable (Id) or else Ekind (Id) = E_Subprogram_Type);
3042       Set_Node18 (Id, V);
3043    end Set_Alias;
3044
3045    procedure Set_Alignment (Id : E; V : U) is
3046    begin
3047       pragma Assert (Is_Type (Id)
3048                       or else Is_Formal (Id)
3049                       or else Ekind_In (Id, E_Loop_Parameter,
3050                                             E_Constant,
3051                                             E_Exception,
3052                                             E_Variable));
3053       Set_Uint14 (Id, V);
3054    end Set_Alignment;
3055
3056    procedure Set_Barrier_Function (Id : E; V : N) is
3057    begin
3058       pragma Assert (Is_Entry (Id));
3059       Set_Node12 (Id, V);
3060    end Set_Barrier_Function;
3061
3062    procedure Set_Block_Node (Id : E; V : N) is
3063    begin
3064       pragma Assert (Ekind (Id) = E_Block);
3065       Set_Node11 (Id, V);
3066    end Set_Block_Node;
3067
3068    procedure Set_Body_Entity (Id : E; V : E) is
3069    begin
3070       pragma Assert (Ekind_In (Id, E_Package, E_Generic_Package));
3071       Set_Node19 (Id, V);
3072    end Set_Body_Entity;
3073
3074    procedure Set_Body_Needed_For_SAL (Id : E; V : B := True) is
3075    begin
3076       pragma Assert
3077         (Ekind (Id) = E_Package
3078           or else Is_Subprogram (Id)
3079           or else Is_Generic_Unit (Id));
3080       Set_Flag40 (Id, V);
3081    end Set_Body_Needed_For_SAL;
3082
3083    procedure Set_C_Pass_By_Copy (Id : E; V : B := True) is
3084    begin
3085       pragma Assert (Is_Record_Type (Id) and then Id = Base_Type (Id));
3086       Set_Flag125 (Id, V);
3087    end Set_C_Pass_By_Copy;
3088
3089    procedure Set_Can_Never_Be_Null (Id : E; V : B := True) is
3090    begin
3091       Set_Flag38 (Id, V);
3092    end Set_Can_Never_Be_Null;
3093
3094    procedure Set_Checks_May_Be_Suppressed (Id : E; V : B := True) is
3095    begin
3096       Set_Flag31 (Id, V);
3097    end Set_Checks_May_Be_Suppressed;
3098
3099    procedure Set_Class_Wide_Type (Id : E; V : E) is
3100    begin
3101       pragma Assert (Is_Type (Id));
3102       Set_Node9 (Id, V);
3103    end Set_Class_Wide_Type;
3104
3105    procedure Set_Cloned_Subtype (Id : E; V : E) is
3106    begin
3107       pragma Assert (Ekind_In (Id, E_Record_Subtype, E_Class_Wide_Subtype));
3108       Set_Node16 (Id, V);
3109    end Set_Cloned_Subtype;
3110
3111    procedure Set_Component_Bit_Offset (Id : E; V : U) is
3112    begin
3113       pragma Assert (Ekind_In (Id, E_Component, E_Discriminant));
3114       Set_Uint11 (Id, V);
3115    end Set_Component_Bit_Offset;
3116
3117    procedure Set_Component_Clause (Id : E; V : N) is
3118    begin
3119       pragma Assert (Ekind_In (Id, E_Component, E_Discriminant));
3120       Set_Node13 (Id, V);
3121    end Set_Component_Clause;
3122
3123    procedure Set_Component_Size (Id : E; V : U) is
3124    begin
3125       pragma Assert (Is_Array_Type (Id) and then Id = Base_Type (Id));
3126       Set_Uint22 (Id, V);
3127    end Set_Component_Size;
3128
3129    procedure Set_Component_Type (Id : E; V : E) is
3130    begin
3131       pragma Assert (Is_Array_Type (Id) and then Id = Base_Type (Id));
3132       Set_Node20 (Id, V);
3133    end Set_Component_Type;
3134
3135    procedure Set_Corresponding_Concurrent_Type (Id : E; V : E) is
3136    begin
3137       pragma Assert
3138         (Ekind (Id) = E_Record_Type and then Is_Concurrent_Type (V));
3139       Set_Node18 (Id, V);
3140    end Set_Corresponding_Concurrent_Type;
3141
3142    procedure Set_Corresponding_Discriminant (Id : E; V : E) is
3143    begin
3144       pragma Assert (Ekind (Id) = E_Discriminant);
3145       Set_Node19 (Id, V);
3146    end Set_Corresponding_Discriminant;
3147
3148    procedure Set_Corresponding_Equality (Id : E; V : E) is
3149    begin
3150       pragma Assert
3151         (Ekind (Id) = E_Function
3152           and then not Comes_From_Source (Id)
3153           and then Chars (Id) = Name_Op_Ne);
3154       Set_Node13 (Id, V);
3155    end Set_Corresponding_Equality;
3156
3157    procedure Set_Corresponding_Protected_Entry (Id : E; V : E) is
3158    begin
3159       pragma Assert (Ekind_In (Id, E_Void, E_Subprogram_Body));
3160       Set_Node18 (Id, V);
3161    end Set_Corresponding_Protected_Entry;
3162
3163    procedure Set_Corresponding_Record_Type (Id : E; V : E) is
3164    begin
3165       pragma Assert (Is_Concurrent_Type (Id));
3166       Set_Node18 (Id, V);
3167    end Set_Corresponding_Record_Type;
3168
3169    procedure Set_Corresponding_Remote_Type (Id : E; V : E) is
3170    begin
3171       Set_Node22 (Id, V);
3172    end Set_Corresponding_Remote_Type;
3173
3174    procedure Set_Current_Use_Clause (Id : E; V : E) is
3175    begin
3176       pragma Assert (Ekind (Id) = E_Package or else Is_Type (Id));
3177       Set_Node27 (Id, V);
3178    end Set_Current_Use_Clause;
3179
3180    procedure Set_Current_Value (Id : E; V : N) is
3181    begin
3182       pragma Assert (Ekind (Id) in Object_Kind or else Ekind (Id) = E_Void);
3183       Set_Node9 (Id, V);
3184    end Set_Current_Value;
3185
3186    procedure Set_CR_Discriminant (Id : E; V : E) is
3187    begin
3188       Set_Node23 (Id, V);
3189    end Set_CR_Discriminant;
3190
3191    procedure Set_Debug_Info_Off (Id : E; V : B := True) is
3192    begin
3193       Set_Flag166 (Id, V);
3194    end Set_Debug_Info_Off;
3195
3196    procedure Set_Debug_Renaming_Link (Id : E; V : E) is
3197    begin
3198       Set_Node25 (Id, V);
3199    end Set_Debug_Renaming_Link;
3200
3201    procedure Set_Default_Expr_Function (Id : E; V : E) is
3202    begin
3203       pragma Assert (Is_Formal (Id));
3204       Set_Node21 (Id, V);
3205    end Set_Default_Expr_Function;
3206
3207    procedure Set_Default_Expressions_Processed (Id : E; V : B := True) is
3208    begin
3209       Set_Flag108 (Id, V);
3210    end Set_Default_Expressions_Processed;
3211
3212    procedure Set_Default_Value (Id : E; V : N) is
3213    begin
3214       pragma Assert (Is_Formal (Id));
3215       Set_Node20 (Id, V);
3216    end Set_Default_Value;
3217
3218    procedure Set_Delay_Cleanups (Id : E; V : B := True) is
3219    begin
3220       pragma Assert
3221         (Is_Subprogram (Id)
3222            or else Is_Task_Type (Id)
3223            or else Ekind (Id) = E_Block);
3224       Set_Flag114 (Id, V);
3225    end Set_Delay_Cleanups;
3226
3227    procedure Set_Delay_Subprogram_Descriptors (Id : E; V : B := True) is
3228    begin
3229       pragma Assert
3230         (Is_Subprogram (Id) or else Ekind_In (Id, E_Package, E_Package_Body));
3231       Set_Flag50 (Id, V);
3232    end Set_Delay_Subprogram_Descriptors;
3233
3234    procedure Set_Delta_Value (Id : E; V : R) is
3235    begin
3236       pragma Assert (Is_Fixed_Point_Type (Id));
3237       Set_Ureal18 (Id, V);
3238    end Set_Delta_Value;
3239
3240    procedure Set_Dependent_Instances (Id : E; V : L) is
3241    begin
3242       pragma Assert (Is_Generic_Instance (Id));
3243       Set_Elist8 (Id, V);
3244    end Set_Dependent_Instances;
3245
3246    procedure Set_Depends_On_Private (Id : E; V : B := True) is
3247    begin
3248       pragma Assert (Nkind (Id) in N_Entity);
3249       Set_Flag14 (Id, V);
3250    end Set_Depends_On_Private;
3251
3252    procedure Set_Digits_Value (Id : E; V : U) is
3253    begin
3254       pragma Assert
3255         (Is_Floating_Point_Type (Id)
3256           or else Is_Decimal_Fixed_Point_Type (Id));
3257       Set_Uint17 (Id, V);
3258    end Set_Digits_Value;
3259
3260    procedure Set_Directly_Designated_Type (Id : E; V : E) is
3261    begin
3262       Set_Node20 (Id, V);
3263    end Set_Directly_Designated_Type;
3264
3265    procedure Set_Discard_Names (Id : E; V : B := True) is
3266    begin
3267       Set_Flag88 (Id, V);
3268    end Set_Discard_Names;
3269
3270    procedure Set_Discriminal (Id : E; V : E) is
3271    begin
3272       pragma Assert (Ekind (Id) = E_Discriminant);
3273       Set_Node17 (Id, V);
3274    end Set_Discriminal;
3275
3276    procedure Set_Discriminal_Link (Id : E; V : E) is
3277    begin
3278       Set_Node10 (Id, V);
3279    end Set_Discriminal_Link;
3280
3281    procedure Set_Discriminant_Checking_Func (Id  : E; V : E) is
3282    begin
3283       pragma Assert (Ekind (Id) = E_Component);
3284       Set_Node20 (Id, V);
3285    end Set_Discriminant_Checking_Func;
3286
3287    procedure Set_Discriminant_Constraint (Id : E; V : L) is
3288    begin
3289       pragma Assert (Nkind (Id) in N_Entity);
3290       Set_Elist21 (Id, V);
3291    end Set_Discriminant_Constraint;
3292
3293    procedure Set_Discriminant_Default_Value (Id : E; V : N) is
3294    begin
3295       Set_Node20 (Id, V);
3296    end Set_Discriminant_Default_Value;
3297
3298    procedure Set_Discriminant_Number (Id : E; V : U) is
3299    begin
3300       Set_Uint15 (Id, V);
3301    end Set_Discriminant_Number;
3302
3303    procedure Set_Dispatch_Table_Wrappers (Id : E; V : L) is
3304    begin
3305       pragma Assert (Is_Tagged_Type (Id) and then Id = Base_Type (Id));
3306       Set_Elist26 (Id, V);
3307    end Set_Dispatch_Table_Wrappers;
3308
3309    procedure Set_DT_Entry_Count (Id : E; V : U) is
3310    begin
3311       pragma Assert (Ekind (Id) = E_Component);
3312       Set_Uint15 (Id, V);
3313    end Set_DT_Entry_Count;
3314
3315    procedure Set_DT_Offset_To_Top_Func (Id : E; V : E) is
3316    begin
3317       pragma Assert (Ekind (Id) = E_Component and then Is_Tag (Id));
3318       Set_Node25 (Id, V);
3319    end Set_DT_Offset_To_Top_Func;
3320
3321    procedure Set_DT_Position (Id : E; V : U) is
3322    begin
3323       pragma Assert (Ekind_In (Id, E_Function, E_Procedure));
3324       Set_Uint15 (Id, V);
3325    end Set_DT_Position;
3326
3327    procedure Set_DTC_Entity (Id : E; V : E) is
3328    begin
3329       pragma Assert (Ekind_In (Id, E_Function, E_Procedure));
3330       Set_Node16 (Id, V);
3331    end Set_DTC_Entity;
3332
3333    procedure Set_Elaborate_Body_Desirable (Id : E; V : B := True) is
3334    begin
3335       pragma Assert (Ekind (Id) = E_Package);
3336       Set_Flag210 (Id, V);
3337    end Set_Elaborate_Body_Desirable;
3338
3339    procedure Set_Elaboration_Entity (Id : E; V : E) is
3340    begin
3341       pragma Assert
3342         (Is_Subprogram (Id)
3343            or else
3344          Ekind (Id) = E_Package
3345            or else
3346          Is_Generic_Unit (Id));
3347       Set_Node13 (Id, V);
3348    end Set_Elaboration_Entity;
3349
3350    procedure Set_Elaboration_Entity_Required (Id : E; V : B := True) is
3351    begin
3352       pragma Assert
3353         (Is_Subprogram (Id)
3354            or else
3355          Ekind (Id) = E_Package
3356            or else
3357          Is_Generic_Unit (Id));
3358       Set_Flag174 (Id, V);
3359    end Set_Elaboration_Entity_Required;
3360
3361    procedure Set_Enclosing_Scope (Id : E; V : E) is
3362    begin
3363       Set_Node18 (Id, V);
3364    end Set_Enclosing_Scope;
3365
3366    procedure Set_Entry_Accepted (Id : E; V : B := True) is
3367    begin
3368       pragma Assert (Is_Entry (Id));
3369       Set_Flag152 (Id, V);
3370    end Set_Entry_Accepted;
3371
3372    procedure Set_Entry_Bodies_Array (Id : E; V : E) is
3373    begin
3374       Set_Node15 (Id, V);
3375    end Set_Entry_Bodies_Array;
3376
3377    procedure Set_Entry_Cancel_Parameter (Id : E; V : E) is
3378    begin
3379       Set_Node23 (Id, V);
3380    end Set_Entry_Cancel_Parameter;
3381
3382    procedure Set_Entry_Component (Id : E; V : E) is
3383    begin
3384       Set_Node11 (Id, V);
3385    end Set_Entry_Component;
3386
3387    procedure Set_Entry_Formal (Id : E; V : E) is
3388    begin
3389       Set_Node16 (Id, V);
3390    end Set_Entry_Formal;
3391
3392    procedure Set_Entry_Index_Constant (Id : E; V : E) is
3393    begin
3394       pragma Assert (Ekind (Id) = E_Entry_Index_Parameter);
3395       Set_Node18 (Id, V);
3396    end Set_Entry_Index_Constant;
3397
3398    procedure Set_Entry_Parameters_Type (Id : E; V : E) is
3399    begin
3400       Set_Node15 (Id, V);
3401    end Set_Entry_Parameters_Type;
3402
3403    procedure Set_Enum_Pos_To_Rep (Id : E; V : E) is
3404    begin
3405       pragma Assert (Ekind (Id) = E_Enumeration_Type);
3406       Set_Node23 (Id, V);
3407    end Set_Enum_Pos_To_Rep;
3408
3409    procedure Set_Enumeration_Pos (Id : E; V : U) is
3410    begin
3411       pragma Assert (Ekind (Id) = E_Enumeration_Literal);
3412       Set_Uint11 (Id, V);
3413    end Set_Enumeration_Pos;
3414
3415    procedure Set_Enumeration_Rep (Id : E; V : U) is
3416    begin
3417       pragma Assert (Ekind (Id) = E_Enumeration_Literal);
3418       Set_Uint12 (Id, V);
3419    end Set_Enumeration_Rep;
3420
3421    procedure Set_Enumeration_Rep_Expr (Id : E; V : N) is
3422    begin
3423       pragma Assert (Ekind (Id) = E_Enumeration_Literal);
3424       Set_Node22 (Id, V);
3425    end Set_Enumeration_Rep_Expr;
3426
3427    procedure Set_Equivalent_Type (Id : E; V : E) is
3428    begin
3429       pragma Assert
3430         (Ekind_In (Id, E_Class_Wide_Type,
3431                        E_Class_Wide_Subtype,
3432                        E_Access_Protected_Subprogram_Type,
3433                        E_Anonymous_Access_Protected_Subprogram_Type,
3434                        E_Access_Subprogram_Type,
3435                        E_Exception_Type));
3436       Set_Node18 (Id, V);
3437    end Set_Equivalent_Type;
3438
3439    procedure Set_Esize (Id : E; V : U) is
3440    begin
3441       Set_Uint12 (Id, V);
3442    end Set_Esize;
3443
3444    procedure Set_Exception_Code (Id : E; V : U) is
3445    begin
3446       pragma Assert (Ekind (Id) = E_Exception);
3447       Set_Uint22 (Id, V);
3448    end Set_Exception_Code;
3449
3450    procedure Set_Extra_Accessibility (Id : E; V : E) is
3451    begin
3452       pragma Assert (Is_Formal (Id) or else Ekind (Id) = E_Variable);
3453       Set_Node13 (Id, V);
3454    end Set_Extra_Accessibility;
3455
3456    procedure Set_Extra_Constrained (Id : E; V : E) is
3457    begin
3458       pragma Assert (Is_Formal (Id) or else Ekind (Id) = E_Variable);
3459       Set_Node23 (Id, V);
3460    end Set_Extra_Constrained;
3461
3462    procedure Set_Extra_Formal (Id : E; V : E) is
3463    begin
3464       Set_Node15 (Id, V);
3465    end Set_Extra_Formal;
3466
3467    procedure Set_Extra_Formals (Id : E; V : E) is
3468    begin
3469       pragma Assert
3470         (Is_Overloadable (Id)
3471           or else Ekind_In (Id, E_Entry_Family,
3472                                 E_Subprogram_Body,
3473                                 E_Subprogram_Type));
3474       Set_Node28 (Id, V);
3475    end Set_Extra_Formals;
3476
3477    procedure Set_Can_Use_Internal_Rep (Id : E; V : B := True) is
3478    begin
3479       pragma Assert
3480         (Is_Access_Subprogram_Type (Id)
3481           and then Id = Base_Type (Id));
3482       Set_Flag229 (Id, V);
3483    end Set_Can_Use_Internal_Rep;
3484
3485    procedure Set_Finalization_Chain_Entity (Id : E; V : E) is
3486    begin
3487       Set_Node19 (Id, V);
3488    end Set_Finalization_Chain_Entity;
3489
3490    procedure Set_Finalize_Storage_Only (Id : E; V : B := True) is
3491    begin
3492       pragma Assert (Is_Type (Id) and then Id = Base_Type (Id));
3493       Set_Flag158 (Id, V);
3494    end Set_Finalize_Storage_Only;
3495
3496    procedure Set_First_Entity (Id : E; V : E) is
3497    begin
3498       Set_Node17 (Id, V);
3499    end Set_First_Entity;
3500
3501    procedure Set_First_Exit_Statement (Id : E; V : N) is
3502    begin
3503       pragma Assert (Ekind (Id) = E_Loop);
3504       Set_Node8 (Id, V);
3505    end Set_First_Exit_Statement;
3506
3507    procedure Set_First_Index (Id : E; V : N) is
3508    begin
3509       pragma Assert (Is_Array_Type (Id) or else Is_String_Type (Id));
3510       Set_Node17 (Id, V);
3511    end Set_First_Index;
3512
3513    procedure Set_First_Literal (Id : E; V : E) is
3514    begin
3515       pragma Assert (Is_Enumeration_Type (Id));
3516       Set_Node17 (Id, V);
3517    end Set_First_Literal;
3518
3519    procedure Set_First_Optional_Parameter (Id : E; V : E) is
3520    begin
3521       pragma Assert (Ekind_In (Id, E_Function, E_Procedure));
3522       Set_Node14 (Id, V);
3523    end Set_First_Optional_Parameter;
3524
3525    procedure Set_First_Private_Entity (Id : E; V : E) is
3526    begin
3527       pragma Assert (Ekind_In (Id, E_Package, E_Generic_Package)
3528                       or else Ekind (Id) in Concurrent_Kind);
3529       Set_Node16 (Id, V);
3530    end Set_First_Private_Entity;
3531
3532    procedure Set_First_Rep_Item (Id : E; V : N) is
3533    begin
3534       Set_Node6 (Id, V);
3535    end Set_First_Rep_Item;
3536
3537    procedure Set_Float_Rep (Id : E; V : F) is
3538       pragma Assert (Ekind (Id) = E_Floating_Point_Type);
3539    begin
3540       Set_Uint10 (Id, UI_From_Int (F'Pos (V)));
3541    end Set_Float_Rep;
3542
3543    procedure Set_Freeze_Node (Id : E; V : N) is
3544    begin
3545       Set_Node7 (Id, V);
3546    end Set_Freeze_Node;
3547
3548    procedure Set_From_With_Type (Id : E; V : B := True) is
3549    begin
3550       pragma Assert
3551         (Is_Type (Id)
3552           or else Ekind (Id) = E_Package);
3553       Set_Flag159 (Id, V);
3554    end Set_From_With_Type;
3555
3556    procedure Set_Full_View (Id : E; V : E) is
3557    begin
3558       pragma Assert (Is_Type (Id) or else Ekind (Id) = E_Constant);
3559       Set_Node11 (Id, V);
3560    end Set_Full_View;
3561
3562    procedure Set_Generic_Homonym (Id : E; V : E) is
3563    begin
3564       Set_Node11 (Id, V);
3565    end Set_Generic_Homonym;
3566
3567    procedure Set_Generic_Renamings (Id : E; V : L) is
3568    begin
3569       Set_Elist23 (Id, V);
3570    end Set_Generic_Renamings;
3571
3572    procedure Set_Handler_Records (Id : E; V : S) is
3573    begin
3574       Set_List10 (Id, V);
3575    end Set_Handler_Records;
3576
3577    procedure Set_Has_Aliased_Components (Id : E; V : B := True) is
3578    begin
3579       pragma Assert (Id = Base_Type (Id));
3580       Set_Flag135 (Id, V);
3581    end Set_Has_Aliased_Components;
3582
3583    procedure Set_Has_Alignment_Clause (Id : E; V : B := True) is
3584    begin
3585       Set_Flag46 (Id, V);
3586    end Set_Has_Alignment_Clause;
3587
3588    procedure Set_Has_All_Calls_Remote (Id : E; V : B := True) is
3589    begin
3590       Set_Flag79 (Id, V);
3591    end Set_Has_All_Calls_Remote;
3592
3593    procedure Set_Has_Anon_Block_Suffix (Id : E; V : B := True) is
3594    begin
3595       Set_Flag201 (Id, V);
3596    end Set_Has_Anon_Block_Suffix;
3597
3598    procedure Set_Has_Atomic_Components (Id : E; V : B := True) is
3599    begin
3600       pragma Assert (not Is_Type (Id) or else Id = Base_Type (Id));
3601       Set_Flag86 (Id, V);
3602    end Set_Has_Atomic_Components;
3603
3604    procedure Set_Has_Biased_Representation (Id : E; V : B := True) is
3605    begin
3606       pragma Assert
3607         ((V = False) or else (Is_Discrete_Type (Id) or else Is_Object (Id)));
3608       Set_Flag139 (Id, V);
3609    end Set_Has_Biased_Representation;
3610
3611    procedure Set_Has_Completion (Id : E; V : B := True) is
3612    begin
3613       Set_Flag26 (Id, V);
3614    end Set_Has_Completion;
3615
3616    procedure Set_Has_Completion_In_Body (Id : E; V : B := True) is
3617    begin
3618       pragma Assert (Is_Type (Id));
3619       Set_Flag71 (Id, V);
3620    end Set_Has_Completion_In_Body;
3621
3622    procedure Set_Has_Complex_Representation (Id : E; V : B := True) is
3623    begin
3624       pragma Assert (Ekind (Id) = E_Record_Type);
3625       Set_Flag140 (Id, V);
3626    end Set_Has_Complex_Representation;
3627
3628    procedure Set_Has_Component_Size_Clause (Id : E; V : B := True) is
3629    begin
3630       pragma Assert (Ekind (Id) = E_Array_Type);
3631       Set_Flag68 (Id, V);
3632    end Set_Has_Component_Size_Clause;
3633
3634    procedure Set_Has_Constrained_Partial_View (Id : E; V : B := True) is
3635    begin
3636       pragma Assert (Is_Type (Id));
3637       Set_Flag187 (Id, V);
3638    end Set_Has_Constrained_Partial_View;
3639
3640    procedure Set_Has_Contiguous_Rep (Id : E; V : B := True) is
3641    begin
3642       Set_Flag181 (Id, V);
3643    end Set_Has_Contiguous_Rep;
3644
3645    procedure Set_Has_Controlled_Component (Id : E; V : B := True) is
3646    begin
3647       pragma Assert (Id = Base_Type (Id));
3648       Set_Flag43 (Id, V);
3649    end Set_Has_Controlled_Component;
3650
3651    procedure Set_Has_Controlling_Result (Id : E; V : B := True) is
3652    begin
3653       Set_Flag98 (Id, V);
3654    end Set_Has_Controlling_Result;
3655
3656    procedure Set_Has_Convention_Pragma (Id : E; V : B := True) is
3657    begin
3658       Set_Flag119 (Id, V);
3659    end Set_Has_Convention_Pragma;
3660
3661    procedure Set_Has_Delayed_Aspects (Id : E; V : B := True) is
3662    begin
3663       pragma Assert (Nkind (Id) in N_Entity);
3664       Set_Flag200 (Id, V);
3665    end Set_Has_Delayed_Aspects;
3666
3667    procedure Set_Has_Delayed_Freeze (Id : E; V : B := True) is
3668    begin
3669       pragma Assert (Nkind (Id) in N_Entity);
3670       Set_Flag18 (Id, V);
3671    end Set_Has_Delayed_Freeze;
3672
3673    procedure Set_Has_Discriminants (Id : E; V : B := True) is
3674    begin
3675       pragma Assert (Nkind (Id) in N_Entity);
3676       Set_Flag5 (Id, V);
3677    end Set_Has_Discriminants;
3678
3679    procedure Set_Has_Dispatch_Table (Id : E; V : B := True) is
3680    begin
3681       pragma Assert (Ekind (Id) = E_Record_Type
3682         and then Is_Tagged_Type (Id));
3683       Set_Flag220 (Id, V);
3684    end Set_Has_Dispatch_Table;
3685
3686    procedure Set_Has_Enumeration_Rep_Clause (Id : E; V : B := True) is
3687    begin
3688       pragma Assert (Is_Enumeration_Type (Id));
3689       Set_Flag66 (Id, V);
3690    end Set_Has_Enumeration_Rep_Clause;
3691
3692    procedure Set_Has_Exit (Id : E; V : B := True) is
3693    begin
3694       Set_Flag47 (Id, V);
3695    end Set_Has_Exit;
3696
3697    procedure Set_Has_External_Tag_Rep_Clause (Id : E; V : B := True) is
3698    begin
3699       pragma Assert (Is_Tagged_Type (Id));
3700       Set_Flag110 (Id, V);
3701    end Set_Has_External_Tag_Rep_Clause;
3702
3703    procedure Set_Has_Forward_Instantiation (Id : E; V : B := True) is
3704    begin
3705       Set_Flag175 (Id, V);
3706    end Set_Has_Forward_Instantiation;
3707
3708    procedure Set_Has_Fully_Qualified_Name (Id : E; V : B := True) is
3709    begin
3710       Set_Flag173 (Id, V);
3711    end Set_Has_Fully_Qualified_Name;
3712
3713    procedure Set_Has_Gigi_Rep_Item (Id : E; V : B := True) is
3714    begin
3715       Set_Flag82 (Id, V);
3716    end Set_Has_Gigi_Rep_Item;
3717
3718    procedure Set_Has_Homonym (Id : E; V : B := True) is
3719    begin
3720       Set_Flag56 (Id, V);
3721    end Set_Has_Homonym;
3722
3723    procedure Set_Has_Inheritable_Invariants (Id : E; V : B := True) is
3724    begin
3725       pragma Assert (Is_Type (Id));
3726       Set_Flag248 (Id, V);
3727    end Set_Has_Inheritable_Invariants;
3728
3729    procedure Set_Has_Initial_Value (Id : E; V : B := True) is
3730    begin
3731       pragma Assert (Ekind_In (Id, E_Variable, E_Out_Parameter));
3732       Set_Flag219 (Id, V);
3733    end Set_Has_Initial_Value;
3734
3735    procedure Set_Has_Invariants (Id : E; V : B := True) is
3736    begin
3737       pragma Assert (Is_Type (Id)
3738         or else Ekind (Id) = E_Procedure
3739         or else Ekind (Id) = E_Void);
3740       Set_Flag232 (Id, V);
3741    end Set_Has_Invariants;
3742
3743    procedure Set_Has_Machine_Radix_Clause (Id : E; V : B := True) is
3744    begin
3745       pragma Assert (Is_Decimal_Fixed_Point_Type (Id));
3746       Set_Flag83 (Id, V);
3747    end Set_Has_Machine_Radix_Clause;
3748
3749    procedure Set_Has_Master_Entity (Id : E; V : B := True) is
3750    begin
3751       Set_Flag21 (Id, V);
3752    end Set_Has_Master_Entity;
3753
3754    procedure Set_Has_Missing_Return (Id : E; V : B := True) is
3755    begin
3756       pragma Assert (Ekind_In (Id, E_Function, E_Generic_Function));
3757       Set_Flag142 (Id, V);
3758    end Set_Has_Missing_Return;
3759
3760    procedure Set_Has_Nested_Block_With_Handler (Id : E; V : B := True) is
3761    begin
3762       Set_Flag101 (Id, V);
3763    end Set_Has_Nested_Block_With_Handler;
3764
3765    procedure Set_Has_Up_Level_Access (Id : E; V : B := True) is
3766    begin
3767       pragma Assert (Ekind_In (Id, E_Variable, E_Constant, E_Loop_Parameter));
3768       Set_Flag215 (Id, V);
3769    end Set_Has_Up_Level_Access;
3770
3771    procedure Set_Has_Non_Standard_Rep (Id : E; V : B := True) is
3772    begin
3773       pragma Assert (Id = Base_Type (Id));
3774       Set_Flag75 (Id, V);
3775    end Set_Has_Non_Standard_Rep;
3776
3777    procedure Set_Has_Object_Size_Clause (Id : E; V : B := True) is
3778    begin
3779       pragma Assert (Is_Type (Id));
3780       Set_Flag172 (Id, V);
3781    end Set_Has_Object_Size_Clause;
3782
3783    procedure Set_Has_Per_Object_Constraint (Id : E; V : B := True) is
3784    begin
3785       Set_Flag154 (Id, V);
3786    end Set_Has_Per_Object_Constraint;
3787
3788    procedure Set_Has_Persistent_BSS (Id : E; V : B := True) is
3789    begin
3790       Set_Flag188 (Id, V);
3791    end Set_Has_Persistent_BSS;
3792
3793    procedure Set_Has_Postconditions (Id : E; V : B := True) is
3794    begin
3795       pragma Assert (Is_Subprogram (Id));
3796       Set_Flag240 (Id, V);
3797    end Set_Has_Postconditions;
3798
3799    procedure Set_Has_Pragma_Controlled (Id : E; V : B := True) is
3800    begin
3801       pragma Assert (Is_Access_Type (Id));
3802       Set_Flag27 (Base_Type (Id), V);
3803    end Set_Has_Pragma_Controlled;
3804
3805    procedure Set_Has_Pragma_Elaborate_Body (Id : E; V : B := True) is
3806    begin
3807       Set_Flag150 (Id, V);
3808    end Set_Has_Pragma_Elaborate_Body;
3809
3810    procedure Set_Has_Pragma_Inline (Id : E; V : B := True) is
3811    begin
3812       Set_Flag157 (Id, V);
3813    end Set_Has_Pragma_Inline;
3814
3815    procedure Set_Has_Pragma_Inline_Always (Id : E; V : B := True) is
3816    begin
3817       Set_Flag230 (Id, V);
3818    end Set_Has_Pragma_Inline_Always;
3819
3820    procedure Set_Has_Pragma_Ordered (Id : E; V : B := True) is
3821    begin
3822       pragma Assert (Is_Enumeration_Type (Id));
3823       pragma Assert (Id = Base_Type (Id));
3824       Set_Flag198 (Id, V);
3825    end Set_Has_Pragma_Ordered;
3826
3827    procedure Set_Has_Pragma_Pack (Id : E; V : B := True) is
3828    begin
3829       pragma Assert (Is_Array_Type (Id) or else Is_Record_Type (Id));
3830       pragma Assert (Id = Base_Type (Id));
3831       Set_Flag121 (Id, V);
3832    end Set_Has_Pragma_Pack;
3833
3834    procedure Set_Has_Pragma_Preelab_Init (Id : E; V : B := True) is
3835    begin
3836       Set_Flag221 (Id, V);
3837    end Set_Has_Pragma_Preelab_Init;
3838
3839    procedure Set_Has_Pragma_Pure (Id : E; V : B := True) is
3840    begin
3841       Set_Flag203 (Id, V);
3842    end Set_Has_Pragma_Pure;
3843
3844    procedure Set_Has_Pragma_Pure_Function (Id : E; V : B := True) is
3845    begin
3846       Set_Flag179 (Id, V);
3847    end Set_Has_Pragma_Pure_Function;
3848
3849    procedure Set_Has_Pragma_Thread_Local_Storage (Id : E; V : B := True) is
3850    begin
3851       Set_Flag169 (Id, V);
3852    end Set_Has_Pragma_Thread_Local_Storage;
3853
3854    procedure Set_Has_Pragma_Unmodified (Id : E; V : B := True) is
3855    begin
3856       Set_Flag233 (Id, V);
3857    end Set_Has_Pragma_Unmodified;
3858
3859    procedure Set_Has_Pragma_Unreferenced (Id : E; V : B := True) is
3860    begin
3861       Set_Flag180 (Id, V);
3862    end Set_Has_Pragma_Unreferenced;
3863
3864    procedure Set_Has_Pragma_Unreferenced_Objects (Id : E; V : B := True) is
3865    begin
3866       pragma Assert (Is_Type (Id));
3867       Set_Flag212 (Id, V);
3868    end Set_Has_Pragma_Unreferenced_Objects;
3869
3870    procedure Set_Has_Predicates (Id : E; V : B := True) is
3871    begin
3872       Set_Flag250 (Id, V);
3873    end Set_Has_Predicates;
3874
3875    procedure Set_Has_Primitive_Operations (Id : E; V : B := True) is
3876    begin
3877       pragma Assert (Id = Base_Type (Id));
3878       Set_Flag120 (Id, V);
3879    end Set_Has_Primitive_Operations;
3880
3881    procedure Set_Has_Private_Declaration (Id : E; V : B := True) is
3882    begin
3883       Set_Flag155 (Id, V);
3884    end Set_Has_Private_Declaration;
3885
3886    procedure Set_Has_Qualified_Name (Id : E; V : B := True) is
3887    begin
3888       Set_Flag161 (Id, V);
3889    end Set_Has_Qualified_Name;
3890
3891    procedure Set_Has_RACW (Id : E; V : B := True) is
3892    begin
3893       pragma Assert (Ekind (Id) = E_Package);
3894       Set_Flag214 (Id, V);
3895    end Set_Has_RACW;
3896
3897    procedure Set_Has_Record_Rep_Clause (Id : E; V : B := True) is
3898    begin
3899       pragma Assert (Id = Base_Type (Id));
3900       Set_Flag65 (Id, V);
3901    end Set_Has_Record_Rep_Clause;
3902
3903    procedure Set_Has_Recursive_Call (Id : E; V : B := True) is
3904    begin
3905       pragma Assert (Is_Subprogram (Id));
3906       Set_Flag143 (Id, V);
3907    end Set_Has_Recursive_Call;
3908
3909    procedure Set_Has_Size_Clause (Id : E; V : B := True) is
3910    begin
3911       Set_Flag29 (Id, V);
3912    end Set_Has_Size_Clause;
3913
3914    procedure Set_Has_Small_Clause (Id : E; V : B := True) is
3915    begin
3916       Set_Flag67 (Id, V);
3917    end Set_Has_Small_Clause;
3918
3919    procedure Set_Has_Specified_Layout (Id : E; V : B := True) is
3920    begin
3921       pragma Assert (Id = Base_Type (Id));
3922       Set_Flag100 (Id, V);
3923    end Set_Has_Specified_Layout;
3924
3925    procedure Set_Has_Specified_Stream_Input (Id : E; V : B := True) is
3926    begin
3927       pragma Assert (Is_Type (Id));
3928       Set_Flag190 (Id, V);
3929    end Set_Has_Specified_Stream_Input;
3930
3931    procedure Set_Has_Specified_Stream_Output (Id : E; V : B := True) is
3932    begin
3933       pragma Assert (Is_Type (Id));
3934       Set_Flag191 (Id, V);
3935    end Set_Has_Specified_Stream_Output;
3936
3937    procedure Set_Has_Specified_Stream_Read (Id : E; V : B := True) is
3938    begin
3939       pragma Assert (Is_Type (Id));
3940       Set_Flag192 (Id, V);
3941    end Set_Has_Specified_Stream_Read;
3942
3943    procedure Set_Has_Specified_Stream_Write (Id : E; V : B := True) is
3944    begin
3945       pragma Assert (Is_Type (Id));
3946       Set_Flag193 (Id, V);
3947    end Set_Has_Specified_Stream_Write;
3948
3949    procedure Set_Has_Static_Discriminants (Id : E; V : B := True) is
3950    begin
3951       Set_Flag211 (Id, V);
3952    end Set_Has_Static_Discriminants;
3953
3954    procedure Set_Has_Storage_Size_Clause (Id : E; V : B := True) is
3955    begin
3956       pragma Assert (Is_Access_Type (Id) or else Is_Task_Type (Id));
3957       pragma Assert (Id = Base_Type (Id));
3958       Set_Flag23 (Id, V);
3959    end Set_Has_Storage_Size_Clause;
3960
3961    procedure Set_Has_Stream_Size_Clause (Id : E; V : B := True) is
3962    begin
3963       pragma Assert (Is_Elementary_Type (Id));
3964       Set_Flag184 (Id, V);
3965    end Set_Has_Stream_Size_Clause;
3966
3967    procedure Set_Has_Subprogram_Descriptor (Id : E; V : B := True) is
3968    begin
3969       Set_Flag93 (Id, V);
3970    end Set_Has_Subprogram_Descriptor;
3971
3972    procedure Set_Has_Task (Id : E; V : B := True) is
3973    begin
3974       pragma Assert (Id = Base_Type (Id));
3975       Set_Flag30 (Id, V);
3976    end Set_Has_Task;
3977
3978    procedure Set_Has_Thunks (Id : E; V : B := True) is
3979    begin
3980       pragma Assert (Is_Tag (Id));
3981       Set_Flag228 (Id, V);
3982    end Set_Has_Thunks;
3983
3984    procedure Set_Has_Unchecked_Union (Id : E; V : B := True) is
3985    begin
3986       pragma Assert (Id = Base_Type (Id));
3987       Set_Flag123 (Id, V);
3988    end Set_Has_Unchecked_Union;
3989
3990    procedure Set_Has_Unknown_Discriminants (Id : E; V : B := True) is
3991    begin
3992       pragma Assert (Is_Type (Id));
3993       Set_Flag72 (Id, V);
3994    end Set_Has_Unknown_Discriminants;
3995
3996    procedure Set_Has_Volatile_Components (Id : E; V : B := True) is
3997    begin
3998       pragma Assert (not Is_Type (Id) or else Id = Base_Type (Id));
3999       Set_Flag87 (Id, V);
4000    end Set_Has_Volatile_Components;
4001
4002    procedure Set_Has_Xref_Entry (Id : E; V : B := True) is
4003    begin
4004       Set_Flag182 (Id, V);
4005    end Set_Has_Xref_Entry;
4006
4007    procedure Set_Hiding_Loop_Variable (Id : E; V : E) is
4008    begin
4009       pragma Assert (Ekind (Id) = E_Variable);
4010       Set_Node8 (Id, V);
4011    end Set_Hiding_Loop_Variable;
4012
4013    procedure Set_Homonym (Id : E; V : E) is
4014    begin
4015       pragma Assert (Id /= V);
4016       Set_Node4 (Id, V);
4017    end Set_Homonym;
4018
4019    procedure Set_Interface_Alias (Id : E; V : E) is
4020    begin
4021       pragma Assert
4022         (Is_Internal (Id)
4023           and then Is_Hidden (Id)
4024           and then (Ekind_In (Id, E_Procedure, E_Function)));
4025       Set_Node25 (Id, V);
4026    end Set_Interface_Alias;
4027
4028    procedure Set_Interfaces (Id : E; V : L) is
4029    begin
4030       pragma Assert (Is_Record_Type (Id));
4031       Set_Elist25 (Id, V);
4032    end Set_Interfaces;
4033
4034    procedure Set_In_Package_Body (Id : E; V : B := True) is
4035    begin
4036       Set_Flag48 (Id, V);
4037    end Set_In_Package_Body;
4038
4039    procedure Set_In_Private_Part (Id : E; V : B := True) is
4040    begin
4041       Set_Flag45 (Id, V);
4042    end Set_In_Private_Part;
4043
4044    procedure Set_In_Use (Id : E; V : B := True) is
4045    begin
4046       pragma Assert (Nkind (Id) in N_Entity);
4047       Set_Flag8 (Id, V);
4048    end Set_In_Use;
4049
4050    procedure Set_Inner_Instances (Id : E; V : L) is
4051    begin
4052       Set_Elist23 (Id, V);
4053    end Set_Inner_Instances;
4054
4055    procedure Set_Interface_Name (Id : E; V : N) is
4056    begin
4057       Set_Node21 (Id, V);
4058    end Set_Interface_Name;
4059
4060    procedure Set_Is_Abstract_Subprogram (Id : E; V : B := True) is
4061    begin
4062       pragma Assert (Is_Overloadable (Id));
4063       Set_Flag19 (Id, V);
4064    end Set_Is_Abstract_Subprogram;
4065
4066    procedure Set_Is_Abstract_Type (Id : E; V : B := True) is
4067    begin
4068       pragma Assert (Is_Type (Id));
4069       Set_Flag146 (Id, V);
4070    end Set_Is_Abstract_Type;
4071
4072    procedure Set_Is_Local_Anonymous_Access (Id : E; V : B := True) is
4073    begin
4074       pragma Assert (Is_Access_Type (Id));
4075       Set_Flag194 (Id, V);
4076    end Set_Is_Local_Anonymous_Access;
4077
4078    procedure Set_Is_Access_Constant (Id : E; V : B := True) is
4079    begin
4080       pragma Assert (Is_Access_Type (Id));
4081       Set_Flag69 (Id, V);
4082    end Set_Is_Access_Constant;
4083
4084    procedure Set_Is_Ada_2005_Only (Id : E; V : B := True) is
4085    begin
4086       Set_Flag185 (Id, V);
4087    end Set_Is_Ada_2005_Only;
4088
4089    procedure Set_Is_Ada_2012_Only (Id : E; V : B := True) is
4090    begin
4091       Set_Flag199 (Id, V);
4092    end Set_Is_Ada_2012_Only;
4093
4094    procedure Set_Is_Aliased (Id : E; V : B := True) is
4095    begin
4096       pragma Assert (Nkind (Id) in N_Entity);
4097       Set_Flag15 (Id, V);
4098    end Set_Is_Aliased;
4099
4100    procedure Set_Is_AST_Entry (Id : E; V : B := True) is
4101    begin
4102       pragma Assert (Is_Entry (Id));
4103       Set_Flag132 (Id, V);
4104    end Set_Is_AST_Entry;
4105
4106    procedure Set_Is_Asynchronous (Id : E; V : B := True) is
4107    begin
4108       pragma Assert
4109         (Ekind (Id) = E_Procedure or else Is_Type (Id));
4110       Set_Flag81 (Id, V);
4111    end Set_Is_Asynchronous;
4112
4113    procedure Set_Is_Atomic (Id : E; V : B := True) is
4114    begin
4115       Set_Flag85 (Id, V);
4116    end Set_Is_Atomic;
4117
4118    procedure Set_Is_Bit_Packed_Array (Id : E; V : B := True) is
4119    begin
4120       pragma Assert ((not V)
4121         or else (Is_Array_Type (Id) and then Id = Base_Type (Id)));
4122
4123       Set_Flag122 (Id, V);
4124    end Set_Is_Bit_Packed_Array;
4125
4126    procedure Set_Is_Called (Id : E; V : B := True) is
4127    begin
4128       pragma Assert (Ekind_In (Id, E_Procedure, E_Function));
4129       Set_Flag102 (Id, V);
4130    end Set_Is_Called;
4131
4132    procedure Set_Is_Character_Type (Id : E; V : B := True) is
4133    begin
4134       Set_Flag63 (Id, V);
4135    end Set_Is_Character_Type;
4136
4137    procedure Set_Is_Child_Unit (Id : E; V : B := True) is
4138    begin
4139       Set_Flag73 (Id, V);
4140    end Set_Is_Child_Unit;
4141
4142    procedure Set_Is_Class_Wide_Equivalent_Type (Id : E; V : B := True) is
4143    begin
4144       Set_Flag35 (Id, V);
4145    end Set_Is_Class_Wide_Equivalent_Type;
4146
4147    procedure Set_Is_Compilation_Unit (Id : E; V : B := True) is
4148    begin
4149       Set_Flag149 (Id, V);
4150    end Set_Is_Compilation_Unit;
4151
4152    procedure Set_Is_Completely_Hidden (Id : E; V : B := True) is
4153    begin
4154       pragma Assert (Ekind (Id) = E_Discriminant);
4155       Set_Flag103 (Id, V);
4156    end Set_Is_Completely_Hidden;
4157
4158    procedure Set_Is_Concurrent_Record_Type (Id : E; V : B := True) is
4159    begin
4160       Set_Flag20 (Id, V);
4161    end Set_Is_Concurrent_Record_Type;
4162
4163    procedure Set_Is_Constr_Subt_For_U_Nominal (Id : E; V : B := True) is
4164    begin
4165       Set_Flag80 (Id, V);
4166    end Set_Is_Constr_Subt_For_U_Nominal;
4167
4168    procedure Set_Is_Constr_Subt_For_UN_Aliased (Id : E; V : B := True) is
4169    begin
4170       Set_Flag141 (Id, V);
4171    end Set_Is_Constr_Subt_For_UN_Aliased;
4172
4173    procedure Set_Is_Constrained (Id : E; V : B := True) is
4174    begin
4175       pragma Assert (Nkind (Id) in N_Entity);
4176       Set_Flag12 (Id, V);
4177    end Set_Is_Constrained;
4178
4179    procedure Set_Is_Constructor (Id : E; V : B := True) is
4180    begin
4181       Set_Flag76 (Id, V);
4182    end Set_Is_Constructor;
4183
4184    procedure Set_Is_Controlled (Id : E; V : B := True) is
4185    begin
4186       pragma Assert (Id = Base_Type (Id));
4187       Set_Flag42 (Id, V);
4188    end Set_Is_Controlled;
4189
4190    procedure Set_Is_Controlling_Formal (Id : E; V : B := True) is
4191    begin
4192       pragma Assert (Is_Formal (Id));
4193       Set_Flag97 (Id, V);
4194    end Set_Is_Controlling_Formal;
4195
4196    procedure Set_Is_CPP_Class (Id : E; V : B := True) is
4197    begin
4198       Set_Flag74 (Id, V);
4199    end Set_Is_CPP_Class;
4200
4201    procedure Set_Is_Descendent_Of_Address (Id : E; V : B := True) is
4202    begin
4203       pragma Assert (Is_Type (Id));
4204       Set_Flag223 (Id, V);
4205    end Set_Is_Descendent_Of_Address;
4206
4207    procedure Set_Is_Discrim_SO_Function (Id : E; V : B := True) is
4208    begin
4209       Set_Flag176 (Id, V);
4210    end Set_Is_Discrim_SO_Function;
4211
4212    procedure Set_Is_Dispatch_Table_Entity (Id : E; V : B := True) is
4213    begin
4214       Set_Flag234 (Id, V);
4215    end Set_Is_Dispatch_Table_Entity;
4216
4217    procedure Set_Is_Dispatching_Operation (Id : E; V : B := True) is
4218    begin
4219       pragma Assert
4220         (V = False
4221            or else
4222          Is_Overloadable (Id)
4223            or else
4224          Ekind (Id) = E_Subprogram_Type);
4225
4226       Set_Flag6 (Id, V);
4227    end Set_Is_Dispatching_Operation;
4228
4229    procedure Set_Is_Eliminated (Id : E; V : B := True) is
4230    begin
4231       Set_Flag124 (Id, V);
4232    end Set_Is_Eliminated;
4233
4234    procedure Set_Is_Entry_Formal (Id : E; V : B := True) is
4235    begin
4236       Set_Flag52 (Id, V);
4237    end Set_Is_Entry_Formal;
4238
4239    procedure Set_Is_Exported (Id : E; V : B := True) is
4240    begin
4241       Set_Flag99 (Id, V);
4242    end Set_Is_Exported;
4243
4244    procedure Set_Is_First_Subtype (Id : E; V : B := True) is
4245    begin
4246       Set_Flag70 (Id, V);
4247    end Set_Is_First_Subtype;
4248
4249    procedure Set_Is_For_Access_Subtype (Id : E; V : B := True) is
4250    begin
4251       pragma Assert (Ekind_In (Id, E_Record_Subtype, E_Private_Subtype));
4252       Set_Flag118 (Id, V);
4253    end Set_Is_For_Access_Subtype;
4254
4255    procedure Set_Is_Formal_Subprogram (Id : E; V : B := True) is
4256    begin
4257       Set_Flag111 (Id, V);
4258    end Set_Is_Formal_Subprogram;
4259
4260    procedure Set_Is_Frozen (Id : E; V : B := True) is
4261    begin
4262       pragma Assert (Nkind (Id) in N_Entity);
4263       Set_Flag4 (Id, V);
4264    end Set_Is_Frozen;
4265
4266    procedure Set_Is_Generic_Actual_Type (Id : E; V : B := True) is
4267    begin
4268       pragma Assert (Is_Type (Id));
4269       Set_Flag94 (Id, V);
4270    end Set_Is_Generic_Actual_Type;
4271
4272    procedure Set_Is_Generic_Instance (Id : E; V : B := True) is
4273    begin
4274       Set_Flag130 (Id, V);
4275    end Set_Is_Generic_Instance;
4276
4277    procedure Set_Is_Generic_Type (Id : E; V : B := True) is
4278    begin
4279       pragma Assert (Nkind (Id) in N_Entity);
4280       Set_Flag13 (Id, V);
4281    end Set_Is_Generic_Type;
4282
4283    procedure Set_Is_Hidden (Id : E; V : B := True) is
4284    begin
4285       Set_Flag57 (Id, V);
4286    end Set_Is_Hidden;
4287
4288    procedure Set_Is_Hidden_Open_Scope (Id : E; V : B := True) is
4289    begin
4290       Set_Flag171 (Id, V);
4291    end Set_Is_Hidden_Open_Scope;
4292
4293    procedure Set_Is_Immediately_Visible (Id : E; V : B := True) is
4294    begin
4295       pragma Assert (Nkind (Id) in N_Entity);
4296       Set_Flag7 (Id, V);
4297    end Set_Is_Immediately_Visible;
4298
4299    procedure Set_Is_Imported (Id : E; V : B := True) is
4300    begin
4301       Set_Flag24 (Id, V);
4302    end Set_Is_Imported;
4303
4304    procedure Set_Is_Inlined (Id : E; V : B := True) is
4305    begin
4306       Set_Flag11 (Id, V);
4307    end Set_Is_Inlined;
4308
4309    procedure Set_Is_Interface (Id : E; V : B := True) is
4310    begin
4311       pragma Assert
4312         (Ekind_In (Id, E_Record_Type,
4313                        E_Record_Subtype,
4314                        E_Record_Type_With_Private,
4315                        E_Record_Subtype_With_Private,
4316                        E_Class_Wide_Type,
4317                        E_Class_Wide_Subtype));
4318       Set_Flag186 (Id, V);
4319    end Set_Is_Interface;
4320
4321    procedure Set_Is_Instantiated (Id : E; V : B := True) is
4322    begin
4323       Set_Flag126 (Id, V);
4324    end Set_Is_Instantiated;
4325
4326    procedure Set_Is_Internal (Id : E; V : B := True) is
4327    begin
4328       pragma Assert (Nkind (Id) in N_Entity);
4329       Set_Flag17 (Id, V);
4330    end Set_Is_Internal;
4331
4332    procedure Set_Is_Interrupt_Handler (Id : E; V : B := True) is
4333    begin
4334       pragma Assert (Nkind (Id) in N_Entity);
4335       Set_Flag89 (Id, V);
4336    end Set_Is_Interrupt_Handler;
4337
4338    procedure Set_Is_Intrinsic_Subprogram (Id : E; V : B := True) is
4339    begin
4340       Set_Flag64 (Id, V);
4341    end Set_Is_Intrinsic_Subprogram;
4342
4343    procedure Set_Is_Itype (Id : E; V : B := True) is
4344    begin
4345       Set_Flag91 (Id, V);
4346    end Set_Is_Itype;
4347
4348    procedure Set_Is_Known_Non_Null (Id : E; V : B := True) is
4349    begin
4350       Set_Flag37 (Id, V);
4351    end Set_Is_Known_Non_Null;
4352
4353    procedure Set_Is_Known_Null (Id : E; V : B := True) is
4354    begin
4355       Set_Flag204 (Id, V);
4356    end Set_Is_Known_Null;
4357
4358    procedure Set_Is_Known_Valid (Id : E; V : B := True) is
4359    begin
4360       Set_Flag170 (Id, V);
4361    end Set_Is_Known_Valid;
4362
4363    procedure Set_Is_Limited_Composite (Id : E; V : B := True) is
4364    begin
4365       pragma Assert (Is_Type (Id));
4366       Set_Flag106 (Id, V);
4367    end Set_Is_Limited_Composite;
4368
4369    procedure Set_Is_Limited_Interface (Id : E; V : B := True) is
4370    begin
4371       pragma Assert (Is_Interface (Id));
4372       Set_Flag197 (Id, V);
4373    end Set_Is_Limited_Interface;
4374
4375    procedure Set_Is_Limited_Record (Id : E; V : B := True) is
4376    begin
4377       Set_Flag25 (Id, V);
4378    end Set_Is_Limited_Record;
4379
4380    procedure Set_Is_Machine_Code_Subprogram (Id : E; V : B := True) is
4381    begin
4382       pragma Assert (Is_Subprogram (Id));
4383       Set_Flag137 (Id, V);
4384    end Set_Is_Machine_Code_Subprogram;
4385
4386    procedure Set_Is_Non_Static_Subtype (Id : E; V : B := True) is
4387    begin
4388       pragma Assert (Is_Type (Id));
4389       Set_Flag109 (Id, V);
4390    end Set_Is_Non_Static_Subtype;
4391
4392    procedure Set_Is_Null_Init_Proc (Id : E; V : B := True) is
4393    begin
4394       pragma Assert (Ekind (Id) = E_Procedure);
4395       Set_Flag178 (Id, V);
4396    end Set_Is_Null_Init_Proc;
4397
4398    procedure Set_Is_Obsolescent (Id : E; V : B := True) is
4399    begin
4400       Set_Flag153 (Id, V);
4401    end Set_Is_Obsolescent;
4402
4403    procedure Set_Is_Only_Out_Parameter (Id : E; V : B := True) is
4404    begin
4405       pragma Assert (Ekind (Id) = E_Out_Parameter);
4406       Set_Flag226 (Id, V);
4407    end Set_Is_Only_Out_Parameter;
4408
4409    procedure Set_Is_Optional_Parameter (Id : E; V : B := True) is
4410    begin
4411       pragma Assert (Is_Formal (Id));
4412       Set_Flag134 (Id, V);
4413    end Set_Is_Optional_Parameter;
4414
4415    procedure Set_Is_Package_Body_Entity (Id : E; V : B := True) is
4416    begin
4417       Set_Flag160 (Id, V);
4418    end Set_Is_Package_Body_Entity;
4419
4420    procedure Set_Is_Packed (Id : E; V : B := True) is
4421    begin
4422       pragma Assert (Id = Base_Type (Id));
4423       Set_Flag51 (Id, V);
4424    end Set_Is_Packed;
4425
4426    procedure Set_Is_Packed_Array_Type (Id : E; V : B := True) is
4427    begin
4428       Set_Flag138 (Id, V);
4429    end Set_Is_Packed_Array_Type;
4430
4431    procedure Set_Is_Potentially_Use_Visible (Id : E; V : B := True) is
4432    begin
4433       pragma Assert (Nkind (Id) in N_Entity);
4434       Set_Flag9 (Id, V);
4435    end Set_Is_Potentially_Use_Visible;
4436
4437    procedure Set_Is_Preelaborated (Id : E; V : B := True) is
4438    begin
4439       Set_Flag59 (Id, V);
4440    end Set_Is_Preelaborated;
4441
4442    procedure Set_Is_Primitive (Id : E; V : B := True) is
4443    begin
4444       pragma Assert
4445         (Is_Overloadable (Id)
4446           or else Ekind_In (Id, E_Generic_Function, E_Generic_Procedure));
4447       Set_Flag218 (Id, V);
4448    end Set_Is_Primitive;
4449
4450    procedure Set_Is_Primitive_Wrapper (Id : E; V : B := True) is
4451    begin
4452       pragma Assert (Ekind_In (Id, E_Function, E_Procedure));
4453       Set_Flag195 (Id, V);
4454    end Set_Is_Primitive_Wrapper;
4455
4456    procedure Set_Is_Private_Composite (Id : E; V : B := True) is
4457    begin
4458       pragma Assert (Is_Type (Id));
4459       Set_Flag107 (Id, V);
4460    end Set_Is_Private_Composite;
4461
4462    procedure Set_Is_Private_Descendant (Id : E; V : B := True) is
4463    begin
4464       Set_Flag53 (Id, V);
4465    end Set_Is_Private_Descendant;
4466
4467    procedure Set_Is_Private_Primitive (Id : E; V : B := True) is
4468    begin
4469       pragma Assert (Ekind_In (Id, E_Function, E_Procedure));
4470       Set_Flag245 (Id, V);
4471    end Set_Is_Private_Primitive;
4472
4473    procedure Set_Is_Public (Id : E; V : B := True) is
4474    begin
4475       pragma Assert (Nkind (Id) in N_Entity);
4476       Set_Flag10 (Id, V);
4477    end Set_Is_Public;
4478
4479    procedure Set_Is_Pure (Id : E; V : B := True) is
4480    begin
4481       Set_Flag44 (Id, V);
4482    end Set_Is_Pure;
4483
4484    procedure Set_Is_Pure_Unit_Access_Type (Id : E; V : B := True) is
4485    begin
4486       pragma Assert (Is_Access_Type (Id));
4487       Set_Flag189 (Id, V);
4488    end Set_Is_Pure_Unit_Access_Type;
4489
4490    procedure Set_Is_RACW_Stub_Type (Id : E; V : B := True) is
4491    begin
4492       pragma Assert (Is_Type (Id));
4493       Set_Flag244 (Id, V);
4494    end Set_Is_RACW_Stub_Type;
4495
4496    procedure Set_Is_Raised (Id : E; V : B := True) is
4497    begin
4498       pragma Assert (Ekind (Id) = E_Exception);
4499       Set_Flag224 (Id, V);
4500    end Set_Is_Raised;
4501
4502    procedure Set_Is_Remote_Call_Interface (Id : E; V : B := True) is
4503    begin
4504       Set_Flag62 (Id, V);
4505    end Set_Is_Remote_Call_Interface;
4506
4507    procedure Set_Is_Remote_Types (Id : E; V : B := True) is
4508    begin
4509       Set_Flag61 (Id, V);
4510    end Set_Is_Remote_Types;
4511
4512    procedure Set_Is_Renaming_Of_Object (Id : E; V : B := True) is
4513    begin
4514       Set_Flag112 (Id, V);
4515    end Set_Is_Renaming_Of_Object;
4516
4517    procedure Set_Is_Return_Object (Id : E; V : B := True) is
4518    begin
4519       Set_Flag209 (Id, V);
4520    end Set_Is_Return_Object;
4521
4522    procedure Set_Is_Shared_Passive (Id : E; V : B := True) is
4523    begin
4524       Set_Flag60 (Id, V);
4525    end Set_Is_Shared_Passive;
4526
4527    procedure Set_Is_Statically_Allocated (Id : E; V : B := True) is
4528    begin
4529       pragma Assert
4530         (Is_Type (Id)
4531           or else Ekind_In (Id, E_Exception,
4532                                 E_Variable,
4533                                 E_Constant,
4534                                 E_Void));
4535       Set_Flag28 (Id, V);
4536    end Set_Is_Statically_Allocated;
4537
4538    procedure Set_Is_Tag (Id : E; V : B := True) is
4539    begin
4540       pragma Assert (Ekind_In (Id, E_Component, E_Constant, E_Variable));
4541       Set_Flag78 (Id, V);
4542    end Set_Is_Tag;
4543
4544    procedure Set_Is_Tagged_Type (Id : E; V : B := True) is
4545    begin
4546       Set_Flag55 (Id, V);
4547    end Set_Is_Tagged_Type;
4548
4549    procedure Set_Is_Thunk (Id : E; V : B := True) is
4550    begin
4551       Set_Flag225 (Id, V);
4552    end Set_Is_Thunk;
4553
4554    procedure Set_Is_Trivial_Subprogram (Id : E; V : B := True) is
4555    begin
4556       Set_Flag235 (Id, V);
4557    end Set_Is_Trivial_Subprogram;
4558
4559    procedure Set_Is_True_Constant (Id : E; V : B := True) is
4560    begin
4561       Set_Flag163 (Id, V);
4562    end Set_Is_True_Constant;
4563
4564    procedure Set_Is_Unchecked_Union (Id : E; V : B := True) is
4565    begin
4566       pragma Assert (Id = Base_Type (Id));
4567       Set_Flag117 (Id, V);
4568    end Set_Is_Unchecked_Union;
4569
4570    procedure Set_Is_Underlying_Record_View (Id : E; V : B := True) is
4571    begin
4572       pragma Assert (Ekind (Id) = E_Record_Type);
4573       Set_Flag246 (Id, V);
4574    end Set_Is_Underlying_Record_View;
4575
4576    procedure Set_Is_Unsigned_Type (Id : E; V : B := True) is
4577    begin
4578       pragma Assert (Is_Discrete_Or_Fixed_Point_Type (Id));
4579       Set_Flag144 (Id, V);
4580    end Set_Is_Unsigned_Type;
4581
4582    procedure Set_Is_Valued_Procedure (Id : E; V : B := True) is
4583    begin
4584       pragma Assert (Ekind (Id) = E_Procedure);
4585       Set_Flag127 (Id, V);
4586    end Set_Is_Valued_Procedure;
4587
4588    procedure Set_Is_Visible_Child_Unit (Id : E; V : B := True) is
4589    begin
4590       pragma Assert (Is_Child_Unit (Id));
4591       Set_Flag116 (Id, V);
4592    end Set_Is_Visible_Child_Unit;
4593
4594    procedure Set_Is_Visible_Formal (Id : E; V : B := True) is
4595    begin
4596       Set_Flag206 (Id, V);
4597    end Set_Is_Visible_Formal;
4598
4599    procedure Set_Is_VMS_Exception (Id : E; V : B := True) is
4600    begin
4601       pragma Assert (Ekind (Id) = E_Exception);
4602       Set_Flag133 (Id, V);
4603    end Set_Is_VMS_Exception;
4604
4605    procedure Set_Is_Volatile (Id : E; V : B := True) is
4606    begin
4607       pragma Assert (Nkind (Id) in N_Entity);
4608       Set_Flag16 (Id, V);
4609    end Set_Is_Volatile;
4610
4611    procedure Set_Itype_Printed (Id : E; V : B := True) is
4612    begin
4613       pragma Assert (Is_Itype (Id));
4614       Set_Flag202 (Id, V);
4615    end Set_Itype_Printed;
4616
4617    procedure Set_Kill_Elaboration_Checks (Id : E; V : B := True) is
4618    begin
4619       Set_Flag32 (Id, V);
4620    end Set_Kill_Elaboration_Checks;
4621
4622    procedure Set_Kill_Range_Checks (Id : E; V : B := True) is
4623    begin
4624       Set_Flag33 (Id, V);
4625    end Set_Kill_Range_Checks;
4626
4627    procedure Set_Kill_Tag_Checks (Id : E; V : B := True) is
4628    begin
4629       Set_Flag34 (Id, V);
4630    end Set_Kill_Tag_Checks;
4631
4632    procedure Set_Known_To_Have_Preelab_Init (Id : E; V : B := True) is
4633    begin
4634       pragma Assert (Is_Type (Id));
4635       Set_Flag207 (Id, V);
4636    end Set_Known_To_Have_Preelab_Init;
4637
4638    procedure Set_Last_Assignment (Id : E; V : N) is
4639    begin
4640       pragma Assert (Is_Assignable (Id));
4641       Set_Node26 (Id, V);
4642    end Set_Last_Assignment;
4643
4644    procedure Set_Last_Entity (Id : E; V : E) is
4645    begin
4646       Set_Node20 (Id, V);
4647    end Set_Last_Entity;
4648
4649    procedure Set_Limited_View (Id : E; V : E) is
4650    begin
4651       pragma Assert (Ekind (Id) = E_Package);
4652       Set_Node23 (Id, V);
4653    end Set_Limited_View;
4654
4655    procedure Set_Lit_Indexes (Id : E; V : E) is
4656    begin
4657       pragma Assert (Is_Enumeration_Type (Id) and then Root_Type (Id) = Id);
4658       Set_Node15 (Id, V);
4659    end Set_Lit_Indexes;
4660
4661    procedure Set_Lit_Strings (Id : E; V : E) is
4662    begin
4663       pragma Assert (Is_Enumeration_Type (Id) and then Root_Type (Id) = Id);
4664       Set_Node16 (Id, V);
4665    end Set_Lit_Strings;
4666
4667    procedure Set_Low_Bound_Tested (Id : E; V : B := True) is
4668    begin
4669       pragma Assert (Is_Formal (Id));
4670       Set_Flag205 (Id, V);
4671    end Set_Low_Bound_Tested;
4672
4673    procedure Set_Machine_Radix_10 (Id : E; V : B := True) is
4674    begin
4675       pragma Assert (Is_Decimal_Fixed_Point_Type (Id));
4676       Set_Flag84 (Id, V);
4677    end Set_Machine_Radix_10;
4678
4679    procedure Set_Master_Id (Id : E; V : E) is
4680    begin
4681       pragma Assert (Is_Access_Type (Id));
4682       Set_Node17 (Id, V);
4683    end Set_Master_Id;
4684
4685    procedure Set_Materialize_Entity (Id : E; V : B := True) is
4686    begin
4687       Set_Flag168 (Id, V);
4688    end Set_Materialize_Entity;
4689
4690    procedure Set_Mechanism (Id : E; V : M) is
4691    begin
4692       pragma Assert (Ekind (Id) = E_Function or else Is_Formal (Id));
4693       Set_Uint8 (Id, UI_From_Int (V));
4694    end Set_Mechanism;
4695
4696    procedure Set_Modulus (Id : E; V : U) is
4697    begin
4698       pragma Assert (Ekind (Id) = E_Modular_Integer_Type);
4699       Set_Uint17 (Id, V);
4700    end Set_Modulus;
4701
4702    procedure Set_Must_Be_On_Byte_Boundary (Id : E; V : B := True) is
4703    begin
4704       pragma Assert (Is_Type (Id));
4705       Set_Flag183 (Id, V);
4706    end Set_Must_Be_On_Byte_Boundary;
4707
4708    procedure Set_Must_Have_Preelab_Init (Id : E; V : B := True) is
4709    begin
4710       pragma Assert (Is_Type (Id));
4711       Set_Flag208 (Id, V);
4712    end Set_Must_Have_Preelab_Init;
4713
4714    procedure Set_Needs_Debug_Info (Id : E; V : B := True) is
4715    begin
4716       Set_Flag147 (Id, V);
4717    end Set_Needs_Debug_Info;
4718
4719    procedure Set_Needs_No_Actuals (Id : E; V : B := True) is
4720    begin
4721       pragma Assert
4722         (Is_Overloadable (Id)
4723           or else Ekind_In (Id, E_Subprogram_Type, E_Entry_Family));
4724       Set_Flag22 (Id, V);
4725    end Set_Needs_No_Actuals;
4726
4727    procedure Set_Never_Set_In_Source (Id : E; V : B := True) is
4728    begin
4729       Set_Flag115 (Id, V);
4730    end Set_Never_Set_In_Source;
4731
4732    procedure Set_Next_Inlined_Subprogram (Id : E; V : E) is
4733    begin
4734       Set_Node12 (Id, V);
4735    end Set_Next_Inlined_Subprogram;
4736
4737    procedure Set_No_Pool_Assigned (Id : E; V : B := True) is
4738    begin
4739       pragma Assert (Is_Access_Type (Id) and then Id = Base_Type (Id));
4740       Set_Flag131 (Id, V);
4741    end Set_No_Pool_Assigned;
4742
4743    procedure Set_No_Return (Id : E; V : B := True) is
4744    begin
4745       pragma Assert
4746         (V = False or else Ekind_In (Id, E_Procedure, E_Generic_Procedure));
4747       Set_Flag113 (Id, V);
4748    end Set_No_Return;
4749
4750    procedure Set_No_Strict_Aliasing (Id : E; V : B := True) is
4751    begin
4752       pragma Assert (Is_Access_Type (Id) and then Id = Base_Type (Id));
4753       Set_Flag136 (Id, V);
4754    end Set_No_Strict_Aliasing;
4755
4756    procedure Set_Non_Binary_Modulus (Id : E; V : B := True) is
4757    begin
4758       pragma Assert (Is_Type (Id) and then Id = Base_Type (Id));
4759       Set_Flag58 (Id, V);
4760    end Set_Non_Binary_Modulus;
4761
4762    procedure Set_Non_Limited_View (Id : E; V : E) is
4763    begin
4764       pragma Assert (Ekind (Id) in Incomplete_Kind);
4765       Set_Node17 (Id, V);
4766    end Set_Non_Limited_View;
4767
4768    procedure Set_Nonzero_Is_True (Id : E; V : B := True) is
4769    begin
4770       pragma Assert
4771         (Root_Type (Id) = Standard_Boolean
4772           and then Ekind (Id) = E_Enumeration_Type);
4773       Set_Flag162 (Id, V);
4774    end Set_Nonzero_Is_True;
4775
4776    procedure Set_Normalized_First_Bit (Id : E; V : U) is
4777    begin
4778       pragma Assert (Ekind_In (Id, E_Component, E_Discriminant));
4779       Set_Uint8 (Id, V);
4780    end Set_Normalized_First_Bit;
4781
4782    procedure Set_Normalized_Position (Id : E; V : U) is
4783    begin
4784       pragma Assert (Ekind_In (Id, E_Component, E_Discriminant));
4785       Set_Uint14 (Id, V);
4786    end Set_Normalized_Position;
4787
4788    procedure Set_Normalized_Position_Max (Id : E; V : U) is
4789    begin
4790       pragma Assert (Ekind_In (Id, E_Component, E_Discriminant));
4791       Set_Uint10 (Id, V);
4792    end Set_Normalized_Position_Max;
4793
4794    procedure Set_OK_To_Rename (Id : E; V : B := True) is
4795    begin
4796       pragma Assert (Ekind (Id) = E_Variable);
4797       Set_Flag247 (Id, V);
4798    end Set_OK_To_Rename;
4799
4800    procedure Set_OK_To_Reorder_Components (Id : E; V : B := True) is
4801    begin
4802       pragma Assert
4803         (Is_Record_Type (Id) and then Id = Base_Type (Id));
4804       Set_Flag239 (Id, V);
4805    end Set_OK_To_Reorder_Components;
4806
4807    procedure Set_Optimize_Alignment_Space (Id : E; V : B := True) is
4808    begin
4809       pragma Assert
4810         (Is_Type (Id) or else Ekind_In (Id, E_Constant, E_Variable));
4811       Set_Flag241 (Id, V);
4812    end Set_Optimize_Alignment_Space;
4813
4814    procedure Set_Optimize_Alignment_Time (Id : E; V : B := True) is
4815    begin
4816       pragma Assert
4817         (Is_Type (Id) or else Ekind_In (Id, E_Constant, E_Variable));
4818       Set_Flag242 (Id, V);
4819    end Set_Optimize_Alignment_Time;
4820
4821    procedure Set_Original_Array_Type (Id : E; V : E) is
4822    begin
4823       pragma Assert (Is_Array_Type (Id) or else Is_Modular_Integer_Type (Id));
4824       Set_Node21 (Id, V);
4825    end Set_Original_Array_Type;
4826
4827    procedure Set_Original_Record_Component (Id : E; V : E) is
4828    begin
4829       pragma Assert (Ekind_In (Id, E_Void, E_Component, E_Discriminant));
4830       Set_Node22 (Id, V);
4831    end Set_Original_Record_Component;
4832
4833    procedure Set_Overlays_Constant (Id : E; V : B := True) is
4834    begin
4835       Set_Flag243 (Id, V);
4836    end Set_Overlays_Constant;
4837
4838    procedure Set_Overridden_Operation (Id : E; V : E) is
4839    begin
4840       Set_Node26 (Id, V);
4841    end Set_Overridden_Operation;
4842
4843    procedure Set_Package_Instantiation (Id : E; V : N) is
4844    begin
4845       pragma Assert (Ekind_In (Id, E_Void, E_Generic_Package, E_Package));
4846       Set_Node26 (Id, V);
4847    end Set_Package_Instantiation;
4848
4849    procedure Set_Packed_Array_Type (Id : E; V : E) is
4850    begin
4851       pragma Assert (Is_Array_Type (Id));
4852       Set_Node23 (Id, V);
4853    end Set_Packed_Array_Type;
4854
4855    procedure Set_Parent_Subtype (Id : E; V : E) is
4856    begin
4857       pragma Assert (Ekind (Id) = E_Record_Type);
4858       Set_Node19 (Id, V);
4859    end Set_Parent_Subtype;
4860
4861    procedure Set_Postcondition_Proc (Id : E; V : E) is
4862    begin
4863       pragma Assert (Ekind (Id) = E_Procedure);
4864       Set_Node8 (Id, V);
4865    end Set_Postcondition_Proc;
4866
4867    procedure Set_PPC_Wrapper (Id : E; V : E) is
4868    begin
4869       pragma Assert (Ekind_In (Id, E_Entry, E_Entry_Family));
4870       Set_Node25 (Id, V);
4871    end Set_PPC_Wrapper;
4872
4873    procedure Set_Direct_Primitive_Operations (Id : E; V : L) is
4874    begin
4875       pragma Assert (Is_Tagged_Type (Id));
4876       Set_Elist10 (Id, V);
4877    end Set_Direct_Primitive_Operations;
4878
4879    procedure Set_Prival (Id : E; V : E) is
4880    begin
4881       pragma Assert (Is_Protected_Component (Id));
4882       Set_Node17 (Id, V);
4883    end Set_Prival;
4884
4885    procedure Set_Prival_Link (Id : E; V : E) is
4886    begin
4887       pragma Assert (Ekind_In (Id, E_Constant, E_Variable));
4888       Set_Node20 (Id, V);
4889    end Set_Prival_Link;
4890
4891    procedure Set_Private_Dependents (Id : E; V : L) is
4892    begin
4893       pragma Assert (Is_Incomplete_Or_Private_Type (Id));
4894       Set_Elist18 (Id, V);
4895    end Set_Private_Dependents;
4896
4897    procedure Set_Private_View (Id : E; V : N) is
4898    begin
4899       pragma Assert (Is_Private_Type (Id));
4900       Set_Node22 (Id, V);
4901    end Set_Private_View;
4902
4903    procedure Set_Protected_Body_Subprogram (Id : E; V : E) is
4904    begin
4905       pragma Assert (Is_Subprogram (Id) or else Is_Entry (Id));
4906       Set_Node11 (Id, V);
4907    end Set_Protected_Body_Subprogram;
4908
4909    procedure Set_Protected_Formal (Id : E; V : E) is
4910    begin
4911       pragma Assert (Is_Formal (Id));
4912       Set_Node22 (Id, V);
4913    end Set_Protected_Formal;
4914
4915    procedure Set_Protection_Object (Id : E; V : E) is
4916    begin
4917       pragma Assert (Ekind_In (Id, E_Entry,
4918                                    E_Entry_Family,
4919                                    E_Function,
4920                                    E_Procedure));
4921       Set_Node23 (Id, V);
4922    end Set_Protection_Object;
4923
4924    procedure Set_Reachable (Id : E; V : B := True) is
4925    begin
4926       Set_Flag49 (Id, V);
4927    end Set_Reachable;
4928
4929    procedure Set_Referenced (Id : E; V : B := True) is
4930    begin
4931       Set_Flag156 (Id, V);
4932    end Set_Referenced;
4933
4934    procedure Set_Referenced_As_LHS (Id : E; V : B := True) is
4935    begin
4936       Set_Flag36 (Id, V);
4937    end Set_Referenced_As_LHS;
4938
4939    procedure Set_Referenced_As_Out_Parameter (Id : E; V : B := True) is
4940    begin
4941       Set_Flag227 (Id, V);
4942    end Set_Referenced_As_Out_Parameter;
4943
4944    procedure Set_Register_Exception_Call (Id : E; V : N) is
4945    begin
4946       pragma Assert (Ekind (Id) = E_Exception);
4947       Set_Node20 (Id, V);
4948    end Set_Register_Exception_Call;
4949
4950    procedure Set_Related_Array_Object (Id : E; V : E) is
4951    begin
4952       pragma Assert (Is_Array_Type (Id));
4953       Set_Node19 (Id, V);
4954    end Set_Related_Array_Object;
4955
4956    procedure Set_Related_Expression (Id : E; V : N) is
4957    begin
4958       pragma Assert (Ekind (Id) in Type_Kind
4959                        or else Ekind_In (Id, E_Constant, E_Variable, E_Void));
4960       Set_Node24 (Id, V);
4961    end Set_Related_Expression;
4962
4963    procedure Set_Related_Instance (Id : E; V : E) is
4964    begin
4965       pragma Assert (Ekind_In (Id, E_Package, E_Package_Body));
4966       Set_Node15 (Id, V);
4967    end Set_Related_Instance;
4968
4969    procedure Set_Related_Type (Id : E; V : E) is
4970    begin
4971       pragma Assert (Ekind_In (Id, E_Component, E_Constant, E_Variable));
4972       Set_Node27 (Id, V);
4973    end Set_Related_Type;
4974
4975    procedure Set_Relative_Deadline_Variable (Id : E; V : E) is
4976    begin
4977       pragma Assert (Is_Task_Type (Id) and then Id = Base_Type (Id));
4978       Set_Node26 (Id, V);
4979    end Set_Relative_Deadline_Variable;
4980
4981    procedure Set_Renamed_Entity (Id : E; V : N) is
4982    begin
4983       Set_Node18 (Id, V);
4984    end Set_Renamed_Entity;
4985
4986    procedure Set_Renamed_In_Spec (Id : E; V : B := True) is
4987    begin
4988       pragma Assert (Ekind (Id) = E_Package);
4989       Set_Flag231 (Id, V);
4990    end Set_Renamed_In_Spec;
4991
4992    procedure Set_Renamed_Object (Id : E; V : N) is
4993    begin
4994       Set_Node18 (Id, V);
4995    end Set_Renamed_Object;
4996
4997    procedure Set_Renaming_Map (Id : E; V : U) is
4998    begin
4999       Set_Uint9 (Id, V);
5000    end Set_Renaming_Map;
5001
5002    procedure Set_Requires_Overriding (Id : E; V : B := True) is
5003    begin
5004       pragma Assert (Is_Overloadable (Id));
5005       Set_Flag213 (Id, V);
5006    end Set_Requires_Overriding;
5007
5008    procedure Set_Return_Present (Id : E; V : B := True) is
5009    begin
5010       Set_Flag54 (Id, V);
5011    end Set_Return_Present;
5012
5013    procedure Set_Return_Applies_To (Id : E; V : N) is
5014    begin
5015       Set_Node8 (Id, V);
5016    end Set_Return_Applies_To;
5017
5018    procedure Set_Returns_By_Ref (Id : E; V : B := True) is
5019    begin
5020       Set_Flag90 (Id, V);
5021    end Set_Returns_By_Ref;
5022
5023    procedure Set_Reverse_Bit_Order (Id : E; V : B := True) is
5024    begin
5025       pragma Assert
5026         (Is_Record_Type (Id) and then Id = Base_Type (Id));
5027       Set_Flag164 (Id, V);
5028    end Set_Reverse_Bit_Order;
5029
5030    procedure Set_RM_Size (Id : E; V : U) is
5031    begin
5032       pragma Assert (Is_Type (Id));
5033       Set_Uint13 (Id, V);
5034    end Set_RM_Size;
5035
5036    procedure Set_Scalar_Range (Id : E; V : N) is
5037    begin
5038       Set_Node20 (Id, V);
5039    end Set_Scalar_Range;
5040
5041    procedure Set_Scale_Value (Id : E; V : U) is
5042    begin
5043       Set_Uint15 (Id, V);
5044    end Set_Scale_Value;
5045
5046    procedure Set_Scope_Depth_Value (Id : E; V : U) is
5047    begin
5048       pragma Assert (not Is_Record_Type (Id));
5049       Set_Uint22 (Id, V);
5050    end Set_Scope_Depth_Value;
5051
5052    procedure Set_Sec_Stack_Needed_For_Return (Id : E; V : B := True) is
5053    begin
5054       Set_Flag167 (Id, V);
5055    end Set_Sec_Stack_Needed_For_Return;
5056
5057    procedure Set_Shadow_Entities (Id : E; V : S) is
5058    begin
5059       pragma Assert (Ekind_In (Id, E_Package, E_Generic_Package));
5060       Set_List14 (Id, V);
5061    end Set_Shadow_Entities;
5062
5063    procedure Set_Shared_Var_Procs_Instance (Id : E; V : E) is
5064    begin
5065       pragma Assert (Ekind (Id) = E_Variable);
5066       Set_Node22 (Id, V);
5067    end Set_Shared_Var_Procs_Instance;
5068
5069    procedure Set_Size_Check_Code (Id : E; V : N) is
5070    begin
5071       pragma Assert (Ekind_In (Id, E_Constant, E_Variable));
5072       Set_Node19 (Id, V);
5073    end Set_Size_Check_Code;
5074
5075    procedure Set_Size_Depends_On_Discriminant (Id : E; V : B := True) is
5076    begin
5077       Set_Flag177 (Id, V);
5078    end Set_Size_Depends_On_Discriminant;
5079
5080    procedure Set_Size_Known_At_Compile_Time (Id : E; V : B := True) is
5081    begin
5082       Set_Flag92 (Id, V);
5083    end Set_Size_Known_At_Compile_Time;
5084
5085    procedure Set_Small_Value (Id : E; V : R) is
5086    begin
5087       pragma Assert (Is_Fixed_Point_Type (Id));
5088       Set_Ureal21 (Id, V);
5089    end Set_Small_Value;
5090
5091    procedure Set_Spec_Entity (Id : E; V : E) is
5092    begin
5093       pragma Assert (Ekind (Id) = E_Package_Body or else Is_Formal (Id));
5094       Set_Node19 (Id, V);
5095    end Set_Spec_Entity;
5096
5097    procedure Set_Spec_PPC_List (Id : E; V : N) is
5098    begin
5099       pragma Assert
5100         (Ekind_In (Id, E_Entry, E_Entry_Family, E_Void)
5101           or else Is_Subprogram (Id)
5102           or else Is_Generic_Subprogram (Id));
5103       Set_Node24 (Id, V);
5104    end Set_Spec_PPC_List;
5105
5106    procedure Set_Static_Predicate (Id : E; V : S) is
5107    begin
5108       pragma Assert
5109         (Ekind_In (Id, E_Enumeration_Subtype,
5110                        E_Modular_Integer_Subtype,
5111                        E_Signed_Integer_Subtype)
5112           and then Has_Predicates (Id));
5113       Set_List25 (Id, V);
5114    end Set_Static_Predicate;
5115
5116    procedure Set_Storage_Size_Variable (Id : E; V : E) is
5117    begin
5118       pragma Assert (Is_Access_Type (Id) or else Is_Task_Type (Id));
5119       pragma Assert (Id = Base_Type (Id));
5120       Set_Node15 (Id, V);
5121    end Set_Storage_Size_Variable;
5122
5123    procedure Set_Static_Elaboration_Desired (Id : E; V : B) is
5124    begin
5125       pragma Assert (Ekind (Id) = E_Package);
5126       Set_Flag77 (Id, V);
5127    end Set_Static_Elaboration_Desired;
5128
5129    procedure Set_Static_Initialization (Id : E; V : N) is
5130    begin
5131       pragma Assert
5132         (Ekind (Id) = E_Procedure and then not Is_Dispatching_Operation (Id));
5133       Set_Node26 (Id, V);
5134    end Set_Static_Initialization;
5135
5136    procedure Set_Stored_Constraint (Id : E; V : L) is
5137    begin
5138       pragma Assert (Nkind (Id) in N_Entity);
5139       Set_Elist23 (Id, V);
5140    end Set_Stored_Constraint;
5141
5142    procedure Set_Strict_Alignment (Id : E; V : B := True) is
5143    begin
5144       pragma Assert (Id = Base_Type (Id));
5145       Set_Flag145 (Id, V);
5146    end Set_Strict_Alignment;
5147
5148    procedure Set_String_Literal_Length (Id : E; V : U) is
5149    begin
5150       pragma Assert (Ekind (Id) = E_String_Literal_Subtype);
5151       Set_Uint16 (Id, V);
5152    end Set_String_Literal_Length;
5153
5154    procedure Set_String_Literal_Low_Bound (Id : E; V : N) is
5155    begin
5156       pragma Assert (Ekind (Id) = E_String_Literal_Subtype);
5157       Set_Node15 (Id, V);
5158    end Set_String_Literal_Low_Bound;
5159
5160    procedure Set_Subprograms_For_Type (Id : E; V : E) is
5161    begin
5162       pragma Assert (Is_Type (Id) or else Is_Subprogram (Id));
5163       Set_Node29 (Id, V);
5164    end Set_Subprograms_For_Type;
5165
5166    procedure Set_Suppress_Elaboration_Warnings (Id : E; V : B := True) is
5167    begin
5168       Set_Flag148 (Id, V);
5169    end Set_Suppress_Elaboration_Warnings;
5170
5171    procedure Set_Suppress_Init_Proc (Id : E; V : B := True) is
5172    begin
5173       pragma Assert (Id = Base_Type (Id));
5174       Set_Flag105 (Id, V);
5175    end Set_Suppress_Init_Proc;
5176
5177    procedure Set_Suppress_Style_Checks (Id : E; V : B := True) is
5178    begin
5179       Set_Flag165 (Id, V);
5180    end Set_Suppress_Style_Checks;
5181
5182    procedure Set_Suppress_Value_Tracking_On_Call (Id : E; V : B := True) is
5183    begin
5184       Set_Flag217 (Id, V);
5185    end Set_Suppress_Value_Tracking_On_Call;
5186
5187    procedure Set_Task_Body_Procedure (Id : E; V : N) is
5188    begin
5189       pragma Assert (Ekind (Id) in Task_Kind);
5190       Set_Node25 (Id, V);
5191    end Set_Task_Body_Procedure;
5192
5193    procedure Set_Treat_As_Volatile (Id : E; V : B := True) is
5194    begin
5195       Set_Flag41 (Id, V);
5196    end Set_Treat_As_Volatile;
5197
5198    procedure Set_Underlying_Full_View (Id : E; V : E) is
5199    begin
5200       pragma Assert (Ekind (Id) in Private_Kind);
5201       Set_Node19 (Id, V);
5202    end Set_Underlying_Full_View;
5203
5204    procedure Set_Underlying_Record_View (Id : E; V : E) is
5205    begin
5206       pragma Assert (Ekind (Id) = E_Record_Type);
5207       Set_Node28 (Id, V);
5208    end Set_Underlying_Record_View;
5209
5210    procedure Set_Universal_Aliasing (Id : E; V : B := True) is
5211    begin
5212       pragma Assert (Is_Type (Id) and then Id = Base_Type (Id));
5213       Set_Flag216 (Id, V);
5214    end Set_Universal_Aliasing;
5215
5216    procedure Set_Unset_Reference (Id : E; V : N) is
5217    begin
5218       Set_Node16 (Id, V);
5219    end Set_Unset_Reference;
5220
5221    procedure Set_Uses_Sec_Stack (Id : E; V : B := True) is
5222    begin
5223       Set_Flag95 (Id, V);
5224    end Set_Uses_Sec_Stack;
5225
5226    procedure Set_Used_As_Generic_Actual (Id : E; V : B := True) is
5227    begin
5228       Set_Flag222 (Id, V);
5229    end Set_Used_As_Generic_Actual;
5230
5231    procedure Set_Warnings_Off (Id : E; V : B := True) is
5232    begin
5233       Set_Flag96 (Id, V);
5234    end Set_Warnings_Off;
5235
5236    procedure Set_Warnings_Off_Used (Id : E; V : B := True) is
5237    begin
5238       Set_Flag236 (Id, V);
5239    end Set_Warnings_Off_Used;
5240
5241    procedure Set_Warnings_Off_Used_Unmodified (Id : E; V : B := True) is
5242    begin
5243       Set_Flag237 (Id, V);
5244    end Set_Warnings_Off_Used_Unmodified;
5245
5246    procedure Set_Warnings_Off_Used_Unreferenced (Id : E; V : B := True) is
5247    begin
5248       Set_Flag238 (Id, V);
5249    end Set_Warnings_Off_Used_Unreferenced;
5250
5251    procedure Set_Was_Hidden (Id : E; V : B := True) is
5252    begin
5253       Set_Flag196 (Id, V);
5254    end Set_Was_Hidden;
5255
5256    procedure Set_Wrapped_Entity (Id : E; V : E) is
5257    begin
5258       pragma Assert (Ekind_In (Id, E_Function, E_Procedure)
5259                       and then Is_Primitive_Wrapper (Id));
5260       Set_Node27 (Id, V);
5261    end Set_Wrapped_Entity;
5262
5263    -----------------------------------
5264    -- Field Initialization Routines --
5265    -----------------------------------
5266
5267    procedure Init_Alignment (Id : E) is
5268    begin
5269       Set_Uint14 (Id, Uint_0);
5270    end Init_Alignment;
5271
5272    procedure Init_Alignment (Id : E; V : Int) is
5273    begin
5274       Set_Uint14 (Id, UI_From_Int (V));
5275    end Init_Alignment;
5276
5277    procedure Init_Component_Bit_Offset (Id : E) is
5278    begin
5279       Set_Uint11 (Id, No_Uint);
5280    end Init_Component_Bit_Offset;
5281
5282    procedure Init_Component_Bit_Offset (Id : E; V : Int) is
5283    begin
5284       Set_Uint11 (Id, UI_From_Int (V));
5285    end Init_Component_Bit_Offset;
5286
5287    procedure Init_Component_Size (Id : E) is
5288    begin
5289       Set_Uint22 (Id, Uint_0);
5290    end Init_Component_Size;
5291
5292    procedure Init_Component_Size (Id : E; V : Int) is
5293    begin
5294       Set_Uint22 (Id, UI_From_Int (V));
5295    end Init_Component_Size;
5296
5297    procedure Init_Digits_Value (Id : E) is
5298    begin
5299       Set_Uint17 (Id, Uint_0);
5300    end Init_Digits_Value;
5301
5302    procedure Init_Digits_Value (Id : E; V : Int) is
5303    begin
5304       Set_Uint17 (Id, UI_From_Int (V));
5305    end Init_Digits_Value;
5306
5307    procedure Init_Esize (Id : E) is
5308    begin
5309       Set_Uint12 (Id, Uint_0);
5310    end Init_Esize;
5311
5312    procedure Init_Esize (Id : E; V : Int) is
5313    begin
5314       Set_Uint12 (Id, UI_From_Int (V));
5315    end Init_Esize;
5316
5317    procedure Init_Normalized_First_Bit (Id : E) is
5318    begin
5319       Set_Uint8 (Id, No_Uint);
5320    end Init_Normalized_First_Bit;
5321
5322    procedure Init_Normalized_First_Bit (Id : E; V : Int) is
5323    begin
5324       Set_Uint8 (Id, UI_From_Int (V));
5325    end Init_Normalized_First_Bit;
5326
5327    procedure Init_Normalized_Position (Id : E) is
5328    begin
5329       Set_Uint14 (Id, No_Uint);
5330    end Init_Normalized_Position;
5331
5332    procedure Init_Normalized_Position (Id : E; V : Int) is
5333    begin
5334       Set_Uint14 (Id, UI_From_Int (V));
5335    end Init_Normalized_Position;
5336
5337    procedure Init_Normalized_Position_Max (Id : E) is
5338    begin
5339       Set_Uint10 (Id, No_Uint);
5340    end Init_Normalized_Position_Max;
5341
5342    procedure Init_Normalized_Position_Max (Id : E; V : Int) is
5343    begin
5344       Set_Uint10 (Id, UI_From_Int (V));
5345    end Init_Normalized_Position_Max;
5346
5347    procedure Init_RM_Size (Id : E) is
5348    begin
5349       Set_Uint13 (Id, Uint_0);
5350    end Init_RM_Size;
5351
5352    procedure Init_RM_Size (Id : E; V : Int) is
5353    begin
5354       Set_Uint13 (Id, UI_From_Int (V));
5355    end Init_RM_Size;
5356
5357    -----------------------------
5358    -- Init_Component_Location --
5359    -----------------------------
5360
5361    procedure Init_Component_Location (Id : E) is
5362    begin
5363       Set_Uint8  (Id, No_Uint);  -- Normalized_First_Bit
5364       Set_Uint10 (Id, No_Uint);  -- Normalized_Position_Max
5365       Set_Uint11 (Id, No_Uint);  -- Component_Bit_Offset
5366       Set_Uint12 (Id, Uint_0);   -- Esize
5367       Set_Uint14 (Id, No_Uint);  -- Normalized_Position
5368    end Init_Component_Location;
5369
5370    ---------------
5371    -- Init_Size --
5372    ---------------
5373
5374    procedure Init_Size (Id : E; V : Int) is
5375    begin
5376       Set_Uint12 (Id, UI_From_Int (V));  -- Esize
5377       Set_Uint13 (Id, UI_From_Int (V));  -- RM_Size
5378    end Init_Size;
5379
5380    ---------------------
5381    -- Init_Size_Align --
5382    ---------------------
5383
5384    procedure Init_Size_Align (Id : E) is
5385    begin
5386       Set_Uint12 (Id, Uint_0);  -- Esize
5387       Set_Uint13 (Id, Uint_0);  -- RM_Size
5388       Set_Uint14 (Id, Uint_0);  -- Alignment
5389    end Init_Size_Align;
5390
5391    ----------------------------------------------
5392    -- Type Representation Attribute Predicates --
5393    ----------------------------------------------
5394
5395    function Known_Alignment                       (E : Entity_Id) return B is
5396    begin
5397       return Uint14 (E) /= Uint_0
5398         and then Uint14 (E) /= No_Uint;
5399    end Known_Alignment;
5400
5401    function Known_Component_Bit_Offset            (E : Entity_Id) return B is
5402    begin
5403       return Uint11 (E) /= No_Uint;
5404    end Known_Component_Bit_Offset;
5405
5406    function Known_Component_Size                  (E : Entity_Id) return B is
5407    begin
5408       return Uint22 (Base_Type (E)) /= Uint_0
5409         and then Uint22 (Base_Type (E)) /= No_Uint;
5410    end Known_Component_Size;
5411
5412    function Known_Esize                           (E : Entity_Id) return B is
5413    begin
5414       return Uint12 (E) /= Uint_0
5415         and then Uint12 (E) /= No_Uint;
5416    end Known_Esize;
5417
5418    function Known_Normalized_First_Bit            (E : Entity_Id) return B is
5419    begin
5420       return Uint8 (E) /= No_Uint;
5421    end Known_Normalized_First_Bit;
5422
5423    function Known_Normalized_Position             (E : Entity_Id) return B is
5424    begin
5425       return Uint14 (E) /= No_Uint;
5426    end Known_Normalized_Position;
5427
5428    function Known_Normalized_Position_Max         (E : Entity_Id) return B is
5429    begin
5430       return Uint10 (E) /= No_Uint;
5431    end Known_Normalized_Position_Max;
5432
5433    function Known_RM_Size                         (E : Entity_Id) return B is
5434    begin
5435       return Uint13 (E) /= No_Uint
5436         and then (Uint13 (E) /= Uint_0
5437                     or else Is_Discrete_Type (E)
5438                     or else Is_Fixed_Point_Type (E));
5439    end Known_RM_Size;
5440
5441    function Known_Static_Component_Bit_Offset     (E : Entity_Id) return B is
5442    begin
5443       return Uint11 (E) /= No_Uint
5444         and then Uint11 (E) >= Uint_0;
5445    end Known_Static_Component_Bit_Offset;
5446
5447    function Known_Static_Component_Size           (E : Entity_Id) return B is
5448    begin
5449       return Uint22 (Base_Type (E)) > Uint_0;
5450    end Known_Static_Component_Size;
5451
5452    function Known_Static_Esize                    (E : Entity_Id) return B is
5453    begin
5454       return Uint12 (E) > Uint_0
5455         and then not Is_Generic_Type (E);
5456    end Known_Static_Esize;
5457
5458    function Known_Static_Normalized_First_Bit     (E : Entity_Id) return B is
5459    begin
5460       return Uint8 (E) /= No_Uint
5461         and then Uint8 (E) >= Uint_0;
5462    end Known_Static_Normalized_First_Bit;
5463
5464    function Known_Static_Normalized_Position      (E : Entity_Id) return B is
5465    begin
5466       return Uint14 (E) /= No_Uint
5467         and then Uint14 (E) >= Uint_0;
5468    end Known_Static_Normalized_Position;
5469
5470    function Known_Static_Normalized_Position_Max  (E : Entity_Id) return B is
5471    begin
5472       return Uint10 (E) /= No_Uint
5473         and then Uint10 (E) >= Uint_0;
5474    end Known_Static_Normalized_Position_Max;
5475
5476    function Known_Static_RM_Size                  (E : Entity_Id) return B is
5477    begin
5478       return (Uint13 (E) > Uint_0
5479                 or else Is_Discrete_Type (E)
5480                 or else Is_Fixed_Point_Type (E))
5481         and then not Is_Generic_Type (E);
5482    end Known_Static_RM_Size;
5483
5484    function Unknown_Alignment                     (E : Entity_Id) return B is
5485    begin
5486       return Uint14 (E) = Uint_0
5487         or else Uint14 (E) = No_Uint;
5488    end Unknown_Alignment;
5489
5490    function Unknown_Component_Bit_Offset          (E : Entity_Id) return B is
5491    begin
5492       return Uint11 (E) = No_Uint;
5493    end Unknown_Component_Bit_Offset;
5494
5495    function Unknown_Component_Size                (E : Entity_Id) return B is
5496    begin
5497       return Uint22 (Base_Type (E)) = Uint_0
5498                or else
5499              Uint22 (Base_Type (E)) = No_Uint;
5500    end Unknown_Component_Size;
5501
5502    function Unknown_Esize                         (E : Entity_Id) return B is
5503    begin
5504       return Uint12 (E) = No_Uint
5505                or else
5506              Uint12 (E) = Uint_0;
5507    end Unknown_Esize;
5508
5509    function Unknown_Normalized_First_Bit          (E : Entity_Id) return B is
5510    begin
5511       return Uint8 (E) = No_Uint;
5512    end Unknown_Normalized_First_Bit;
5513
5514    function Unknown_Normalized_Position           (E : Entity_Id) return B is
5515    begin
5516       return Uint14 (E) = No_Uint;
5517    end Unknown_Normalized_Position;
5518
5519    function Unknown_Normalized_Position_Max       (E : Entity_Id) return B is
5520    begin
5521       return Uint10 (E) = No_Uint;
5522    end Unknown_Normalized_Position_Max;
5523
5524    function Unknown_RM_Size                       (E : Entity_Id) return B is
5525    begin
5526       return (Uint13 (E) = Uint_0
5527                 and then not Is_Discrete_Type (E)
5528                 and then not Is_Fixed_Point_Type (E))
5529         or else Uint13 (E) = No_Uint;
5530    end Unknown_RM_Size;
5531
5532    --------------------
5533    -- Address_Clause --
5534    --------------------
5535
5536    function Address_Clause (Id : E) return N is
5537    begin
5538       return Rep_Clause (Id, Name_Address);
5539    end Address_Clause;
5540
5541    ---------------
5542    -- Aft_Value --
5543    ---------------
5544
5545    function Aft_Value (Id : E) return U is
5546       Result    : Nat := 1;
5547       Delta_Val : Ureal := Delta_Value (Id);
5548    begin
5549       while Delta_Val < Ureal_Tenth loop
5550          Delta_Val := Delta_Val * Ureal_10;
5551          Result := Result + 1;
5552       end loop;
5553
5554       return UI_From_Int (Result);
5555    end Aft_Value;
5556
5557    ----------------------
5558    -- Alignment_Clause --
5559    ----------------------
5560
5561    function Alignment_Clause (Id : E) return N is
5562    begin
5563       return Rep_Clause (Id, Name_Alignment);
5564    end Alignment_Clause;
5565
5566    -------------------
5567    -- Append_Entity --
5568    -------------------
5569
5570    procedure Append_Entity (Id : Entity_Id; V : Entity_Id) is
5571    begin
5572       if Last_Entity (V) = Empty then
5573          Set_First_Entity (Id => V, V => Id);
5574       else
5575          Set_Next_Entity (Last_Entity (V), Id);
5576       end if;
5577
5578       Set_Next_Entity (Id, Empty);
5579       Set_Scope (Id, V);
5580       Set_Last_Entity (Id => V, V => Id);
5581    end Append_Entity;
5582
5583    ---------------
5584    -- Base_Type --
5585    ---------------
5586
5587    function Base_Type (Id : E) return E is
5588    begin
5589       case Ekind (Id) is
5590          when E_Enumeration_Subtype          |
5591               E_Incomplete_Type              |
5592               E_Signed_Integer_Subtype       |
5593               E_Modular_Integer_Subtype      |
5594               E_Floating_Point_Subtype       |
5595               E_Ordinary_Fixed_Point_Subtype |
5596               E_Decimal_Fixed_Point_Subtype  |
5597               E_Array_Subtype                |
5598               E_String_Subtype               |
5599               E_Record_Subtype               |
5600               E_Private_Subtype              |
5601               E_Record_Subtype_With_Private  |
5602               E_Limited_Private_Subtype      |
5603               E_Access_Subtype               |
5604               E_Protected_Subtype            |
5605               E_Task_Subtype                 |
5606               E_String_Literal_Subtype       |
5607               E_Class_Wide_Subtype           =>
5608             return Etype (Id);
5609
5610          when others =>
5611             return Id;
5612       end case;
5613    end Base_Type;
5614
5615    -------------------------
5616    -- Component_Alignment --
5617    -------------------------
5618
5619    --  Component Alignment is encoded using two flags, Flag128/129 as
5620    --  follows. Note that both flags False = Align_Default, so that the
5621    --  default initialization of flags to False initializes component
5622    --  alignment to the default value as required.
5623
5624    --     Flag128      Flag129      Value
5625    --     -------      -------      -----
5626    --      False        False       Calign_Default
5627    --      False        True        Calign_Component_Size
5628    --      True         False       Calign_Component_Size_4
5629    --      True         True        Calign_Storage_Unit
5630
5631    function Component_Alignment (Id : E) return C is
5632       BT : constant Node_Id := Base_Type (Id);
5633
5634    begin
5635       pragma Assert (Is_Array_Type (Id) or else Is_Record_Type (Id));
5636
5637       if Flag128 (BT) then
5638          if Flag129 (BT) then
5639             return Calign_Storage_Unit;
5640          else
5641             return Calign_Component_Size_4;
5642          end if;
5643
5644       else
5645          if Flag129 (BT) then
5646             return Calign_Component_Size;
5647          else
5648             return Calign_Default;
5649          end if;
5650       end if;
5651    end Component_Alignment;
5652
5653    ----------------------
5654    -- Declaration_Node --
5655    ----------------------
5656
5657    function Declaration_Node (Id : E) return N is
5658       P : Node_Id;
5659
5660    begin
5661       if Ekind (Id) = E_Incomplete_Type
5662         and then Present (Full_View (Id))
5663       then
5664          P := Parent (Full_View (Id));
5665       else
5666          P := Parent (Id);
5667       end if;
5668
5669       loop
5670          if Nkind (P) /= N_Selected_Component
5671            and then Nkind (P) /= N_Expanded_Name
5672            and then
5673              not (Nkind (P) = N_Defining_Program_Unit_Name
5674                    and then Is_Child_Unit (Id))
5675          then
5676             return P;
5677          else
5678             P := Parent (P);
5679          end if;
5680       end loop;
5681    end Declaration_Node;
5682
5683    ---------------------
5684    -- Designated_Type --
5685    ---------------------
5686
5687    function Designated_Type (Id : E) return E is
5688       Desig_Type : E;
5689
5690    begin
5691       Desig_Type := Directly_Designated_Type (Id);
5692
5693       if Ekind (Desig_Type) = E_Incomplete_Type
5694         and then Present (Full_View (Desig_Type))
5695       then
5696          return Full_View (Desig_Type);
5697
5698       elsif Is_Class_Wide_Type (Desig_Type)
5699         and then Ekind (Etype (Desig_Type)) = E_Incomplete_Type
5700         and then Present (Full_View (Etype (Desig_Type)))
5701         and then Present (Class_Wide_Type (Full_View (Etype (Desig_Type))))
5702       then
5703          return Class_Wide_Type (Full_View (Etype (Desig_Type)));
5704
5705       else
5706          return Desig_Type;
5707       end if;
5708    end Designated_Type;
5709
5710    ----------------------
5711    -- Entry_Index_Type --
5712    ----------------------
5713
5714    function Entry_Index_Type (Id : E) return N is
5715    begin
5716       pragma Assert (Ekind (Id) = E_Entry_Family);
5717       return Etype (Discrete_Subtype_Definition (Parent (Id)));
5718    end Entry_Index_Type;
5719
5720    ---------------------
5721    -- First_Component --
5722    ---------------------
5723
5724    function First_Component (Id : E) return E is
5725       Comp_Id : E;
5726
5727    begin
5728       pragma Assert
5729         (Is_Record_Type (Id) or else Is_Incomplete_Or_Private_Type (Id));
5730
5731       Comp_Id := First_Entity (Id);
5732       while Present (Comp_Id) loop
5733          exit when Ekind (Comp_Id) = E_Component;
5734          Comp_Id := Next_Entity (Comp_Id);
5735       end loop;
5736
5737       return Comp_Id;
5738    end First_Component;
5739
5740    -------------------------------------
5741    -- First_Component_Or_Discriminant --
5742    -------------------------------------
5743
5744    function First_Component_Or_Discriminant (Id : E) return E is
5745       Comp_Id : E;
5746
5747    begin
5748       pragma Assert
5749         (Is_Record_Type (Id) or else Is_Incomplete_Or_Private_Type (Id));
5750
5751       Comp_Id := First_Entity (Id);
5752       while Present (Comp_Id) loop
5753          exit when Ekind (Comp_Id) = E_Component
5754                      or else
5755                    Ekind (Comp_Id) = E_Discriminant;
5756          Comp_Id := Next_Entity (Comp_Id);
5757       end loop;
5758
5759       return Comp_Id;
5760    end First_Component_Or_Discriminant;
5761
5762    ------------------
5763    -- First_Formal --
5764    ------------------
5765
5766    function First_Formal (Id : E) return E is
5767       Formal : E;
5768
5769    begin
5770       pragma Assert
5771         (Is_Overloadable (Id)
5772           or else Ekind_In (Id, E_Entry_Family,
5773                                 E_Subprogram_Body,
5774                                 E_Subprogram_Type));
5775
5776       if Ekind (Id) = E_Enumeration_Literal then
5777          return Empty;
5778
5779       else
5780          Formal := First_Entity (Id);
5781
5782          if Present (Formal) and then Is_Formal (Formal) then
5783             return Formal;
5784          else
5785             return Empty;
5786          end if;
5787       end if;
5788    end First_Formal;
5789
5790    ------------------------------
5791    -- First_Formal_With_Extras --
5792    ------------------------------
5793
5794    function First_Formal_With_Extras (Id : E) return E is
5795       Formal : E;
5796
5797    begin
5798       pragma Assert
5799         (Is_Overloadable (Id)
5800                         or else Ekind_In (Id, E_Entry_Family,
5801                                               E_Subprogram_Body,
5802                                               E_Subprogram_Type));
5803
5804       if Ekind (Id) = E_Enumeration_Literal then
5805          return Empty;
5806
5807       else
5808          Formal := First_Entity (Id);
5809
5810          if Present (Formal) and then Is_Formal (Formal) then
5811             return Formal;
5812          else
5813             return Extra_Formals (Id);  -- Empty if no extra formals
5814          end if;
5815       end if;
5816    end First_Formal_With_Extras;
5817
5818    -------------------------------------
5819    -- Get_Attribute_Definition_Clause --
5820    -------------------------------------
5821
5822    function Get_Attribute_Definition_Clause
5823      (E  : Entity_Id;
5824       Id : Attribute_Id) return Node_Id
5825    is
5826       N : Node_Id;
5827
5828    begin
5829       N := First_Rep_Item (E);
5830       while Present (N) loop
5831          if Nkind (N) = N_Attribute_Definition_Clause
5832            and then Get_Attribute_Id (Chars (N)) = Id
5833          then
5834             return N;
5835          else
5836             Next_Rep_Item (N);
5837          end if;
5838       end loop;
5839
5840       return Empty;
5841    end Get_Attribute_Definition_Clause;
5842
5843    -------------------
5844    -- Get_Full_View --
5845    -------------------
5846
5847    function Get_Full_View (T : Entity_Id) return Entity_Id is
5848    begin
5849       if Ekind (T) = E_Incomplete_Type and then Present (Full_View (T)) then
5850          return Full_View (T);
5851
5852       elsif Is_Class_Wide_Type (T)
5853         and then Ekind (Root_Type (T)) = E_Incomplete_Type
5854         and then Present (Full_View (Root_Type (T)))
5855       then
5856          return Class_Wide_Type (Full_View (Root_Type (T)));
5857
5858       else
5859          return T;
5860       end if;
5861    end Get_Full_View;
5862
5863    --------------------------------------
5864    -- Get_Record_Representation_Clause --
5865    --------------------------------------
5866
5867    function Get_Record_Representation_Clause (E : Entity_Id) return Node_Id is
5868       N : Node_Id;
5869
5870    begin
5871       N := First_Rep_Item (E);
5872       while Present (N) loop
5873          if Nkind (N) = N_Record_Representation_Clause then
5874             return N;
5875          end if;
5876
5877          Next_Rep_Item (N);
5878       end loop;
5879
5880       return Empty;
5881    end Get_Record_Representation_Clause;
5882
5883    -----------------------------
5884    -- Get_Rep_Item_For_Entity --
5885    -----------------------------
5886
5887    function Get_Rep_Item_For_Entity
5888      (E   : Entity_Id;
5889       Nam : Name_Id) return Node_Id
5890    is
5891       N   : Node_Id;
5892       Arg : Node_Id;
5893
5894    begin
5895       N := First_Rep_Item (E);
5896       while Present (N) loop
5897          if Nkind (N) = N_Pragma and then Pragma_Name (N) = Nam then
5898             Arg := Get_Pragma_Arg (First (Pragma_Argument_Associations (N)));
5899
5900             if Is_Entity_Name (Arg) and then Entity (Arg) = E then
5901                return N;
5902             end if;
5903
5904          elsif Nkind (N) = N_Attribute_Definition_Clause
5905            and then Chars (N) = Nam
5906            and then Entity (N) = E
5907          then
5908             return N;
5909
5910          elsif Nkind (N) = N_Aspect_Specification
5911            and then Chars (Identifier (N)) = Nam
5912            and then Entity (N) = E
5913          then
5914             return N;
5915          end if;
5916
5917          Next_Rep_Item (N);
5918       end loop;
5919
5920       return Empty;
5921    end Get_Rep_Item_For_Entity;
5922
5923    --------------------
5924    -- Get_Rep_Pragma --
5925    --------------------
5926
5927    function Get_Rep_Pragma (E : Entity_Id; Nam : Name_Id) return Node_Id is
5928       N : Node_Id;
5929
5930    begin
5931       N := First_Rep_Item (E);
5932       while Present (N) loop
5933          if Nkind (N) = N_Pragma and then Pragma_Name (N) = Nam then
5934             return N;
5935          end if;
5936
5937          Next_Rep_Item (N);
5938       end loop;
5939
5940       return Empty;
5941    end Get_Rep_Pragma;
5942
5943    ------------------------
5944    -- Has_Attach_Handler --
5945    ------------------------
5946
5947    function Has_Attach_Handler (Id : E) return B is
5948       Ritem : Node_Id;
5949
5950    begin
5951       pragma Assert (Is_Protected_Type (Id));
5952
5953       Ritem := First_Rep_Item (Id);
5954       while Present (Ritem) loop
5955          if Nkind (Ritem) = N_Pragma
5956            and then Pragma_Name (Ritem) = Name_Attach_Handler
5957          then
5958             return True;
5959          else
5960             Next_Rep_Item (Ritem);
5961          end if;
5962       end loop;
5963
5964       return False;
5965    end Has_Attach_Handler;
5966
5967    -------------------------------------
5968    -- Has_Attribute_Definition_Clause --
5969    -------------------------------------
5970
5971    function Has_Attribute_Definition_Clause
5972      (E  : Entity_Id;
5973       Id : Attribute_Id) return Boolean
5974    is
5975    begin
5976       return Present (Get_Attribute_Definition_Clause (E, Id));
5977    end Has_Attribute_Definition_Clause;
5978
5979    -----------------
5980    -- Has_Entries --
5981    -----------------
5982
5983    function Has_Entries (Id : E) return B is
5984       Ent : Entity_Id;
5985
5986    begin
5987       pragma Assert (Is_Concurrent_Type (Id));
5988
5989       Ent := First_Entity (Id);
5990       while Present (Ent) loop
5991          if Is_Entry (Ent) then
5992             return True;
5993          end if;
5994
5995          Ent := Next_Entity (Ent);
5996       end loop;
5997
5998       return False;
5999    end Has_Entries;
6000
6001    ----------------------------
6002    -- Has_Foreign_Convention --
6003    ----------------------------
6004
6005    function Has_Foreign_Convention (Id : E) return B is
6006    begin
6007       --  While regular Intrinsics such as the Standard operators fit in the
6008       --  "Ada" convention, those with an Interface_Name materialize GCC
6009       --  builtin imports for which Ada special treatments shouldn't apply.
6010
6011       return Convention (Id) in Foreign_Convention
6012         or else (Convention (Id) = Convention_Intrinsic
6013                    and then Present (Interface_Name (Id)));
6014    end Has_Foreign_Convention;
6015
6016    ---------------------------
6017    -- Has_Interrupt_Handler --
6018    ---------------------------
6019
6020    function Has_Interrupt_Handler (Id : E) return B is
6021       Ritem : Node_Id;
6022
6023    begin
6024       pragma Assert (Is_Protected_Type (Id));
6025
6026       Ritem := First_Rep_Item (Id);
6027       while Present (Ritem) loop
6028          if Nkind (Ritem) = N_Pragma
6029            and then Pragma_Name (Ritem) = Name_Interrupt_Handler
6030          then
6031             return True;
6032          else
6033             Next_Rep_Item (Ritem);
6034          end if;
6035       end loop;
6036
6037       return False;
6038    end Has_Interrupt_Handler;
6039
6040    --------------------------
6041    -- Has_Private_Ancestor --
6042    --------------------------
6043
6044    function Has_Private_Ancestor (Id : E) return B is
6045       R  : constant Entity_Id := Root_Type (Id);
6046       T1 : Entity_Id := Id;
6047    begin
6048       loop
6049          if Is_Private_Type (T1) then
6050             return True;
6051          elsif T1 = R then
6052             return False;
6053          else
6054             T1 := Etype (T1);
6055          end if;
6056       end loop;
6057    end Has_Private_Ancestor;
6058
6059    --------------------
6060    -- Has_Rep_Pragma --
6061    --------------------
6062
6063    function Has_Rep_Pragma (E : Entity_Id; Nam : Name_Id) return Boolean is
6064    begin
6065       return Present (Get_Rep_Pragma (E, Nam));
6066    end Has_Rep_Pragma;
6067
6068    --------------------
6069    -- Has_Unmodified --
6070    --------------------
6071
6072    function Has_Unmodified (E : Entity_Id) return Boolean is
6073    begin
6074       if Has_Pragma_Unmodified (E) then
6075          return True;
6076       elsif Warnings_Off (E) then
6077          Set_Warnings_Off_Used_Unmodified (E);
6078          return True;
6079       else
6080          return False;
6081       end if;
6082    end Has_Unmodified;
6083
6084    ---------------------
6085    -- Has_Unreferenced --
6086    ---------------------
6087
6088    function Has_Unreferenced (E : Entity_Id) return Boolean is
6089    begin
6090       if Has_Pragma_Unreferenced (E) then
6091          return True;
6092       elsif Warnings_Off (E) then
6093          Set_Warnings_Off_Used_Unreferenced (E);
6094          return True;
6095       else
6096          return False;
6097       end if;
6098    end Has_Unreferenced;
6099
6100    ----------------------
6101    -- Has_Warnings_Off --
6102    ----------------------
6103
6104    function Has_Warnings_Off (E : Entity_Id) return Boolean is
6105    begin
6106       if Warnings_Off (E) then
6107          Set_Warnings_Off_Used (E);
6108          return True;
6109       else
6110          return False;
6111       end if;
6112    end Has_Warnings_Off;
6113
6114    ------------------------------
6115    -- Implementation_Base_Type --
6116    ------------------------------
6117
6118    function Implementation_Base_Type (Id : E) return E is
6119       Bastyp : Entity_Id;
6120       Imptyp : Entity_Id;
6121
6122    begin
6123       Bastyp := Base_Type (Id);
6124
6125       if Is_Incomplete_Or_Private_Type (Bastyp) then
6126          Imptyp := Underlying_Type (Bastyp);
6127
6128          --  If we have an implementation type, then just return it,
6129          --  otherwise we return the Base_Type anyway. This can only
6130          --  happen in error situations and should avoid some error bombs.
6131
6132          if Present (Imptyp) then
6133             return Base_Type (Imptyp);
6134          else
6135             return Bastyp;
6136          end if;
6137
6138       else
6139          return Bastyp;
6140       end if;
6141    end Implementation_Base_Type;
6142
6143    -------------------------
6144    -- Invariant_Procedure --
6145    -------------------------
6146
6147    function Invariant_Procedure (Id : E) return E is
6148       S : Entity_Id;
6149
6150    begin
6151       pragma Assert (Is_Type (Id) and then Has_Invariants (Id));
6152
6153       if No (Subprograms_For_Type (Id)) then
6154          return Empty;
6155
6156       else
6157          S := Subprograms_For_Type (Id);
6158          while Present (S) loop
6159             if Has_Invariants (S) then
6160                return S;
6161             else
6162                S := Subprograms_For_Type (S);
6163             end if;
6164          end loop;
6165
6166          return Empty;
6167       end if;
6168    end Invariant_Procedure;
6169
6170    ---------------------
6171    -- Is_Boolean_Type --
6172    ---------------------
6173
6174    function Is_Boolean_Type (Id : E) return B is
6175    begin
6176       return Root_Type (Id) = Standard_Boolean;
6177    end Is_Boolean_Type;
6178
6179    ------------------------
6180    -- Is_Constant_Object --
6181    ------------------------
6182
6183    function Is_Constant_Object (Id : E) return B is
6184       K : constant Entity_Kind := Ekind (Id);
6185    begin
6186       return
6187         K = E_Constant or else K = E_In_Parameter or else K = E_Loop_Parameter;
6188    end Is_Constant_Object;
6189
6190    --------------------
6191    -- Is_Discriminal --
6192    --------------------
6193
6194    function Is_Discriminal (Id : E) return B is
6195    begin
6196       return (Ekind_In (Id, E_Constant, E_In_Parameter)
6197                and then Present (Discriminal_Link (Id)));
6198    end Is_Discriminal;
6199
6200    ----------------------
6201    -- Is_Dynamic_Scope --
6202    ----------------------
6203
6204    function Is_Dynamic_Scope (Id : E) return B is
6205    begin
6206       return
6207         Ekind (Id) = E_Block
6208           or else
6209         Ekind (Id) = E_Function
6210           or else
6211         Ekind (Id) = E_Procedure
6212           or else
6213         Ekind (Id) = E_Subprogram_Body
6214           or else
6215         Ekind (Id) = E_Task_Type
6216           or else
6217        (Ekind (Id) = E_Limited_Private_Type
6218          and then Present (Full_View (Id))
6219          and then Ekind (Full_View (Id)) = E_Task_Type)
6220           or else
6221         Ekind (Id) = E_Entry
6222           or else
6223         Ekind (Id) = E_Entry_Family
6224           or else
6225         Ekind (Id) = E_Return_Statement;
6226    end Is_Dynamic_Scope;
6227
6228    --------------------
6229    -- Is_Entity_Name --
6230    --------------------
6231
6232    function Is_Entity_Name (N : Node_Id) return Boolean is
6233       Kind : constant Node_Kind := Nkind (N);
6234
6235    begin
6236       --  Identifiers, operator symbols, expanded names are entity names
6237
6238       return Kind = N_Identifier
6239         or else Kind = N_Operator_Symbol
6240         or else Kind = N_Expanded_Name
6241
6242       --  Attribute references are entity names if they refer to an entity.
6243       --  Note that we don't do this by testing for the presence of the
6244       --  Entity field in the N_Attribute_Reference node, since it may not
6245       --  have been set yet.
6246
6247         or else (Kind = N_Attribute_Reference
6248                   and then Is_Entity_Attribute_Name (Attribute_Name (N)));
6249    end Is_Entity_Name;
6250
6251    -----------------------------------
6252    -- Is_Package_Or_Generic_Package --
6253    -----------------------------------
6254
6255    function Is_Package_Or_Generic_Package (Id : E) return B is
6256    begin
6257       return
6258         Ekind (Id) = E_Package
6259           or else
6260         Ekind (Id) = E_Generic_Package;
6261    end Is_Package_Or_Generic_Package;
6262
6263    ------------------------
6264    -- Predicate_Function --
6265    ------------------------
6266
6267    function Predicate_Function (Id : E) return E is
6268       S : Entity_Id;
6269
6270    begin
6271       pragma Assert (Is_Type (Id));
6272
6273       if No (Subprograms_For_Type (Id)) then
6274          return Empty;
6275
6276       else
6277          S := Subprograms_For_Type (Id);
6278          while Present (S) loop
6279             if Has_Predicates (S) then
6280                return S;
6281             else
6282                S := Subprograms_For_Type (S);
6283             end if;
6284          end loop;
6285
6286          return Empty;
6287       end if;
6288    end Predicate_Function;
6289
6290    ---------------
6291    -- Is_Prival --
6292    ---------------
6293
6294    function Is_Prival (Id : E) return B is
6295    begin
6296       return (Ekind_In (Id, E_Constant, E_Variable)
6297                          and then Present (Prival_Link (Id)));
6298    end Is_Prival;
6299
6300    ----------------------------
6301    -- Is_Protected_Component --
6302    ----------------------------
6303
6304    function Is_Protected_Component (Id : E) return B is
6305    begin
6306       return Ekind (Id) = E_Component
6307         and then Is_Protected_Type (Scope (Id));
6308    end Is_Protected_Component;
6309
6310    ----------------------------
6311    -- Is_Protected_Interface --
6312    ----------------------------
6313
6314    function Is_Protected_Interface (Id : E) return B is
6315       Typ : constant Entity_Id := Base_Type (Id);
6316    begin
6317       if not Is_Interface (Typ) then
6318          return False;
6319       elsif Is_Class_Wide_Type (Typ) then
6320          return Is_Protected_Interface (Etype (Typ));
6321       else
6322          return Protected_Present (Type_Definition (Parent (Typ)));
6323       end if;
6324    end Is_Protected_Interface;
6325
6326    ------------------------------
6327    -- Is_Protected_Record_Type --
6328    ------------------------------
6329
6330    function Is_Protected_Record_Type (Id : E) return B is
6331    begin
6332       return
6333         Is_Concurrent_Record_Type (Id)
6334           and then Is_Protected_Type (Corresponding_Concurrent_Type (Id));
6335    end Is_Protected_Record_Type;
6336
6337    --------------------------------
6338    -- Is_Standard_Character_Type --
6339    --------------------------------
6340
6341    function Is_Standard_Character_Type (Id : E) return B is
6342    begin
6343       if Is_Type (Id) then
6344          declare
6345             R : constant Entity_Id := Root_Type (Id);
6346          begin
6347             return
6348               R = Standard_Character
6349                 or else
6350               R = Standard_Wide_Character
6351                 or else
6352               R = Standard_Wide_Wide_Character;
6353          end;
6354
6355       else
6356          return False;
6357       end if;
6358    end Is_Standard_Character_Type;
6359
6360    --------------------
6361    -- Is_String_Type --
6362    --------------------
6363
6364    function Is_String_Type (Id : E) return B is
6365    begin
6366       return Ekind (Id) in String_Kind
6367         or else (Is_Array_Type (Id)
6368                   and then Id /= Any_Composite
6369                   and then Number_Dimensions (Id) = 1
6370                   and then Is_Character_Type (Component_Type (Id)));
6371    end Is_String_Type;
6372
6373    -------------------------------
6374    -- Is_Synchronized_Interface --
6375    -------------------------------
6376
6377    function Is_Synchronized_Interface (Id : E) return B is
6378       Typ : constant Entity_Id := Base_Type (Id);
6379
6380    begin
6381       if not Is_Interface (Typ) then
6382          return False;
6383
6384       elsif Is_Class_Wide_Type (Typ) then
6385          return Is_Synchronized_Interface (Etype (Typ));
6386
6387       else
6388          return    Protected_Present    (Type_Definition (Parent (Typ)))
6389            or else Synchronized_Present (Type_Definition (Parent (Typ)))
6390            or else Task_Present         (Type_Definition (Parent (Typ)));
6391       end if;
6392    end Is_Synchronized_Interface;
6393
6394    -----------------------
6395    -- Is_Task_Interface --
6396    -----------------------
6397
6398    function Is_Task_Interface (Id : E) return B is
6399       Typ : constant Entity_Id := Base_Type (Id);
6400    begin
6401       if not Is_Interface (Typ) then
6402          return False;
6403       elsif Is_Class_Wide_Type (Typ) then
6404          return Is_Task_Interface (Etype (Typ));
6405       else
6406          return Task_Present (Type_Definition (Parent (Typ)));
6407       end if;
6408    end Is_Task_Interface;
6409
6410    -------------------------
6411    -- Is_Task_Record_Type --
6412    -------------------------
6413
6414    function Is_Task_Record_Type (Id : E) return B is
6415    begin
6416       return
6417         Is_Concurrent_Record_Type (Id)
6418           and then Is_Task_Type (Corresponding_Concurrent_Type (Id));
6419    end Is_Task_Record_Type;
6420
6421    ------------------------
6422    -- Is_Wrapper_Package --
6423    ------------------------
6424
6425    function Is_Wrapper_Package (Id : E) return B is
6426    begin
6427       return (Ekind (Id) = E_Package
6428                and then Present (Related_Instance (Id)));
6429    end Is_Wrapper_Package;
6430
6431    -----------------
6432    -- Last_Formal --
6433    -----------------
6434
6435    function Last_Formal (Id : E) return E is
6436       Formal : E;
6437
6438    begin
6439       pragma Assert
6440         (Is_Overloadable (Id)
6441           or else Ekind_In (Id, E_Entry_Family,
6442                                 E_Subprogram_Body,
6443                                 E_Subprogram_Type));
6444
6445       if Ekind (Id) = E_Enumeration_Literal then
6446          return Empty;
6447
6448       else
6449          Formal := First_Formal (Id);
6450
6451          if Present (Formal) then
6452             while Present (Next_Formal (Formal)) loop
6453                Formal := Next_Formal (Formal);
6454             end loop;
6455          end if;
6456
6457          return Formal;
6458       end if;
6459    end Last_Formal;
6460
6461    function Model_Emin_Value (Id : E) return Uint is
6462    begin
6463       return Machine_Emin_Value (Id);
6464    end Model_Emin_Value;
6465
6466    -------------------------
6467    -- Model_Epsilon_Value --
6468    -------------------------
6469
6470    function Model_Epsilon_Value (Id : E) return Ureal is
6471       Radix : constant Ureal := UR_From_Uint (Machine_Radix_Value (Id));
6472    begin
6473       return Radix ** (1 - Model_Mantissa_Value (Id));
6474    end Model_Epsilon_Value;
6475
6476    --------------------------
6477    -- Model_Mantissa_Value --
6478    --------------------------
6479
6480    function Model_Mantissa_Value (Id : E) return Uint is
6481    begin
6482       return Machine_Mantissa_Value (Id);
6483    end Model_Mantissa_Value;
6484
6485    -----------------------
6486    -- Model_Small_Value --
6487    -----------------------
6488
6489    function Model_Small_Value (Id : E) return Ureal is
6490       Radix : constant Ureal := UR_From_Uint (Machine_Radix_Value (Id));
6491    begin
6492       return Radix ** (Model_Emin_Value (Id) - 1);
6493    end Model_Small_Value;
6494
6495    ------------------------
6496    -- Machine_Emax_Value --
6497    ------------------------
6498
6499    function Machine_Emax_Value (Id : E) return Uint is
6500       Digs : constant Pos := UI_To_Int (Digits_Value (Base_Type (Id)));
6501
6502    begin
6503       case Float_Rep (Id) is
6504          when IEEE_Binary =>
6505             case Digs is
6506                when  1 ..  6 => return Uint_128;
6507                when  7 .. 15 => return 2**10;
6508                when 16 .. 18 => return 2**14;
6509                when others => return No_Uint;
6510             end case;
6511
6512          when VAX_Native =>
6513             case Digs is
6514                when  1 ..  9 => return 2**7 - 1;
6515                when 10 .. 15 => return 2**10 - 1;
6516                when others => return No_Uint;
6517             end case;
6518
6519          when AAMP =>
6520             return Uint_2 ** Uint_7 - Uint_1;
6521       end case;
6522    end Machine_Emax_Value;
6523
6524    ------------------------
6525    -- Machine_Emin_Value --
6526    ------------------------
6527
6528    function Machine_Emin_Value (Id : E) return Uint is
6529    begin
6530       case Float_Rep (Id) is
6531          when IEEE_Binary => return Uint_3 - Machine_Emax_Value (Id);
6532          when VAX_Native  => return -Machine_Emax_Value (Id);
6533          when AAMP        => return -Machine_Emax_Value (Id);
6534       end case;
6535    end Machine_Emin_Value;
6536
6537    ----------------------------
6538    -- Machine_Mantissa_Value --
6539    ----------------------------
6540
6541    function Machine_Mantissa_Value (Id : E) return Uint is
6542       Digs : constant Pos := UI_To_Int (Digits_Value (Base_Type (Id)));
6543
6544    begin
6545       case Float_Rep (Id) is
6546          when IEEE_Binary =>
6547             case Digs is
6548                when  1 ..  6 => return Uint_24;
6549                when  7 .. 15 => return UI_From_Int (53);
6550                when 16 .. 18 => return Uint_64;
6551                when others => return No_Uint;
6552             end case;
6553
6554          when VAX_Native =>
6555             case Digs is
6556                when  1 ..  6 => return Uint_24;
6557                when  7 ..  9 => return UI_From_Int (56);
6558                when 10 .. 15 => return UI_From_Int (53);
6559                when others => return No_Uint;
6560             end case;
6561
6562          when AAMP =>
6563             case Digs is
6564                when  1 ..  6 => return Uint_24;
6565                when  7 ..  9 => return UI_From_Int (40);
6566                when others => return No_Uint;
6567             end case;
6568       end case;
6569    end Machine_Mantissa_Value;
6570
6571    -------------------------
6572    -- Machine_Radix_Value --
6573    -------------------------
6574
6575    function Machine_Radix_Value (Id : E) return U is
6576    begin
6577       case Float_Rep (Id) is
6578          when IEEE_Binary | VAX_Native | AAMP =>
6579             return Uint_2;
6580       end case;
6581    end Machine_Radix_Value;
6582
6583    --------------------
6584    -- Next_Component --
6585    --------------------
6586
6587    function Next_Component (Id : E) return E is
6588       Comp_Id : E;
6589
6590    begin
6591       Comp_Id := Next_Entity (Id);
6592       while Present (Comp_Id) loop
6593          exit when Ekind (Comp_Id) = E_Component;
6594          Comp_Id := Next_Entity (Comp_Id);
6595       end loop;
6596
6597       return Comp_Id;
6598    end Next_Component;
6599
6600    ------------------------------------
6601    -- Next_Component_Or_Discriminant --
6602    ------------------------------------
6603
6604    function Next_Component_Or_Discriminant (Id : E) return E is
6605       Comp_Id : E;
6606
6607    begin
6608       Comp_Id := Next_Entity (Id);
6609       while Present (Comp_Id) loop
6610          exit when Ekind_In (Comp_Id, E_Component, E_Discriminant);
6611          Comp_Id := Next_Entity (Comp_Id);
6612       end loop;
6613
6614       return Comp_Id;
6615    end Next_Component_Or_Discriminant;
6616
6617    -----------------------
6618    -- Next_Discriminant --
6619    -----------------------
6620
6621    --  This function actually implements both Next_Discriminant and
6622    --  Next_Stored_Discriminant by making sure that the Discriminant
6623    --  returned is of the same variety as Id.
6624
6625    function Next_Discriminant (Id : E) return E is
6626
6627       --  Derived Tagged types with private extensions look like this...
6628
6629       --       E_Discriminant d1
6630       --       E_Discriminant d2
6631       --       E_Component    _tag
6632       --       E_Discriminant d1
6633       --       E_Discriminant d2
6634       --       ...
6635
6636       --  so it is critical not to go past the leading discriminants
6637
6638       D : E := Id;
6639
6640    begin
6641       pragma Assert (Ekind (Id) = E_Discriminant);
6642
6643       loop
6644          D := Next_Entity (D);
6645          if No (D)
6646            or else (Ekind (D) /= E_Discriminant
6647                      and then not Is_Itype (D))
6648          then
6649             return Empty;
6650          end if;
6651
6652          exit when Ekind (D) = E_Discriminant
6653            and then (Is_Completely_Hidden (D) = Is_Completely_Hidden (Id));
6654       end loop;
6655
6656       return D;
6657    end Next_Discriminant;
6658
6659    -----------------
6660    -- Next_Formal --
6661    -----------------
6662
6663    function Next_Formal (Id : E) return E is
6664       P : E;
6665
6666    begin
6667       --  Follow the chain of declared entities as long as the kind of the
6668       --  entity corresponds to a formal parameter. Skip internal entities
6669       --  that may have been created for implicit subtypes, in the process
6670       --  of analyzing default expressions.
6671
6672       P := Id;
6673       loop
6674          P := Next_Entity (P);
6675
6676          if No (P) or else Is_Formal (P) then
6677             return P;
6678          elsif not Is_Internal (P) then
6679             return Empty;
6680          end if;
6681       end loop;
6682    end Next_Formal;
6683
6684    -----------------------------
6685    -- Next_Formal_With_Extras --
6686    -----------------------------
6687
6688    function Next_Formal_With_Extras (Id : E) return E is
6689    begin
6690       if Present (Extra_Formal (Id)) then
6691          return Extra_Formal (Id);
6692       else
6693          return Next_Formal (Id);
6694       end if;
6695    end Next_Formal_With_Extras;
6696
6697    ----------------
6698    -- Next_Index --
6699    ----------------
6700
6701    function Next_Index (Id : Node_Id) return Node_Id is
6702    begin
6703       return Next (Id);
6704    end Next_Index;
6705
6706    ------------------
6707    -- Next_Literal --
6708    ------------------
6709
6710    function Next_Literal (Id : E) return E is
6711    begin
6712       pragma Assert (Nkind (Id) in N_Entity);
6713       return Next (Id);
6714    end Next_Literal;
6715
6716    ------------------------------
6717    -- Next_Stored_Discriminant --
6718    ------------------------------
6719
6720    function Next_Stored_Discriminant (Id : E) return E is
6721    begin
6722       --  See comment in Next_Discriminant
6723
6724       return Next_Discriminant (Id);
6725    end Next_Stored_Discriminant;
6726
6727    -----------------------
6728    -- Number_Dimensions --
6729    -----------------------
6730
6731    function Number_Dimensions (Id : E) return Pos is
6732       N : Int;
6733       T : Node_Id;
6734
6735    begin
6736       if Ekind (Id) in String_Kind then
6737          return 1;
6738
6739       else
6740          N := 0;
6741          T := First_Index (Id);
6742          while Present (T) loop
6743             N := N + 1;
6744             T := Next (T);
6745          end loop;
6746
6747          return N;
6748       end if;
6749    end Number_Dimensions;
6750
6751    --------------------
6752    -- Number_Entries --
6753    --------------------
6754
6755    function Number_Entries (Id : E) return Nat is
6756       N      : Int;
6757       Ent    : Entity_Id;
6758
6759    begin
6760       pragma Assert (Is_Concurrent_Type (Id));
6761
6762       N := 0;
6763       Ent := First_Entity (Id);
6764       while Present (Ent) loop
6765          if Is_Entry (Ent) then
6766             N := N + 1;
6767          end if;
6768
6769          Ent := Next_Entity (Ent);
6770       end loop;
6771
6772       return N;
6773    end Number_Entries;
6774
6775    --------------------
6776    -- Number_Formals --
6777    --------------------
6778
6779    function Number_Formals (Id : E) return Pos is
6780       N      : Int;
6781       Formal : Entity_Id;
6782
6783    begin
6784       N := 0;
6785       Formal := First_Formal (Id);
6786       while Present (Formal) loop
6787          N := N + 1;
6788          Formal := Next_Formal (Formal);
6789       end loop;
6790
6791       return N;
6792    end Number_Formals;
6793
6794    --------------------
6795    -- Parameter_Mode --
6796    --------------------
6797
6798    function Parameter_Mode (Id : E) return Formal_Kind is
6799    begin
6800       return Ekind (Id);
6801    end Parameter_Mode;
6802
6803    --------------------------
6804    -- Primitive_Operations --
6805    --------------------------
6806
6807    function Primitive_Operations (Id : E) return L is
6808    begin
6809       if Is_Concurrent_Type (Id) then
6810          if Present (Corresponding_Record_Type (Id)) then
6811             return Direct_Primitive_Operations
6812                      (Corresponding_Record_Type (Id));
6813          else
6814             return No_Elist;
6815          end if;
6816       else
6817          return Direct_Primitive_Operations (Id);
6818       end if;
6819    end Primitive_Operations;
6820
6821    ---------------------
6822    -- Record_Rep_Item --
6823    ---------------------
6824
6825    procedure Record_Rep_Item (E : Entity_Id; N : Node_Id) is
6826    begin
6827       Set_Next_Rep_Item (N, First_Rep_Item (E));
6828       Set_First_Rep_Item (E, N);
6829    end Record_Rep_Item;
6830
6831    ---------------
6832    -- Root_Type --
6833    ---------------
6834
6835    function Root_Type (Id : E) return E is
6836       T, Etyp : E;
6837
6838    begin
6839       pragma Assert (Nkind (Id) in N_Entity);
6840
6841       T := Base_Type (Id);
6842
6843       if Ekind (T) = E_Class_Wide_Type then
6844          return Etype (T);
6845
6846       elsif Ekind (T) = E_Class_Wide_Subtype then
6847          return Etype (Base_Type (T));
6848
6849          --  ??? T comes from Base_Type, how can it be a subtype?
6850          --  Also Base_Type is supposed to be idempotent, so either way
6851          --  this is equivalent to "return Etype (T)" and should be merged
6852          --  with the E_Class_Wide_Type case.
6853
6854       --  All other cases
6855
6856       else
6857          loop
6858             Etyp := Etype (T);
6859
6860             if T = Etyp then
6861                return T;
6862
6863             --  Following test catches some error cases resulting from
6864             --  previous errors.
6865
6866             elsif No (Etyp) then
6867                return T;
6868
6869             elsif Is_Private_Type (T) and then Etyp = Full_View (T) then
6870                return T;
6871
6872             elsif Is_Private_Type (Etyp) and then Full_View (Etyp) = T then
6873                return T;
6874             end if;
6875
6876             T := Etyp;
6877
6878             --  Return if there is a circularity in the inheritance chain. This
6879             --  happens in some error situations and we do not want to get
6880             --  stuck in this loop.
6881
6882             if T = Base_Type (Id) then
6883                return T;
6884             end if;
6885          end loop;
6886       end if;
6887    end Root_Type;
6888
6889    ---------------------
6890    -- Safe_Emax_Value --
6891    ---------------------
6892
6893    function Safe_Emax_Value (Id : E) return Uint is
6894    begin
6895       return Machine_Emax_Value (Id);
6896    end Safe_Emax_Value;
6897
6898    ----------------------
6899    -- Safe_First_Value --
6900    ----------------------
6901
6902    function Safe_First_Value (Id : E) return Ureal is
6903    begin
6904       return -Safe_Last_Value (Id);
6905    end Safe_First_Value;
6906
6907    ---------------------
6908    -- Safe_Last_Value --
6909    ---------------------
6910
6911    function Safe_Last_Value (Id : E) return Ureal is
6912       Radix       : constant Uint := Machine_Radix_Value (Id);
6913       Mantissa    : constant Uint := Machine_Mantissa_Value (Id);
6914       Emax        : constant Uint := Safe_Emax_Value (Id);
6915       Significand : constant Uint := Radix ** Mantissa - 1;
6916       Exponent    : constant Uint := Emax - Mantissa;
6917
6918    begin
6919       if Radix = 2 then
6920          return
6921            UR_From_Components
6922              (Num   => Significand * 2 ** (Exponent mod 4),
6923               Den   => -Exponent / 4,
6924               Rbase => 16);
6925
6926       else
6927          return
6928            UR_From_Components
6929              (Num => Significand,
6930               Den => -Exponent,
6931               Rbase => 16);
6932       end if;
6933    end Safe_Last_Value;
6934
6935    -----------------
6936    -- Scope_Depth --
6937    -----------------
6938
6939    function Scope_Depth (Id : E) return Uint is
6940       Scop : Entity_Id;
6941
6942    begin
6943       Scop := Id;
6944       while Is_Record_Type (Scop) loop
6945          Scop := Scope (Scop);
6946       end loop;
6947
6948       return Scope_Depth_Value (Scop);
6949    end Scope_Depth;
6950
6951    ---------------------
6952    -- Scope_Depth_Set --
6953    ---------------------
6954
6955    function Scope_Depth_Set (Id : E) return B is
6956    begin
6957       return not Is_Record_Type (Id)
6958         and then Field22 (Id) /= Union_Id (Empty);
6959    end Scope_Depth_Set;
6960
6961    -----------------------------
6962    -- Set_Component_Alignment --
6963    -----------------------------
6964
6965    --  Component Alignment is encoded using two flags, Flag128/129 as
6966    --  follows. Note that both flags False = Align_Default, so that the
6967    --  default initialization of flags to False initializes component
6968    --  alignment to the default value as required.
6969
6970    --     Flag128      Flag129      Value
6971    --     -------      -------      -----
6972    --      False        False       Calign_Default
6973    --      False        True        Calign_Component_Size
6974    --      True         False       Calign_Component_Size_4
6975    --      True         True        Calign_Storage_Unit
6976
6977    procedure Set_Component_Alignment (Id : E; V : C) is
6978    begin
6979       pragma Assert ((Is_Array_Type (Id) or else Is_Record_Type (Id))
6980                        and then Id = Base_Type (Id));
6981
6982       case V is
6983          when Calign_Default          =>
6984             Set_Flag128 (Id, False);
6985             Set_Flag129 (Id, False);
6986
6987          when Calign_Component_Size   =>
6988             Set_Flag128 (Id, False);
6989             Set_Flag129 (Id, True);
6990
6991          when Calign_Component_Size_4 =>
6992             Set_Flag128 (Id, True);
6993             Set_Flag129 (Id, False);
6994
6995          when Calign_Storage_Unit     =>
6996             Set_Flag128 (Id, True);
6997             Set_Flag129 (Id, True);
6998       end case;
6999    end Set_Component_Alignment;
7000
7001    -----------------------------
7002    -- Set_Invariant_Procedure --
7003    -----------------------------
7004
7005    procedure Set_Invariant_Procedure (Id : E; V : E) is
7006       S : Entity_Id;
7007
7008    begin
7009       pragma Assert (Is_Type (Id) and then Has_Invariants (Id));
7010
7011       S := Subprograms_For_Type (Id);
7012       Set_Subprograms_For_Type (Id, V);
7013
7014       while Present (S) loop
7015          if Has_Invariants (S) then
7016             raise Program_Error;
7017          else
7018             S := Subprograms_For_Type (S);
7019          end if;
7020       end loop;
7021
7022       Set_Subprograms_For_Type (Id, V);
7023    end Set_Invariant_Procedure;
7024
7025    ----------------------------
7026    -- Set_Predicate_Function --
7027    ----------------------------
7028
7029    procedure Set_Predicate_Function (Id : E; V : E) is
7030       S : Entity_Id;
7031
7032    begin
7033       pragma Assert (Is_Type (Id) and then Has_Predicates (Id));
7034
7035       S := Subprograms_For_Type (Id);
7036       Set_Subprograms_For_Type (Id, V);
7037
7038       while Present (S) loop
7039          if Has_Predicates (S) then
7040             raise Program_Error;
7041          else
7042             S := Subprograms_For_Type (S);
7043          end if;
7044       end loop;
7045
7046       Set_Subprograms_For_Type (Id, V);
7047    end Set_Predicate_Function;
7048
7049    -----------------
7050    -- Size_Clause --
7051    -----------------
7052
7053    function Size_Clause (Id : E) return N is
7054    begin
7055       return Rep_Clause (Id, Name_Size);
7056    end Size_Clause;
7057
7058    ------------------------
7059    -- Stream_Size_Clause --
7060    ------------------------
7061
7062    function Stream_Size_Clause (Id : E) return N is
7063    begin
7064       return Rep_Clause (Id, Name_Stream_Size);
7065    end Stream_Size_Clause;
7066
7067    ------------------
7068    -- Subtype_Kind --
7069    ------------------
7070
7071    function Subtype_Kind (K : Entity_Kind) return Entity_Kind is
7072       Kind : Entity_Kind;
7073
7074    begin
7075       case K is
7076          when Access_Kind                    =>
7077             Kind := E_Access_Subtype;
7078
7079          when E_Array_Type                   |
7080               E_Array_Subtype                =>
7081             Kind := E_Array_Subtype;
7082
7083          when E_Class_Wide_Type              |
7084               E_Class_Wide_Subtype           =>
7085             Kind := E_Class_Wide_Subtype;
7086
7087          when E_Decimal_Fixed_Point_Type     |
7088               E_Decimal_Fixed_Point_Subtype  =>
7089             Kind := E_Decimal_Fixed_Point_Subtype;
7090
7091          when E_Ordinary_Fixed_Point_Type    |
7092               E_Ordinary_Fixed_Point_Subtype =>
7093             Kind := E_Ordinary_Fixed_Point_Subtype;
7094
7095          when E_Private_Type                 |
7096               E_Private_Subtype              =>
7097             Kind := E_Private_Subtype;
7098
7099          when E_Limited_Private_Type         |
7100               E_Limited_Private_Subtype      =>
7101             Kind := E_Limited_Private_Subtype;
7102
7103          when E_Record_Type_With_Private     |
7104               E_Record_Subtype_With_Private  =>
7105             Kind := E_Record_Subtype_With_Private;
7106
7107          when E_Record_Type                  |
7108               E_Record_Subtype               =>
7109             Kind := E_Record_Subtype;
7110
7111          when E_String_Type                  |
7112               E_String_Subtype               =>
7113             Kind := E_String_Subtype;
7114
7115          when Enumeration_Kind               =>
7116             Kind := E_Enumeration_Subtype;
7117
7118          when Float_Kind                     =>
7119             Kind := E_Floating_Point_Subtype;
7120
7121          when Signed_Integer_Kind            =>
7122             Kind := E_Signed_Integer_Subtype;
7123
7124          when Modular_Integer_Kind           =>
7125             Kind := E_Modular_Integer_Subtype;
7126
7127          when Protected_Kind                 =>
7128             Kind := E_Protected_Subtype;
7129
7130          when Task_Kind                      =>
7131             Kind := E_Task_Subtype;
7132
7133          when others                         =>
7134             Kind := E_Void;
7135             raise Program_Error;
7136       end case;
7137
7138       return Kind;
7139    end Subtype_Kind;
7140
7141    ---------------------
7142    -- Type_High_Bound --
7143    ---------------------
7144
7145    function Type_High_Bound (Id : E) return Node_Id is
7146       Rng : constant Node_Id := Scalar_Range (Id);
7147    begin
7148       if Nkind (Rng) = N_Subtype_Indication then
7149          return High_Bound (Range_Expression (Constraint (Rng)));
7150       else
7151          return High_Bound (Rng);
7152       end if;
7153    end Type_High_Bound;
7154
7155    --------------------
7156    -- Type_Low_Bound --
7157    --------------------
7158
7159    function Type_Low_Bound (Id : E) return Node_Id is
7160       Rng : constant Node_Id := Scalar_Range (Id);
7161    begin
7162       if Nkind (Rng) = N_Subtype_Indication then
7163          return Low_Bound (Range_Expression (Constraint (Rng)));
7164       else
7165          return Low_Bound (Rng);
7166       end if;
7167    end Type_Low_Bound;
7168
7169    ---------------------
7170    -- Underlying_Type --
7171    ---------------------
7172
7173    function Underlying_Type (Id : E) return E is
7174    begin
7175       --  For record_with_private the underlying type is always the direct
7176       --  full view. Never try to take the full view of the parent it
7177       --  doesn't make sense.
7178
7179       if Ekind (Id) = E_Record_Type_With_Private then
7180          return Full_View (Id);
7181
7182       elsif Ekind (Id) in Incomplete_Or_Private_Kind then
7183
7184          --  If we have an incomplete or private type with a full view,
7185          --  then we return the Underlying_Type of this full view
7186
7187          if Present (Full_View (Id)) then
7188             if Id = Full_View (Id) then
7189
7190                --  Previous error in declaration
7191
7192                return Empty;
7193
7194             else
7195                return Underlying_Type (Full_View (Id));
7196             end if;
7197
7198          --  If we have an incomplete entity that comes from the limited
7199          --  view then we return the Underlying_Type of its non-limited
7200          --  view.
7201
7202          elsif From_With_Type (Id)
7203            and then Present (Non_Limited_View (Id))
7204          then
7205             return Underlying_Type (Non_Limited_View (Id));
7206
7207          --  Otherwise check for the case where we have a derived type or
7208          --  subtype, and if so get the Underlying_Type of the parent type.
7209
7210          elsif Etype (Id) /= Id then
7211             return Underlying_Type (Etype (Id));
7212
7213          --  Otherwise we have an incomplete or private type that has
7214          --  no full view, which means that we have not encountered the
7215          --  completion, so return Empty to indicate the underlying type
7216          --  is not yet known.
7217
7218          else
7219             return Empty;
7220          end if;
7221
7222       --  For non-incomplete, non-private types, return the type itself
7223       --  Also for entities that are not types at all return the entity
7224       --  itself.
7225
7226       else
7227          return Id;
7228       end if;
7229    end Underlying_Type;
7230
7231    ---------------
7232    -- Vax_Float --
7233    ---------------
7234
7235    function Vax_Float (Id : E) return B is
7236    begin
7237       return Is_Floating_Point_Type (Id) and then Float_Rep (Id) = VAX_Native;
7238    end Vax_Float;
7239
7240    ------------------------
7241    -- Write_Entity_Flags --
7242    ------------------------
7243
7244    procedure Write_Entity_Flags (Id : Entity_Id; Prefix : String) is
7245
7246       procedure W (Flag_Name : String; Flag : Boolean);
7247       --  Write out given flag if it is set
7248
7249       -------
7250       -- W --
7251       -------
7252
7253       procedure W (Flag_Name : String; Flag : Boolean) is
7254       begin
7255          if Flag then
7256             Write_Str (Prefix);
7257             Write_Str (Flag_Name);
7258             Write_Str (" = True");
7259             Write_Eol;
7260          end if;
7261       end W;
7262
7263    --  Start of processing for Write_Entity_Flags
7264
7265    begin
7266       if (Is_Array_Type (Id) or else Is_Record_Type (Id))
7267         and then Id = Base_Type (Id)
7268       then
7269          Write_Str (Prefix);
7270          Write_Str ("Component_Alignment = ");
7271
7272          case Component_Alignment (Id) is
7273             when Calign_Default =>
7274                Write_Str ("Calign_Default");
7275
7276             when Calign_Component_Size =>
7277                Write_Str ("Calign_Component_Size");
7278
7279             when Calign_Component_Size_4 =>
7280                Write_Str ("Calign_Component_Size_4");
7281
7282             when Calign_Storage_Unit =>
7283                Write_Str ("Calign_Storage_Unit");
7284          end case;
7285
7286          Write_Eol;
7287       end if;
7288
7289       W ("Address_Taken",                   Flag104 (Id));
7290       W ("Body_Needed_For_SAL",             Flag40  (Id));
7291       W ("C_Pass_By_Copy",                  Flag125 (Id));
7292       W ("Can_Never_Be_Null",               Flag38  (Id));
7293       W ("Checks_May_Be_Suppressed",        Flag31  (Id));
7294       W ("Debug_Info_Off",                  Flag166 (Id));
7295       W ("Default_Expressions_Processed",   Flag108 (Id));
7296       W ("Delay_Cleanups",                  Flag114 (Id));
7297       W ("Delay_Subprogram_Descriptors",    Flag50  (Id));
7298       W ("Depends_On_Private",              Flag14  (Id));
7299       W ("Discard_Names",                   Flag88  (Id));
7300       W ("Elaboration_Entity_Required",     Flag174 (Id));
7301       W ("Elaborate_Body_Desirable",        Flag210 (Id));
7302       W ("Entry_Accepted",                  Flag152 (Id));
7303       W ("Can_Use_Internal_Rep",            Flag229 (Id));
7304       W ("Finalize_Storage_Only",           Flag158 (Id));
7305       W ("From_With_Type",                  Flag159 (Id));
7306       W ("Has_Aliased_Components",          Flag135 (Id));
7307       W ("Has_Alignment_Clause",            Flag46  (Id));
7308       W ("Has_All_Calls_Remote",            Flag79  (Id));
7309       W ("Has_Anon_Block_Suffix",           Flag201 (Id));
7310       W ("Has_Atomic_Components",           Flag86  (Id));
7311       W ("Has_Biased_Representation",       Flag139 (Id));
7312       W ("Has_Completion",                  Flag26  (Id));
7313       W ("Has_Completion_In_Body",          Flag71  (Id));
7314       W ("Has_Complex_Representation",      Flag140 (Id));
7315       W ("Has_Component_Size_Clause",       Flag68  (Id));
7316       W ("Has_Contiguous_Rep",              Flag181 (Id));
7317       W ("Has_Controlled_Component",        Flag43  (Id));
7318       W ("Has_Controlling_Result",          Flag98  (Id));
7319       W ("Has_Convention_Pragma",           Flag119 (Id));
7320       W ("Has_Delayed_Aspects",             Flag200 (Id));
7321       W ("Has_Delayed_Freeze",              Flag18  (Id));
7322       W ("Has_Discriminants",               Flag5   (Id));
7323       W ("Has_Enumeration_Rep_Clause",      Flag66  (Id));
7324       W ("Has_Exit",                        Flag47  (Id));
7325       W ("Has_External_Tag_Rep_Clause",     Flag110 (Id));
7326       W ("Has_Forward_Instantiation",       Flag175 (Id));
7327       W ("Has_Fully_Qualified_Name",        Flag173 (Id));
7328       W ("Has_Gigi_Rep_Item",               Flag82  (Id));
7329       W ("Has_Homonym",                     Flag56  (Id));
7330       W ("Has_Inheritable_Invariants",      Flag248 (Id));
7331       W ("Has_Initial_Value",               Flag219 (Id));
7332       W ("Has_Invariants",                  Flag232 (Id));
7333       W ("Has_Machine_Radix_Clause",        Flag83  (Id));
7334       W ("Has_Master_Entity",               Flag21  (Id));
7335       W ("Has_Missing_Return",              Flag142 (Id));
7336       W ("Has_Nested_Block_With_Handler",   Flag101 (Id));
7337       W ("Has_Non_Standard_Rep",            Flag75  (Id));
7338       W ("Has_Object_Size_Clause",          Flag172 (Id));
7339       W ("Has_Per_Object_Constraint",       Flag154 (Id));
7340       W ("Has_Persistent_BSS",              Flag188 (Id));
7341       W ("Has_Postconditions",              Flag240 (Id));
7342       W ("Has_Pragma_Controlled",           Flag27  (Id));
7343       W ("Has_Pragma_Elaborate_Body",       Flag150 (Id));
7344       W ("Has_Pragma_Inline",               Flag157 (Id));
7345       W ("Has_Pragma_Inline_Always",        Flag230 (Id));
7346       W ("Has_Pragma_Ordered",              Flag198 (Id));
7347       W ("Has_Pragma_Pack",                 Flag121 (Id));
7348       W ("Has_Pragma_Preelab_Init",         Flag221 (Id));
7349       W ("Has_Pragma_Pure",                 Flag203 (Id));
7350       W ("Has_Pragma_Pure_Function",        Flag179 (Id));
7351       W ("Has_Pragma_Thread_Local_Storage", Flag169 (Id));
7352       W ("Has_Pragma_Unmodified",           Flag233 (Id));
7353       W ("Has_Pragma_Unreferenced",         Flag180 (Id));
7354       W ("Has_Pragma_Unreferenced_Objects", Flag212 (Id));
7355       W ("Has_Predicates",                  Flag250 (Id));
7356       W ("Has_Primitive_Operations",        Flag120 (Id));
7357       W ("Has_Private_Declaration",         Flag155 (Id));
7358       W ("Has_Qualified_Name",              Flag161 (Id));
7359       W ("Has_RACW",                        Flag214 (Id));
7360       W ("Has_Record_Rep_Clause",           Flag65  (Id));
7361       W ("Has_Recursive_Call",              Flag143 (Id));
7362       W ("Has_Size_Clause",                 Flag29  (Id));
7363       W ("Has_Small_Clause",                Flag67  (Id));
7364       W ("Has_Specified_Layout",            Flag100 (Id));
7365       W ("Has_Specified_Stream_Input",      Flag190 (Id));
7366       W ("Has_Specified_Stream_Output",     Flag191 (Id));
7367       W ("Has_Specified_Stream_Read",       Flag192 (Id));
7368       W ("Has_Specified_Stream_Write",      Flag193 (Id));
7369       W ("Has_Static_Discriminants",        Flag211 (Id));
7370       W ("Has_Storage_Size_Clause",         Flag23  (Id));
7371       W ("Has_Stream_Size_Clause",          Flag184 (Id));
7372       W ("Has_Subprogram_Descriptor",       Flag93  (Id));
7373       W ("Has_Task",                        Flag30  (Id));
7374       W ("Has_Thunks",                      Flag228 (Id));
7375       W ("Has_Unchecked_Union",             Flag123 (Id));
7376       W ("Has_Unknown_Discriminants",       Flag72  (Id));
7377       W ("Has_Up_Level_Access",             Flag215 (Id));
7378       W ("Has_Volatile_Components",         Flag87  (Id));
7379       W ("Has_Xref_Entry",                  Flag182 (Id));
7380       W ("In_Package_Body",                 Flag48  (Id));
7381       W ("In_Private_Part",                 Flag45  (Id));
7382       W ("In_Use",                          Flag8   (Id));
7383       W ("Is_AST_Entry",                    Flag132 (Id));
7384       W ("Is_Abstract_Subprogram",          Flag19  (Id));
7385       W ("Is_Abstract_Type",                Flag146  (Id));
7386       W ("Is_Local_Anonymous_Access",       Flag194 (Id));
7387       W ("Is_Access_Constant",              Flag69  (Id));
7388       W ("Is_Ada_2005_Only",                Flag185 (Id));
7389       W ("Is_Ada_2012_Only",                Flag199 (Id));
7390       W ("Is_Aliased",                      Flag15  (Id));
7391       W ("Is_Asynchronous",                 Flag81  (Id));
7392       W ("Is_Atomic",                       Flag85  (Id));
7393       W ("Is_Bit_Packed_Array",             Flag122 (Id));
7394       W ("Is_CPP_Class",                    Flag74  (Id));
7395       W ("Is_Called",                       Flag102 (Id));
7396       W ("Is_Character_Type",               Flag63  (Id));
7397       W ("Is_Child_Unit",                   Flag73  (Id));
7398       W ("Is_Class_Wide_Equivalent_Type",   Flag35  (Id));
7399       W ("Is_Compilation_Unit",             Flag149 (Id));
7400       W ("Is_Completely_Hidden",            Flag103 (Id));
7401       W ("Is_Concurrent_Record_Type",       Flag20  (Id));
7402       W ("Is_Constr_Subt_For_UN_Aliased",   Flag141 (Id));
7403       W ("Is_Constr_Subt_For_U_Nominal",    Flag80  (Id));
7404       W ("Is_Constrained",                  Flag12  (Id));
7405       W ("Is_Constructor",                  Flag76  (Id));
7406       W ("Is_Controlled",                   Flag42  (Id));
7407       W ("Is_Controlling_Formal",           Flag97  (Id));
7408       W ("Is_Descendent_Of_Address",        Flag223 (Id));
7409       W ("Is_Discrim_SO_Function",          Flag176 (Id));
7410       W ("Is_Dispatch_Table_Entity",        Flag234 (Id));
7411       W ("Is_Dispatching_Operation",        Flag6   (Id));
7412       W ("Is_Eliminated",                   Flag124 (Id));
7413       W ("Is_Entry_Formal",                 Flag52  (Id));
7414       W ("Is_Exported",                     Flag99  (Id));
7415       W ("Is_First_Subtype",                Flag70  (Id));
7416       W ("Is_For_Access_Subtype",           Flag118 (Id));
7417       W ("Is_Formal_Subprogram",            Flag111 (Id));
7418       W ("Is_Frozen",                       Flag4   (Id));
7419       W ("Is_Generic_Actual_Type",          Flag94  (Id));
7420       W ("Is_Generic_Instance",             Flag130 (Id));
7421       W ("Is_Generic_Type",                 Flag13  (Id));
7422       W ("Is_Hidden",                       Flag57  (Id));
7423       W ("Is_Hidden_Open_Scope",            Flag171 (Id));
7424       W ("Is_Immediately_Visible",          Flag7   (Id));
7425       W ("Is_Imported",                     Flag24  (Id));
7426       W ("Is_Inlined",                      Flag11  (Id));
7427       W ("Is_Instantiated",                 Flag126 (Id));
7428       W ("Is_Interface",                    Flag186 (Id));
7429       W ("Is_Internal",                     Flag17  (Id));
7430       W ("Is_Interrupt_Handler",            Flag89  (Id));
7431       W ("Is_Intrinsic_Subprogram",         Flag64  (Id));
7432       W ("Is_Itype",                        Flag91  (Id));
7433       W ("Is_Known_Non_Null",               Flag37  (Id));
7434       W ("Is_Known_Null",                   Flag204 (Id));
7435       W ("Is_Known_Valid",                  Flag170 (Id));
7436       W ("Is_Limited_Composite",            Flag106 (Id));
7437       W ("Is_Limited_Interface",            Flag197 (Id));
7438       W ("Is_Limited_Record",               Flag25  (Id));
7439       W ("Is_Machine_Code_Subprogram",      Flag137 (Id));
7440       W ("Is_Non_Static_Subtype",           Flag109 (Id));
7441       W ("Is_Null_Init_Proc",               Flag178 (Id));
7442       W ("Is_Obsolescent",                  Flag153 (Id));
7443       W ("Is_Only_Out_Parameter",           Flag226 (Id));
7444       W ("Is_Optional_Parameter",           Flag134 (Id));
7445       W ("Is_Package_Body_Entity",          Flag160 (Id));
7446       W ("Is_Packed",                       Flag51  (Id));
7447       W ("Is_Packed_Array_Type",            Flag138 (Id));
7448       W ("Is_Potentially_Use_Visible",      Flag9   (Id));
7449       W ("Is_Preelaborated",                Flag59  (Id));
7450       W ("Is_Primitive",                    Flag218 (Id));
7451       W ("Is_Primitive_Wrapper",            Flag195 (Id));
7452       W ("Is_Private_Composite",            Flag107 (Id));
7453       W ("Is_Private_Descendant",           Flag53  (Id));
7454       W ("Is_Private_Primitive",            Flag245 (Id));
7455       W ("Is_Public",                       Flag10  (Id));
7456       W ("Is_Pure",                         Flag44  (Id));
7457       W ("Is_Pure_Unit_Access_Type",        Flag189 (Id));
7458       W ("Is_RACW_Stub_Type",               Flag244 (Id));
7459       W ("Is_Raised",                       Flag224 (Id));
7460       W ("Is_Remote_Call_Interface",        Flag62  (Id));
7461       W ("Is_Remote_Types",                 Flag61  (Id));
7462       W ("Is_Renaming_Of_Object",           Flag112 (Id));
7463       W ("Is_Return_Object",                Flag209 (Id));
7464       W ("Is_Shared_Passive",               Flag60  (Id));
7465       W ("Is_Statically_Allocated",         Flag28  (Id));
7466       W ("Is_Tag",                          Flag78  (Id));
7467       W ("Is_Tagged_Type",                  Flag55  (Id));
7468       W ("Is_Thunk",                        Flag225 (Id));
7469       W ("Is_Trivial_Subprogram",           Flag235 (Id));
7470       W ("Is_True_Constant",                Flag163 (Id));
7471       W ("Is_Unchecked_Union",              Flag117 (Id));
7472       W ("Is_Underlying_Record_View",       Flag246 (Id));
7473       W ("Is_Unsigned_Type",                Flag144 (Id));
7474       W ("Is_VMS_Exception",                Flag133 (Id));
7475       W ("Is_Valued_Procedure",             Flag127 (Id));
7476       W ("Is_Visible_Child_Unit",           Flag116 (Id));
7477       W ("Is_Visible_Formal",               Flag206 (Id));
7478       W ("Is_Volatile",                     Flag16  (Id));
7479       W ("Itype_Printed",                   Flag202 (Id));
7480       W ("Kill_Elaboration_Checks",         Flag32  (Id));
7481       W ("Kill_Range_Checks",               Flag33  (Id));
7482       W ("Kill_Tag_Checks",                 Flag34  (Id));
7483       W ("Known_To_Have_Preelab_Init",      Flag207 (Id));
7484       W ("Low_Bound_Tested",                Flag205 (Id));
7485       W ("Machine_Radix_10",                Flag84  (Id));
7486       W ("Materialize_Entity",              Flag168 (Id));
7487       W ("Must_Be_On_Byte_Boundary",        Flag183 (Id));
7488       W ("Must_Have_Preelab_Init",          Flag208 (Id));
7489       W ("Needs_Debug_Info",                Flag147 (Id));
7490       W ("Needs_No_Actuals",                Flag22  (Id));
7491       W ("Never_Set_In_Source",             Flag115 (Id));
7492       W ("No_Pool_Assigned",                Flag131 (Id));
7493       W ("No_Return",                       Flag113 (Id));
7494       W ("No_Strict_Aliasing",              Flag136 (Id));
7495       W ("Non_Binary_Modulus",              Flag58  (Id));
7496       W ("Nonzero_Is_True",                 Flag162 (Id));
7497       W ("OK_To_Rename",                    Flag247 (Id));
7498       W ("OK_To_Reorder_Components",        Flag239 (Id));
7499       W ("Optimize_Alignment_Space",        Flag241 (Id));
7500       W ("Optimize_Alignment_Time",         Flag242 (Id));
7501       W ("Overlays_Constant",               Flag243 (Id));
7502       W ("Reachable",                       Flag49  (Id));
7503       W ("Referenced",                      Flag156 (Id));
7504       W ("Referenced_As_LHS",               Flag36  (Id));
7505       W ("Referenced_As_Out_Parameter",     Flag227 (Id));
7506       W ("Renamed_In_Spec",                 Flag231 (Id));
7507       W ("Requires_Overriding",             Flag213 (Id));
7508       W ("Return_Present",                  Flag54  (Id));
7509       W ("Returns_By_Ref",                  Flag90  (Id));
7510       W ("Reverse_Bit_Order",               Flag164 (Id));
7511       W ("Sec_Stack_Needed_For_Return",     Flag167 (Id));
7512       W ("Size_Depends_On_Discriminant",    Flag177 (Id));
7513       W ("Size_Known_At_Compile_Time",      Flag92  (Id));
7514       W ("Static_Elaboration_Desired",      Flag77  (Id));
7515       W ("Strict_Alignment",                Flag145 (Id));
7516       W ("Suppress_Elaboration_Warnings",   Flag148 (Id));
7517       W ("Suppress_Init_Proc",              Flag105 (Id));
7518       W ("Suppress_Style_Checks",           Flag165 (Id));
7519       W ("Suppress_Value_Tracking_On_Call", Flag217 (Id));
7520       W ("Treat_As_Volatile",               Flag41  (Id));
7521       W ("Universal_Aliasing",              Flag216 (Id));
7522       W ("Used_As_Generic_Actual",          Flag222 (Id));
7523       W ("Uses_Sec_Stack",                  Flag95  (Id));
7524       W ("Warnings_Off",                    Flag96  (Id));
7525       W ("Warnings_Off_Used",               Flag236 (Id));
7526       W ("Warnings_Off_Used_Unmodified",    Flag237 (Id));
7527       W ("Warnings_Off_Used_Unreferenced",  Flag238 (Id));
7528       W ("Was_Hidden",                      Flag196 (Id));
7529    end Write_Entity_Flags;
7530
7531    -----------------------
7532    -- Write_Entity_Info --
7533    -----------------------
7534
7535    procedure Write_Entity_Info (Id : Entity_Id; Prefix : String) is
7536
7537       procedure Write_Attribute (Which : String; Nam : E);
7538       --  Write attribute value with given string name
7539
7540       procedure Write_Kind (Id : Entity_Id);
7541       --  Write Ekind field of entity
7542
7543       ---------------------
7544       -- Write_Attribute --
7545       ---------------------
7546
7547       procedure Write_Attribute (Which : String; Nam : E) is
7548       begin
7549          Write_Str (Prefix);
7550          Write_Str (Which);
7551          Write_Int (Int (Nam));
7552          Write_Str (" ");
7553          Write_Name (Chars (Nam));
7554          Write_Str (" ");
7555       end Write_Attribute;
7556
7557       ----------------
7558       -- Write_Kind --
7559       ----------------
7560
7561       procedure Write_Kind (Id : Entity_Id) is
7562          K : constant String := Entity_Kind'Image (Ekind (Id));
7563
7564       begin
7565          Write_Str (Prefix);
7566          Write_Str ("   Kind    ");
7567
7568          if Is_Type (Id) and then Is_Tagged_Type (Id) then
7569             Write_Str ("TAGGED ");
7570          end if;
7571
7572          Write_Str (K (3 .. K'Length));
7573          Write_Str (" ");
7574
7575          if Is_Type (Id) and then Depends_On_Private (Id) then
7576             Write_Str ("Depends_On_Private ");
7577          end if;
7578       end Write_Kind;
7579
7580    --  Start of processing for Write_Entity_Info
7581
7582    begin
7583       Write_Eol;
7584       Write_Attribute ("Name ", Id);
7585       Write_Int (Int (Id));
7586       Write_Eol;
7587       Write_Kind (Id);
7588       Write_Eol;
7589       Write_Attribute ("   Type    ", Etype (Id));
7590       Write_Eol;
7591       Write_Attribute ("   Scope   ", Scope (Id));
7592       Write_Eol;
7593
7594       case Ekind (Id) is
7595
7596          when Discrete_Kind =>
7597             Write_Str ("Bounds: Id = ");
7598
7599             if Present (Scalar_Range (Id)) then
7600                Write_Int (Int (Type_Low_Bound (Id)));
7601                Write_Str (" .. Id = ");
7602                Write_Int (Int (Type_High_Bound (Id)));
7603             else
7604                Write_Str ("Empty");
7605             end if;
7606
7607             Write_Eol;
7608
7609          when Array_Kind =>
7610             declare
7611                Index : E;
7612
7613             begin
7614                Write_Attribute
7615                  ("   Component Type    ", Component_Type (Id));
7616                Write_Eol;
7617                Write_Str (Prefix);
7618                Write_Str ("   Indexes ");
7619
7620                Index := First_Index (Id);
7621                while Present (Index) loop
7622                   Write_Attribute (" ", Etype (Index));
7623                   Index := Next_Index (Index);
7624                end loop;
7625
7626                Write_Eol;
7627             end;
7628
7629          when Access_Kind =>
7630                Write_Attribute
7631                  ("   Directly Designated Type ",
7632                   Directly_Designated_Type (Id));
7633                Write_Eol;
7634
7635          when Overloadable_Kind =>
7636             if Present (Homonym (Id)) then
7637                Write_Str ("   Homonym   ");
7638                Write_Name (Chars (Homonym (Id)));
7639                Write_Str ("   ");
7640                Write_Int (Int (Homonym (Id)));
7641                Write_Eol;
7642             end if;
7643
7644             Write_Eol;
7645
7646          when E_Component =>
7647             if Ekind (Scope (Id)) in Record_Kind then
7648                Write_Attribute (
7649                   "   Original_Record_Component   ",
7650                   Original_Record_Component (Id));
7651                Write_Int (Int (Original_Record_Component (Id)));
7652                Write_Eol;
7653             end if;
7654
7655          when others => null;
7656       end case;
7657    end Write_Entity_Info;
7658
7659    -----------------------
7660    -- Write_Field6_Name --
7661    -----------------------
7662
7663    procedure Write_Field6_Name (Id : Entity_Id) is
7664       pragma Warnings (Off, Id);
7665    begin
7666       Write_Str ("First_Rep_Item");
7667    end Write_Field6_Name;
7668
7669    -----------------------
7670    -- Write_Field7_Name --
7671    -----------------------
7672
7673    procedure Write_Field7_Name (Id : Entity_Id) is
7674       pragma Warnings (Off, Id);
7675    begin
7676       Write_Str ("Freeze_Node");
7677    end Write_Field7_Name;
7678
7679    -----------------------
7680    -- Write_Field8_Name --
7681    -----------------------
7682
7683    procedure Write_Field8_Name (Id : Entity_Id) is
7684    begin
7685       case Ekind (Id) is
7686          when E_Component                                  |
7687               E_Discriminant                               =>
7688             Write_Str ("Normalized_First_Bit");
7689
7690          when Formal_Kind                                  |
7691               E_Function                                   |
7692               E_Subprogram_Body                            =>
7693             Write_Str ("Mechanism");
7694
7695          when Type_Kind                                    =>
7696             Write_Str ("Associated_Node_For_Itype");
7697
7698          when E_Loop                                       =>
7699             Write_Str ("First_Exit_Statement");
7700
7701          when E_Package                                    =>
7702             Write_Str ("Dependent_Instances");
7703
7704          when E_Procedure                                  =>
7705             Write_Str ("Postcondition_Proc");
7706
7707          when E_Return_Statement                           =>
7708             Write_Str ("Return_Applies_To");
7709
7710          when E_Variable                                   =>
7711             Write_Str ("Hiding_Loop_Variable");
7712
7713          when others                                       =>
7714             Write_Str ("Field8??");
7715       end case;
7716    end Write_Field8_Name;
7717
7718    -----------------------
7719    -- Write_Field9_Name --
7720    -----------------------
7721
7722    procedure Write_Field9_Name (Id : Entity_Id) is
7723    begin
7724       case Ekind (Id) is
7725          when Type_Kind                                    =>
7726             Write_Str ("Class_Wide_Type");
7727
7728          when E_Function                                   |
7729               E_Generic_Function                           |
7730               E_Generic_Package                            |
7731               E_Generic_Procedure                          |
7732               E_Package                                    |
7733               E_Procedure                                  =>
7734             Write_Str ("Renaming_Map");
7735
7736          when Object_Kind                                  =>
7737             Write_Str ("Current_Value");
7738
7739          when others                                       =>
7740             Write_Str ("Field9??");
7741       end case;
7742    end Write_Field9_Name;
7743
7744    ------------------------
7745    -- Write_Field10_Name --
7746    ------------------------
7747
7748    procedure Write_Field10_Name (Id : Entity_Id) is
7749    begin
7750       case Ekind (Id) is
7751          when Class_Wide_Kind                              |
7752               Incomplete_Kind                              |
7753               E_Record_Type                                |
7754               E_Record_Subtype                             |
7755               Private_Kind                                 |
7756               Concurrent_Kind                              =>
7757             Write_Str ("Direct_Primitive_Operations");
7758
7759          when Float_Kind                                 =>
7760             Write_Str ("Float_Rep");
7761
7762          when E_In_Parameter                               |
7763               E_Constant                                   =>
7764             Write_Str ("Discriminal_Link");
7765
7766          when E_Function                                   |
7767               E_Package                                    |
7768               E_Package_Body                               |
7769               E_Procedure                                  =>
7770             Write_Str ("Handler_Records");
7771
7772          when E_Component                                  |
7773               E_Discriminant                               =>
7774             Write_Str ("Normalized_Position_Max");
7775
7776          when others                                       =>
7777             Write_Str ("Field10??");
7778       end case;
7779    end Write_Field10_Name;
7780
7781    ------------------------
7782    -- Write_Field11_Name --
7783    ------------------------
7784
7785    procedure Write_Field11_Name (Id : Entity_Id) is
7786    begin
7787       case Ekind (Id) is
7788          when Formal_Kind                                  =>
7789             Write_Str ("Entry_Component");
7790
7791          when E_Component                                  |
7792               E_Discriminant                               =>
7793             Write_Str ("Component_Bit_Offset");
7794
7795          when E_Constant                                   =>
7796             Write_Str ("Full_View");
7797
7798          when E_Enumeration_Literal                        =>
7799             Write_Str ("Enumeration_Pos");
7800
7801          when E_Block                                      =>
7802             Write_Str ("Block_Node");
7803
7804          when E_Function                                   |
7805               E_Procedure                                  |
7806               E_Entry                                      |
7807               E_Entry_Family                               =>
7808             Write_Str ("Protected_Body_Subprogram");
7809
7810          when E_Generic_Package                            =>
7811             Write_Str ("Generic_Homonym");
7812
7813          when Type_Kind                                    =>
7814             Write_Str ("Full_View");
7815
7816          when others                                       =>
7817             Write_Str ("Field11??");
7818       end case;
7819    end Write_Field11_Name;
7820
7821    ------------------------
7822    -- Write_Field12_Name --
7823    ------------------------
7824
7825    procedure Write_Field12_Name (Id : Entity_Id) is
7826    begin
7827       case Ekind (Id) is
7828          when Entry_Kind                                   =>
7829             Write_Str ("Barrier_Function");
7830
7831          when E_Enumeration_Literal                        =>
7832             Write_Str ("Enumeration_Rep");
7833
7834          when Type_Kind                                    |
7835               E_Component                                  |
7836               E_Constant                                   |
7837               E_Discriminant                               |
7838               E_Exception                                  |
7839               E_In_Parameter                               |
7840               E_In_Out_Parameter                           |
7841               E_Out_Parameter                              |
7842               E_Loop_Parameter                             |
7843               E_Variable                                   =>
7844             Write_Str ("Esize");
7845
7846          when E_Function                                   |
7847               E_Procedure                                  =>
7848             Write_Str ("Next_Inlined_Subprogram");
7849
7850          when E_Package                                    =>
7851             Write_Str ("Associated_Formal_Package");
7852
7853          when others                                       =>
7854             Write_Str ("Field12??");
7855       end case;
7856    end Write_Field12_Name;
7857
7858    ------------------------
7859    -- Write_Field13_Name --
7860    ------------------------
7861
7862    procedure Write_Field13_Name (Id : Entity_Id) is
7863    begin
7864       case Ekind (Id) is
7865          when Type_Kind                                    =>
7866             Write_Str ("RM_Size");
7867
7868          when E_Component                                  |
7869               E_Discriminant                               =>
7870             Write_Str ("Component_Clause");
7871
7872          when E_Function                                   =>
7873             if not Comes_From_Source (Id)
7874                  and then
7875                Chars (Id) = Name_Op_Ne
7876             then
7877                Write_Str ("Corresponding_Equality");
7878
7879             elsif Comes_From_Source (Id) then
7880                Write_Str ("Elaboration_Entity");
7881
7882             else
7883                Write_Str ("Field13??");
7884             end if;
7885
7886          when Formal_Kind                                  |
7887               E_Variable                                   =>
7888             Write_Str ("Extra_Accessibility");
7889
7890          when E_Procedure                                  |
7891               E_Package                                    |
7892               Generic_Unit_Kind                            =>
7893             Write_Str ("Elaboration_Entity");
7894
7895          when others                                       =>
7896             Write_Str ("Field13??");
7897       end case;
7898    end Write_Field13_Name;
7899
7900    -----------------------
7901    -- Write_Field14_Name --
7902    -----------------------
7903
7904    procedure Write_Field14_Name (Id : Entity_Id) is
7905    begin
7906       case Ekind (Id) is
7907          when Type_Kind                                    |
7908               Formal_Kind                                  |
7909               E_Constant                                   |
7910               E_Exception                                  |
7911               E_Variable                                   |
7912               E_Loop_Parameter                             =>
7913             Write_Str ("Alignment");
7914
7915          when E_Component                                  |
7916               E_Discriminant                               =>
7917             Write_Str ("Normalized_Position");
7918
7919          when E_Function                                   |
7920               E_Procedure                                  =>
7921             Write_Str ("First_Optional_Parameter");
7922
7923          when E_Package                                    |
7924               E_Generic_Package                            =>
7925             Write_Str ("Shadow_Entities");
7926
7927          when others                                       =>
7928             Write_Str ("Field14??");
7929       end case;
7930    end Write_Field14_Name;
7931
7932    ------------------------
7933    -- Write_Field15_Name --
7934    ------------------------
7935
7936    procedure Write_Field15_Name (Id : Entity_Id) is
7937    begin
7938       case Ekind (Id) is
7939          when Access_Kind                                  |
7940               Task_Kind                                    =>
7941             Write_Str ("Storage_Size_Variable");
7942
7943          when E_Component                                  =>
7944             Write_Str ("DT_Entry_Count");
7945
7946          when Decimal_Fixed_Point_Kind                     =>
7947             Write_Str ("Scale_Value");
7948
7949          when E_Discriminant                               =>
7950             Write_Str ("Discriminant_Number");
7951
7952          when Formal_Kind                                  =>
7953             Write_Str ("Extra_Formal");
7954
7955          when E_Function                                   |
7956               E_Procedure                                  =>
7957             Write_Str ("DT_Position");
7958
7959          when Entry_Kind                                   =>
7960             Write_Str ("Entry_Parameters_Type");
7961
7962          when Enumeration_Kind                             =>
7963             Write_Str ("Lit_Indexes");
7964
7965          when E_Package                                    |
7966               E_Package_Body                               =>
7967             Write_Str ("Related_Instance");
7968
7969          when E_Protected_Type                             =>
7970             Write_Str ("Entry_Bodies_Array");
7971
7972          when E_String_Literal_Subtype                     =>
7973             Write_Str ("String_Literal_Low_Bound");
7974
7975          when others                                       =>
7976             Write_Str ("Field15??");
7977       end case;
7978    end Write_Field15_Name;
7979
7980    ------------------------
7981    -- Write_Field16_Name --
7982    ------------------------
7983
7984    procedure Write_Field16_Name (Id : Entity_Id) is
7985    begin
7986       case Ekind (Id) is
7987          when E_Component                                  =>
7988             Write_Str ("Entry_Formal");
7989
7990          when E_Function                                   |
7991               E_Procedure                                  =>
7992             Write_Str ("DTC_Entity");
7993
7994          when E_Package                                    |
7995               E_Generic_Package                            |
7996               Concurrent_Kind                              =>
7997             Write_Str ("First_Private_Entity");
7998
7999          when E_Record_Type                                |
8000               E_Record_Type_With_Private                   =>
8001             Write_Str ("Access_Disp_Table");
8002
8003          when E_String_Literal_Subtype                     =>
8004             Write_Str ("String_Literal_Length");
8005
8006          when Enumeration_Kind                             =>
8007             Write_Str ("Lit_Strings");
8008
8009          when E_Variable                                   |
8010               E_Out_Parameter                              =>
8011             Write_Str ("Unset_Reference");
8012
8013          when E_Record_Subtype                             |
8014               E_Class_Wide_Subtype                         =>
8015             Write_Str ("Cloned_Subtype");
8016
8017          when others                                       =>
8018             Write_Str ("Field16??");
8019       end case;
8020    end Write_Field16_Name;
8021
8022    ------------------------
8023    -- Write_Field17_Name --
8024    ------------------------
8025
8026    procedure Write_Field17_Name (Id : Entity_Id) is
8027    begin
8028       case Ekind (Id) is
8029          when Digits_Kind                                  =>
8030             Write_Str ("Digits_Value");
8031
8032          when E_Component                                  =>
8033             Write_Str ("Prival");
8034
8035          when E_Discriminant                               =>
8036             Write_Str ("Discriminal");
8037
8038          when E_Block                                      |
8039               Class_Wide_Kind                              |
8040               Concurrent_Kind                              |
8041               Private_Kind                                 |
8042               E_Entry                                      |
8043               E_Entry_Family                               |
8044               E_Function                                   |
8045               E_Generic_Function                           |
8046               E_Generic_Package                            |
8047               E_Generic_Procedure                          |
8048               E_Loop                                       |
8049               E_Operator                                   |
8050               E_Package                                    |
8051               E_Package_Body                               |
8052               E_Procedure                                  |
8053               E_Record_Type                                |
8054               E_Record_Subtype                             |
8055               E_Return_Statement                           |
8056               E_Subprogram_Body                            |
8057               E_Subprogram_Type                            =>
8058             Write_Str ("First_Entity");
8059
8060          when Array_Kind                                   =>
8061             Write_Str ("First_Index");
8062
8063          when Enumeration_Kind                             =>
8064             Write_Str ("First_Literal");
8065
8066          when Access_Kind                                  =>
8067             Write_Str ("Master_Id");
8068
8069          when Modular_Integer_Kind                         =>
8070             Write_Str ("Modulus");
8071
8072          when Formal_Kind                                  |
8073               E_Constant                                   |
8074               E_Generic_In_Out_Parameter                   |
8075               E_Variable                                   =>
8076             Write_Str ("Actual_Subtype");
8077
8078          when E_Incomplete_Type                            =>
8079             Write_Str ("Non_Limited_View");
8080
8081          when E_Incomplete_Subtype                         =>
8082             if From_With_Type (Id) then
8083                Write_Str ("Non_Limited_View");
8084             end if;
8085
8086          when others                                       =>
8087             Write_Str ("Field17??");
8088       end case;
8089    end Write_Field17_Name;
8090
8091    ------------------------
8092    -- Write_Field18_Name --
8093    ------------------------
8094
8095    procedure Write_Field18_Name (Id : Entity_Id) is
8096    begin
8097       case Ekind (Id) is
8098          when E_Enumeration_Literal                        |
8099               E_Function                                   |
8100               E_Operator                                   |
8101               E_Procedure                                  =>
8102             Write_Str ("Alias");
8103
8104          when E_Record_Type                                =>
8105             Write_Str ("Corresponding_Concurrent_Type");
8106
8107          when E_Subprogram_Body                            =>
8108             Write_Str ("Corresponding_Protected_Entry");
8109
8110          when E_Entry_Index_Parameter                      =>
8111             Write_Str ("Entry_Index_Constant");
8112
8113          when E_Class_Wide_Subtype                         |
8114               E_Access_Protected_Subprogram_Type           |
8115               E_Anonymous_Access_Protected_Subprogram_Type |
8116               E_Access_Subprogram_Type                     |
8117               E_Exception_Type                             =>
8118             Write_Str ("Equivalent_Type");
8119
8120          when Fixed_Point_Kind                             =>
8121             Write_Str ("Delta_Value");
8122
8123          when Object_Kind                                  =>
8124             Write_Str ("Renamed_Object");
8125
8126          when E_Exception                                  |
8127               E_Package                                    |
8128               E_Generic_Function                           |
8129               E_Generic_Procedure                          |
8130               E_Generic_Package                            =>
8131             Write_Str ("Renamed_Entity");
8132
8133          when Incomplete_Or_Private_Kind                   |
8134               E_Record_Subtype                             =>
8135             Write_Str ("Private_Dependents");
8136
8137          when Concurrent_Kind                              =>
8138             Write_Str ("Corresponding_Record_Type");
8139
8140          when E_Label                                      |
8141               E_Loop                                       |
8142               E_Block                                      =>
8143             Write_Str ("Enclosing_Scope");
8144
8145          when others                                       =>
8146             Write_Str ("Field18??");
8147       end case;
8148    end Write_Field18_Name;
8149
8150    -----------------------
8151    -- Write_Field19_Name --
8152    -----------------------
8153
8154    procedure Write_Field19_Name (Id : Entity_Id) is
8155    begin
8156       case Ekind (Id) is
8157          when E_Array_Type                                 |
8158               E_Array_Subtype                              =>
8159             Write_Str ("Related_Array_Object");
8160
8161          when E_Block                                      |
8162               Concurrent_Kind                              |
8163               E_Function                                   |
8164               E_Procedure                                  |
8165               E_Return_Statement                           |
8166               Entry_Kind                                   =>
8167             Write_Str ("Finalization_Chain_Entity");
8168
8169          when E_Constant | E_Variable                      =>
8170             Write_Str ("Size_Check_Code");
8171
8172          when E_Discriminant                               =>
8173             Write_Str ("Corresponding_Discriminant");
8174
8175          when E_Package                                    |
8176               E_Generic_Package                            =>
8177             Write_Str ("Body_Entity");
8178
8179          when E_Package_Body                               |
8180               Formal_Kind                                  =>
8181             Write_Str ("Spec_Entity");
8182
8183          when Private_Kind                                 =>
8184             Write_Str ("Underlying_Full_View");
8185
8186          when E_Record_Type                                =>
8187             Write_Str ("Parent_Subtype");
8188
8189          when others                                       =>
8190             Write_Str ("Field19??");
8191       end case;
8192    end Write_Field19_Name;
8193
8194    -----------------------
8195    -- Write_Field20_Name --
8196    -----------------------
8197
8198    procedure Write_Field20_Name (Id : Entity_Id) is
8199    begin
8200       case Ekind (Id) is
8201          when Array_Kind                                   =>
8202             Write_Str ("Component_Type");
8203
8204          when E_In_Parameter                               |
8205               E_Generic_In_Parameter                       =>
8206             Write_Str ("Default_Value");
8207
8208          when Access_Kind                                  =>
8209             Write_Str ("Directly_Designated_Type");
8210
8211          when E_Component                                  =>
8212             Write_Str ("Discriminant_Checking_Func");
8213
8214          when E_Constant                                   |
8215               E_Variable                                   =>
8216             Write_Str ("Prival_Link");
8217
8218          when E_Discriminant                               =>
8219             Write_Str ("Discriminant_Default_Value");
8220
8221          when E_Block                                      |
8222               Class_Wide_Kind                              |
8223               Concurrent_Kind                              |
8224               Private_Kind                                 |
8225               E_Entry                                      |
8226               E_Entry_Family                               |
8227               E_Function                                   |
8228               E_Generic_Function                           |
8229               E_Generic_Package                            |
8230               E_Generic_Procedure                          |
8231               E_Loop                                       |
8232               E_Operator                                   |
8233               E_Package                                    |
8234               E_Package_Body                               |
8235               E_Procedure                                  |
8236               E_Record_Type                                |
8237               E_Record_Subtype                             |
8238               E_Return_Statement                           |
8239               E_Subprogram_Body                            |
8240               E_Subprogram_Type                            =>
8241             Write_Str ("Last_Entity");
8242
8243          when Scalar_Kind                                  =>
8244             Write_Str ("Scalar_Range");
8245
8246          when E_Exception                                  =>
8247             Write_Str ("Register_Exception_Call");
8248
8249          when others                                       =>
8250             Write_Str ("Field20??");
8251       end case;
8252    end Write_Field20_Name;
8253
8254    -----------------------
8255    -- Write_Field21_Name --
8256    -----------------------
8257
8258    procedure Write_Field21_Name (Id : Entity_Id) is
8259    begin
8260       case Ekind (Id) is
8261          when E_Constant                                   |
8262               E_Exception                                  |
8263               E_Function                                   |
8264               E_Generic_Function                           |
8265               E_Procedure                                  |
8266               E_Generic_Procedure                          |
8267               E_Variable                                   =>
8268             Write_Str ("Interface_Name");
8269
8270          when Concurrent_Kind                              |
8271               Incomplete_Or_Private_Kind                   |
8272               Class_Wide_Kind                              |
8273               E_Record_Type                                |
8274               E_Record_Subtype                             =>
8275             Write_Str ("Discriminant_Constraint");
8276
8277          when Entry_Kind                                   =>
8278             Write_Str ("Accept_Address");
8279
8280          when Fixed_Point_Kind                             =>
8281             Write_Str ("Small_Value");
8282
8283          when E_In_Parameter                               =>
8284             Write_Str ("Default_Expr_Function");
8285
8286          when Array_Kind                                   |
8287               Modular_Integer_Kind                         =>
8288             Write_Str ("Original_Array_Type");
8289
8290          when others                                       =>
8291             Write_Str ("Field21??");
8292       end case;
8293    end Write_Field21_Name;
8294
8295    -----------------------
8296    -- Write_Field22_Name --
8297    -----------------------
8298
8299    procedure Write_Field22_Name (Id : Entity_Id) is
8300    begin
8301       case Ekind (Id) is
8302          when Access_Kind                                  =>
8303             Write_Str ("Associated_Storage_Pool");
8304
8305          when Array_Kind                                   =>
8306             Write_Str ("Component_Size");
8307
8308          when E_Component                                  |
8309               E_Discriminant                               =>
8310             Write_Str ("Original_Record_Component");
8311
8312          when E_Enumeration_Literal                        =>
8313             Write_Str ("Enumeration_Rep_Expr");
8314
8315          when E_Exception                                  =>
8316             Write_Str ("Exception_Code");
8317
8318          when Formal_Kind                                  =>
8319             Write_Str ("Protected_Formal");
8320
8321          when E_Record_Type                                =>
8322             Write_Str ("Corresponding_Remote_Type");
8323
8324          when E_Block                                      |
8325               E_Entry                                      |
8326               E_Entry_Family                               |
8327               E_Function                                   |
8328               E_Loop                                       |
8329               E_Package                                    |
8330               E_Package_Body                               |
8331               E_Generic_Package                            |
8332               E_Generic_Function                           |
8333               E_Generic_Procedure                          |
8334               E_Procedure                                  |
8335               E_Protected_Type                             |
8336               E_Return_Statement                           |
8337               E_Subprogram_Body                            |
8338               E_Task_Type                                  =>
8339             Write_Str ("Scope_Depth_Value");
8340
8341          when E_Record_Type_With_Private                   |
8342               E_Record_Subtype_With_Private                |
8343               E_Private_Type                               |
8344               E_Private_Subtype                            |
8345               E_Limited_Private_Type                       |
8346               E_Limited_Private_Subtype                    =>
8347             Write_Str ("Private_View");
8348
8349          when E_Variable                                   =>
8350             Write_Str ("Shared_Var_Procs_Instance");
8351
8352          when others                                       =>
8353             Write_Str ("Field22??");
8354       end case;
8355    end Write_Field22_Name;
8356
8357    ------------------------
8358    -- Write_Field23_Name --
8359    ------------------------
8360
8361    procedure Write_Field23_Name (Id : Entity_Id) is
8362    begin
8363       case Ekind (Id) is
8364          when Access_Kind                                  =>
8365             Write_Str ("Associated_Final_Chain");
8366
8367          when Array_Kind                                   =>
8368             Write_Str ("Packed_Array_Type");
8369
8370          when E_Block                                      =>
8371             Write_Str ("Entry_Cancel_Parameter");
8372
8373          when E_Discriminant                               =>
8374             Write_Str ("CR_Discriminant");
8375
8376          when E_Enumeration_Type                           =>
8377             Write_Str ("Enum_Pos_To_Rep");
8378
8379          when Formal_Kind                                  |
8380               E_Variable                                   =>
8381             Write_Str ("Extra_Constrained");
8382
8383          when E_Generic_Function                           |
8384               E_Generic_Package                            |
8385               E_Generic_Procedure                          =>
8386             Write_Str ("Inner_Instances");
8387
8388          when Concurrent_Kind                              |
8389               Incomplete_Or_Private_Kind                   |
8390               Class_Wide_Kind                              |
8391               E_Record_Type                                |
8392               E_Record_Subtype                             =>
8393             Write_Str ("Stored_Constraint");
8394
8395          when E_Function                                   |
8396               E_Procedure                                  =>
8397             if Present (Scope (Id))
8398               and then Is_Protected_Type (Scope (Id))
8399             then
8400                Write_Str ("Protection_Object");
8401             else
8402                Write_Str ("Generic_Renamings");
8403             end if;
8404
8405          when E_Package                                    =>
8406             if Is_Generic_Instance (Id) then
8407                Write_Str ("Generic_Renamings");
8408             else
8409                Write_Str ("Limited_View");
8410             end if;
8411
8412          when Entry_Kind                                   =>
8413             Write_Str ("Protection_Object");
8414
8415          when others                                       =>
8416             Write_Str ("Field23??");
8417       end case;
8418    end Write_Field23_Name;
8419
8420    ------------------------
8421    -- Write_Field24_Name --
8422    ------------------------
8423
8424    procedure Write_Field24_Name (Id : Entity_Id) is
8425    begin
8426       case Ekind (Id) is
8427          when Subprogram_Kind                              =>
8428             Write_Str ("Spec_PPC_List");
8429
8430          when E_Variable | E_Constant | Type_Kind          =>
8431             Write_Str ("Related_Expression");
8432
8433          when others                                       =>
8434             Write_Str ("Field24???");
8435       end case;
8436    end Write_Field24_Name;
8437
8438    ------------------------
8439    -- Write_Field25_Name --
8440    ------------------------
8441
8442    procedure Write_Field25_Name (Id : Entity_Id) is
8443    begin
8444       case Ekind (Id) is
8445          when E_Component                                  =>
8446             Write_Str ("DT_Offset_To_Top_Func");
8447
8448          when E_Procedure                                  |
8449               E_Function                                   =>
8450             Write_Str ("Interface_Alias");
8451
8452          when E_Record_Type                                |
8453               E_Record_Subtype                             |
8454               E_Record_Type_With_Private                   |
8455               E_Record_Subtype_With_Private                =>
8456             Write_Str ("Interfaces");
8457
8458          when Task_Kind                                    =>
8459             Write_Str ("Task_Body_Procedure");
8460
8461          when E_Variable                                   =>
8462             Write_Str ("Debug_Renaming_Link");
8463
8464          when E_Entry                                      |
8465               E_Entry_Family                               =>
8466             Write_Str ("PPC_Wrapper");
8467
8468          when E_Enumeration_Subtype                        |
8469               E_Modular_Integer_Subtype                    |
8470               E_Signed_Integer_Subtype                     =>
8471             Write_Str ("Static_Predicate");
8472
8473          when others                                       =>
8474             Write_Str ("Field25??");
8475       end case;
8476    end Write_Field25_Name;
8477
8478    ------------------------
8479    -- Write_Field26_Name --
8480    ------------------------
8481
8482    procedure Write_Field26_Name (Id : Entity_Id) is
8483    begin
8484       case Ekind (Id) is
8485          when E_Generic_Package                            |
8486               E_Package                                    =>
8487             Write_Str ("Package_Instantiation");
8488
8489          when E_Procedure                                  |
8490               E_Function                                   =>
8491             if Is_Dispatching_Operation (Id) then
8492                Write_Str ("Overridden_Operation");
8493             else
8494                Write_Str ("Static_Initialization");
8495             end if;
8496
8497          when E_Record_Type                                |
8498               E_Record_Type_With_Private                   =>
8499             Write_Str ("Dispatch_Table_Wrappers");
8500
8501          when E_In_Out_Parameter                           |
8502               E_Out_Parameter                              |
8503               E_Variable                                   =>
8504             Write_Str ("Last_Assignment");
8505
8506          when Task_Kind                                    =>
8507             Write_Str ("Relative_Deadline_Variable");
8508
8509          when others                                       =>
8510             Write_Str ("Field26??");
8511       end case;
8512    end Write_Field26_Name;
8513
8514    ------------------------
8515    -- Write_Field27_Name --
8516    ------------------------
8517
8518    procedure Write_Field27_Name (Id : Entity_Id) is
8519    begin
8520       case Ekind (Id) is
8521          when E_Component                                  |
8522               E_Constant                                   |
8523               E_Variable                                   =>
8524             Write_Str ("Related_Type");
8525
8526          when E_Procedure                                  =>
8527             Write_Str ("Wrapped_Entity");
8528
8529          when E_Package | Type_Kind                        =>
8530             Write_Str ("Current_Use_Clause");
8531
8532          when others                                       =>
8533             Write_Str ("Field27??");
8534       end case;
8535    end Write_Field27_Name;
8536
8537    ------------------------
8538    -- Write_Field28_Name --
8539    ------------------------
8540
8541    procedure Write_Field28_Name (Id : Entity_Id) is
8542    begin
8543       case Ekind (Id) is
8544          when E_Procedure | E_Function | E_Entry           =>
8545             Write_Str ("Extra_Formals");
8546
8547          when E_Record_Type =>
8548             Write_Str ("Underlying_Record_View");
8549
8550          when others                                       =>
8551             Write_Str ("Field28??");
8552       end case;
8553    end Write_Field28_Name;
8554
8555    procedure Write_Field29_Name (Id : Entity_Id) is
8556    begin
8557       case Ekind (Id) is
8558          when Type_Kind =>
8559             Write_Str ("Subprograms_For_Type");
8560
8561          when others                                       =>
8562             Write_Str ("Field29??");
8563       end case;
8564    end Write_Field29_Name;
8565
8566    -------------------------
8567    -- Iterator Procedures --
8568    -------------------------
8569
8570    procedure Proc_Next_Component                 (N : in out Node_Id) is
8571    begin
8572       N := Next_Component (N);
8573    end Proc_Next_Component;
8574
8575    procedure Proc_Next_Component_Or_Discriminant (N : in out Node_Id) is
8576    begin
8577       N := Next_Entity (N);
8578       while Present (N) loop
8579          exit when Ekind_In (N, E_Component, E_Discriminant);
8580          N := Next_Entity (N);
8581       end loop;
8582    end Proc_Next_Component_Or_Discriminant;
8583
8584    procedure Proc_Next_Discriminant              (N : in out Node_Id) is
8585    begin
8586       N := Next_Discriminant (N);
8587    end Proc_Next_Discriminant;
8588
8589    procedure Proc_Next_Formal                    (N : in out Node_Id) is
8590    begin
8591       N := Next_Formal (N);
8592    end Proc_Next_Formal;
8593
8594    procedure Proc_Next_Formal_With_Extras        (N : in out Node_Id) is
8595    begin
8596       N := Next_Formal_With_Extras (N);
8597    end Proc_Next_Formal_With_Extras;
8598
8599    procedure Proc_Next_Index                     (N : in out Node_Id) is
8600    begin
8601       N := Next_Index (N);
8602    end Proc_Next_Index;
8603
8604    procedure Proc_Next_Inlined_Subprogram        (N : in out Node_Id) is
8605    begin
8606       N := Next_Inlined_Subprogram (N);
8607    end Proc_Next_Inlined_Subprogram;
8608
8609    procedure Proc_Next_Literal                   (N : in out Node_Id) is
8610    begin
8611       N := Next_Literal (N);
8612    end Proc_Next_Literal;
8613
8614    procedure Proc_Next_Stored_Discriminant       (N : in out Node_Id) is
8615    begin
8616       N := Next_Stored_Discriminant (N);
8617    end Proc_Next_Stored_Discriminant;
8618
8619 end Einfo;