OSDN Git Service

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