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