OSDN Git Service

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