------------------------------------------------------------------------------
--                                                                          --
--                         GNAT COMPILER COMPONENTS                         --
--                                                                          --
--                                E I N F O                                 --
--                                                                          --
--                                 S p e c                                  --
--                                                                          --
--          Copyright (C) 1992-2019, Free Software Foundation, Inc.         --
--                                                                          --
-- GNAT is free software;  you can  redistribute it  and/or modify it under --
-- terms of the  GNU General Public License as published  by the Free Soft- --
-- ware  Foundation;  either version 3,  or (at your option) any later ver- --
-- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
-- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
-- or FITNESS FOR A PARTICULAR PURPOSE.                                     --
--                                                                          --
-- As a special exception under Section 7 of GPL version 3, you are granted --
-- additional permissions described in the GCC Runtime Library Exception,   --
-- version 3.1, as published by the Free Software Foundation.               --
--                                                                          --
-- You should have received a copy of the GNU General Public License and    --
-- a copy of the GCC Runtime Library Exception along with this program;     --
-- see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see    --
-- <http://www.gnu.org/licenses/>.                                          --
--                                                                          --
-- GNAT was originally developed  by the GNAT team at  New York University. --
-- Extensive contributions were provided by Ada Core Technologies Inc.      --
--                                                                          --
------------------------------------------------------------------------------

with Snames; use Snames;
with Types;  use Types;
with Uintp;  use Uintp;
with Urealp; use Urealp;

package Einfo is

--  This package defines the annotations to the abstract syntax tree that
--  are needed to support semantic processing of an Ada compilation.

--  Note that after editing this spec and the corresponding body it is
--  required to run ceinfo to check the consistentcy of spec and body.
--  See ceinfo.adb for more information about the checks made.

--  These annotations are for the most part attributes of declared entities,
--  and they correspond to conventional symbol table information. Other
--  attributes include sets of meanings for overloaded names, possible
--  types for overloaded expressions, flags to indicate deferred constants,
--  incomplete types, etc. These attributes are stored in available fields in
--  tree nodes (i.e. fields not used by the parser, as defined by the Sinfo
--  package specification), and accessed by means of a set of subprograms
--  which define an abstract interface.

--  There are two kinds of semantic information

--    First, the tree nodes with the following Nkind values:

--      N_Defining_Identifier
--      N_Defining_Character_Literal
--      N_Defining_Operator_Symbol

--    are called Entities, and constitute the information that would often
--    be stored separately in a symbol table. These nodes are all extended
--    to provide extra space, and contain fields which depend on the entity
--    kind, as defined by the contents of the Ekind field. The use of the
--    Ekind field, and the associated fields in the entity, are defined
--    in this package, as are the access functions to these fields.

--    Second, in some cases semantic information is stored directly in other
--    kinds of nodes, e.g. the Etype field, used to indicate the type of an
--    expression. The access functions to these fields are defined in the
--    Sinfo package, but their full documentation is to be found in
--    the Einfo package specification.

--  Declaration processing places information in the nodes of their defining
--  identifiers. Name resolution places in all other occurrences of an
--  identifier a pointer to the corresponding defining occurrence.

--------------------------------
-- The XEINFO Utility Program --
--------------------------------

--  XEINFO is a utility program which automatically produces a C header file,
--  einfo.h from the spec and body of package Einfo. It reads the input files
--  einfo.ads and einfo.adb and produces the output file einfo.h. XEINFO is run
--  automatically by the build scripts when you do a full bootstrap.

--  In order for this utility program to operate correctly, the form of the
--  einfo.ads and einfo.adb files must meet certain requirements and be laid
--  out in a specific manner.

--  The general form of einfo.ads is as follows:

--     type declaration for type Entity_Kind
--     subtype declarations declaring subranges of Entity_Kind
--     subtype declarations declaring synonyms for some standard types
--     function specs for attributes
--     procedure specs
--     pragma Inline declarations

--  This order must be observed. There are no restrictions on the procedures,
--  since the C header file only includes functions (The back end is not
--  allowed to modify the generated tree). However, functions are required to
--  have headers that fit on a single line.

--  XEINFO reads and processes the function specs and the pragma Inlines. For
--  functions that are declared as inlined, XEINFO reads the corresponding body
--  from einfo.adb, and processes it into C code. This results in some strict
--  restrictions on which functions can be inlined:

--     The function spec must be on a single line

--     There can only be a single statement, contained on a single line,
--     not counting any pragma Assert statements.

--     This single statement must either be a function call with simple,
--     single token arguments, or it must be a membership test of the form
--     a in b, where a and b are single tokens.

--  For functions that are not inlined, there is no restriction on the body,
--  and XEINFO generates a direct reference in the C header file which allows
--  the C code in the backend to directly call the corresponding Ada body.

----------------------------------
-- Handling of Type'Size Values --
----------------------------------

--  The Ada 95 RM contains some rather peculiar (to us) rules on the value
--  of type'Size (see RM 13.3(55)). We have found that attempting to use
--  these RM Size values generally, and in particular for determining the
--  default size of objects, creates chaos, and major incompatibilities in
--  existing code.

--  The Ada 2020 RM acknowledges it and adopts GNAT's Object_Size attribute
--  for determining the default size of objects, but stops short of applying
--  it universally like GNAT. Indeed the notable exceptions are nonaliased
--  stand-alone objects, which are not covered by Object_Size in Ada 2020.

--  We proceed as follows, for discrete and fixed-point subtypes, we have
--  two separate sizes for each subtype:

--    The Object_Size, which is used for determining the default size of
--    objects and components. This size value can be referred to using the
--    Object_Size attribute. The phrase "is used" here means that it is
--    the basis of the determination of the size. The back end is free to
--    pad this up if necessary for efficiency, e.g. an 8-bit stand-alone
--    character might be stored in 32 bits on a machine with no efficient
--    byte access instructions such as the Alpha.

--    The default rules for the value of Object_Size are as follows:

--       The Object_Size for base subtypes reflect the natural hardware
--       size in bits (see Ttypes and Cstand for integer types). For
--       enumeration and fixed-point base subtypes have 8, 16, 32, or 64
--       bits for this size, depending on the range of values to be stored.

--       The Object_Size of a subtype is the same as the Object_Size of
--       the subtype from which it is obtained.

--       The Object_Size of a derived base type is copied from the parent
--       base type, and the Object_Size of a derived first subtype is copied
--       from the parent first subtype.

--    The Ada 2020 RM defined attribute Object_Size uses this implementation.

--    The Value_Size, which is the number of bits required to store a value
--    of the type. This size can be referred to using the Value_Size
--    attribute. This value is used for determining how tightly to pack
--    records or arrays with components of this type, and also affects
--    the semantics of unchecked conversion (unchecked conversions where
--    the Value_Size values differ generate a warning, and are potentially
--    target dependent).

--    The default rules for the value of Value_Size are as follows:

--       The Value_Size for a base subtype is the minimum number of bits
--       required to store all values of the type (including the sign bit
--       only if negative values are possible).

--       If a subtype statically matches the first subtype, then it has
--       by default the same Value_Size as the first subtype. This is a
--       consequence of RM 13.1(14) ("if two subtypes statically match,
--       then their subtype-specific aspects are the same".)

--       All other subtypes have a Value_Size corresponding to the minimum
--       number of bits required to store all values of the subtype. For
--       dynamic bounds, it is assumed that the value can range down or up
--       to the corresponding bound of the ancestor.

--    The Ada 95 RM defined attribute Size is identified with Value_Size.

--    The Size attribute may be defined for a first-named subtype. This sets
--    the Value_Size of the first-named subtype to the given value, and the
--    Object_Size of this first-named subtype to the given value padded up
--    to an appropriate boundary. It is a consequence of the default rules
--    above that this Object_Size will apply to all further subtypes. On the
--    other hand, Value_Size is affected only for the first subtype, any
--    dynamic subtypes obtained from it directly, and any statically matching
--    subtypes. The Value_Size of any other static subtypes is not affected.

--    Value_Size and Object_Size may be explicitly set for any subtype using
--    an attribute definition clause. Note that the use of such a clause can
--    cause the RM 13.1(14) rule to be violated, in Ada 95 and 2020 for the
--    Value_Size attribute, but only in Ada 95 for the Object_Size attribute.
--    If access types reference aliased objects whose subtypes have differing
--    Object_Size values as a result of explicit attribute definition clauses,
--    then it is erroneous to convert from one access subtype to the other.

--    At the implementation level, the Esize field stores the Object_Size
--    and the RM_Size field stores the Value_Size (hence the value of the
--    Size attribute, which, as noted above, is equivalent to Value_Size).

--  To get a feel for the difference, consider the following examples (note
--  that in each case the base is short_short_integer with a size of 8):

--                                            Object_Size     Value_Size

--     type x1 is range 0..5;                      8               3

--     type x2 is range 0..5;
--     for x2'size use 12;                        16              12

--     subtype x3 is x2 range 0 .. 3;             16               2

--     subtype x4 is x2'base range 0 .. 10;        8               4

--     dynamic : x2'Base range -64 .. +63;

--     subtype x5 is x2 range 0 .. dynamic;       16               3*

--     subtype x6 is x2'base range 0 .. dynamic;   8               7*

--  Note: the entries marked * are not actually specified by the Ada 95 RM,
--  but it seems in the spirit of the RM rules to allocate the minimum number
--  of bits known to be large enough to hold the given range of values.

--  So far, so good, but GNAT has to obey the RM rules, so the question is
--  under what conditions must the RM Size be used. The following is a list
--  of the occasions on which the RM Size must be used:

--    Component size for packed arrays or records
--    Value of the attribute Size for a type
--    Warning about sizes not matching for unchecked conversion

--  The RM_Size field keeps track of the RM Size as needed in these
--  three situations.

--  For elementary types other than discrete and fixed-point types, the
--  Object_Size and Value_Size are the same (and equivalent to the RM
--  attribute Size). Only Size may be specified for such types.

--  For composite types, Object_Size and Value_Size are computed from their
--  respective value for the type of each element as well as the layout.

--  All size attributes are stored as Uint values. Negative values are used to
--  reference GCC expressions for the case of non-static sizes, as explained
--  in Repinfo.

--------------------------------------
-- Delayed Freezing and Elaboration --
--------------------------------------

--  The flag Has_Delayed_Freeze indicates that an entity carries an explicit
--  freeze node, which appears later in the expanded tree.

--  a) The flag is used by the front-end to trigger expansion actions which
--  include the generation of that freeze node. Typically this happens at the
--  end of the current compilation unit, or before the first subprogram body is
--  encountered in the current unit. See files freeze and exp_ch13 for details
--  on the actions triggered by a freeze node, which include the construction
--  of initialization procedures and dispatch tables.

--  b) The presence of a freeze node on an entity is used by the backend to
--  defer elaboration of the entity until its freeze node is seen. In the
--  absence of an explicit freeze node, an entity is frozen (and elaborated)
--  at the point of declaration.

--  For object declarations, the flag is set when an address clause for the
--  object is encountered. Legality checks on the address expression only take
--  place at the freeze point of the object.

--  Most types have an explicit freeze node, because they cannot be elaborated
--  until all representation and operational items that apply to them have been
--  analyzed. Private types and incomplete types have the flag set as well, as
--  do task and protected types.

--  Implicit base types created for type derivations, as well as classwide
--  types created for all tagged types, have the flag set.

--  If a subprogram has an access parameter whose designated type is incomplete
--  the subprogram has the flag set.

-----------------------
-- Entity Attributes --
-----------------------

--  This section contains a complete list of the attributes that are defined
--  on entities. Some attributes apply to all entities, others only to certain
--  kinds of entities. In the latter case the attribute should only be set or
--  accessed if the Ekind field indicates an appropriate entity.

--  There are two kinds of attributes that apply to entities, stored and
--  synthesized. Stored attributes correspond to a field or flag in the entity
--  itself. Such attributes are identified in the table below by giving the
--  field or flag in the attribute that is used to hold the attribute value.
--  Synthesized attributes are not stored directly, but are rather computed as
--  needed from other attributes, or from information in the tree. These are
--  marked "synthesized" in the table below. The stored attributes have both
--  access functions and set procedures to set the corresponding values, while
--  synthesized attributes have only access functions.

--  Note: in the case of Node, Uint, or Elist fields, there are cases where the
--  same physical field is used for different purposes in different entities,
--  so these access functions should only be referenced for the class of
--  entities in which they are defined as being present. Flags are not
--  overlapped in this way, but nevertheless as a matter of style and
--  abstraction (which may or may not be checked by assertions in the
--  body), this restriction should be observed for flag fields as well.

--  Note: certain of the attributes on types apply only to base types, and
--  are so noted by the notation [base type only]. These are cases where the
--  attribute of any subtype is the same as the attribute of the base type.
--  The attribute can be referenced on a subtype (and automatically retrieves
--  the value from the base type). However, it is an error to try to set the
--  attribute on other than the base type, and if assertions are enabled,
--  an attempt to set the attribute on a subtype will raise an assert error.

--  Other attributes are noted as applying to the [implementation base type
--  only]. These are representation attributes which must always apply to a
--  full non-private type, and where the attributes are always on the full
--  type. The attribute can be referenced on a subtype (and automatically
--  retrieves the value from the implementation base type). However, it is an
--  error to try to set the attribute on other than the implementation base
--  type, and if assertions are enabled, an attempt to set the attribute on a
--  subtype will raise an assert error.

--    Abstract_States (Elist25)
--       Defined for E_Package entities. Contains a list of all the abstract
--       states declared by the related package.

--    Accept_Address (Elist21)
--       Defined in entries. If an accept has a statement sequence, then an
--       address variable is created, which is used to hold the address of the
--       parameters, as passed by the runtime. Accept_Address holds an element
--       list which represents a stack of entities for these address variables.
--       The current entry is the top of the stack, which is the last element
--       on the list. A stack is required to handle the case of nested select
--       statements referencing the same entry.

--    Access_Disp_Table (Elist16) [implementation base type only]
--       Defined in E_Record_Type and E_Record_Subtype entities. Set in tagged
--       types to point to their dispatch tables. The first two entities are
--       associated with the primary dispatch table: 1) primary dispatch table
--       with user-defined primitives 2) primary dispatch table with predefined
--       primitives. For each interface type covered by the tagged type we also
--       have: 3) secondary dispatch table with thunks of primitives covering
--       user-defined interface primitives, 4) secondary dispatch table with
--       thunks of predefined primitives, 5) secondary dispatch table with user
--       defined primitives, and 6) secondary dispatch table with predefined
--       primitives. The last entity of this list is an access type declaration
--       used to expand dispatching calls through the primary dispatch table.
--       For an untagged record, contains No_Elist.

--    Access_Disp_Table_Elab_Flag (Node30) [implementation base type only]
--       Defined in E_Record_Type and E_Record_Subtype entities. Set in tagged
--       types whose dispatch table elaboration must be completed at run time
--       by the IP routine to point to its pending elaboration flag entity.
--       This flag is needed when the elaboration of the dispatch table relies
--       on attribute 'Position applied to an object of the type; it is used by
--       the IP routine to avoid performing this elaboration twice.

--    Activation_Record_Component (Node31)
--       Defined for E_Variable, E_Constant, E_Loop_Parameter, and formal
--       parameter entities. Used in Opt.Unnest_Subprogram_Mode, in which case
--       a reference to an uplevel entity produces a corresponding component
--       in the generated ARECnT activation record (Exp_Unst for details).

--    Actual_Subtype (Node17)
--       Defined in variables, constants, and formal parameters. This is the
--       subtype imposed by the value of the object, as opposed to its nominal
--       subtype, which is imposed by the declaration. The actual subtype
--       differs from the nominal one when the latter is indefinite (as in the
--       case of an unconstrained formal parameter, or a variable declared
--       with an unconstrained type and an initial value). The nominal subtype
--       is the Etype entry for the entity. The Actual_Subtype field is set
--       only if the actual subtype differs from the nominal subtype. If the
--       actual and nominal subtypes are the same, then the Actual_Subtype
--       field is Empty, and Etype indicates both types.
--
--       For objects, the Actual_Subtype is set only if this is a discriminated
--       type. For arrays, the bounds of the expression are obtained and the
--       Etype of the object is directly the constrained subtype. This is
--       rather irregular, and the semantic checks that depend on the nominal
--       subtype being unconstrained use flag Is_Constr_Subt_For_U_Nominal(qv).

--    Address_Clause (synthesized)
--       Applies to entries, objects and subprograms. Set if an address clause
--       is present which references the object or subprogram and points to
--       the N_Attribute_Definition_Clause node. Empty if no Address clause.
--       The expression in the address clause is always a constant that is
--       defined before the entity to which the address clause applies.
--       Note: The backend references this field in E_Task_Type entities???

--    Address_Taken (Flag104)
--       Defined in all entities. Set if the Address or Unrestricted_Access
--       attribute is applied directly to the entity, i.e. the entity is the
--       entity of the prefix of the attribute reference. Also set if the
--       entity is the second argument of an Asm_Input or Asm_Output attribute,
--       as the construct may entail taking its address. And also set if the
--       entity is a subprogram and the Access or Unchecked_Access attribute is
--       applied. Used by the backend to make sure that the address can be
--       meaningfully taken, and also in the case of subprograms to control
--       output of certain warnings.

--    Aft_Value (synthesized)
--       Applies to fixed and decimal types. Computes a universal integer that
--       holds value of the Aft attribute for the type.

--    Alias (Node18)
--       Defined in overloadable entities (literals, subprograms, entries) and
--       subprograms that cover a primitive operation of an abstract interface
--       (that is, subprograms with the Interface_Alias attribute). In case of
--       overloaded entities it points to the parent subprogram of a derived
--       subprogram. In case of abstract interface subprograms it points to the
--       subprogram that covers the abstract interface primitive. Also used for
--       a subprogram renaming, where it points to the renamed subprogram. For
--       an inherited operation (of a type extension) that is overridden in a
--       private part, the Alias is the overriding operation. In this fashion a
--       call from outside the package ends up executing the new body even if
--       non-dispatching, and a call from inside calls the overriding operation
--       because it hides the implicit one. Alias is always empty for entries.

--    Alignment (Uint14)
--       Defined in entities for types and also in constants, variables
--       (including exceptions where it refers to the static data allocated for
--       an exception), loop parameters, and formal parameters. This indicates
--       the desired alignment for a type, or the actual alignment for an
--       object. A value of zero (Uint_0) indicates that the alignment has not
--       been set yet. The alignment can be set by an explicit alignment
--       clause, or set by the front-end in package Layout, or set by the
--       back-end as part of the back-end back-annotation process. The
--       alignment field is also defined in E_Exception entities, but there it
--       is used only by the back-end for back annotation.

--    Alignment_Clause (synthesized)
--       Applies to all entities for types and objects. If an alignment
--       attribute definition clause is present for the entity, then this
--       function returns the N_Attribute_Definition clause that specifies the
--       alignment. If no alignment clause applies to the type, then the call
--       to this function returns Empty. Note that the call can return a
--       non-Empty value even if Has_Alignment_Clause is not set (happens with
--       subtype and derived type declarations). Note also that a record
--       definition clause with an (obsolescent) mod clause is converted
--       into an attribute definition clause for this purpose.

--    Anonymous_Designated_Type (Node35)
--       Defined in variables which represent anonymous finalization masters.
--       Contains the designated type which is being serviced by the master.

--    Anonymous_Masters (Elist29)
--       Defined in packages, subprograms, and subprogram bodies. Contains a
--       list of anonymous finalization masters declared within the related
--       unit. The list acts as a mapping between a master and a designated
--       type.

--    Anonymous_Object (Node30)
--       Present in protected and task type entities. Contains the entity of
--       the anonymous object created for a single protected or task type.

--    Associated_Entity (Node37)
--       Defined in all entities. This field is similar to Associated_Node, but
--       applied to entities. The attribute links an entity from the generic
--       template with its corresponding entity in the analyzed generic copy.
--       The global references mechanism relies on the Associated_Entity to
--       infer the context.

--    Associated_Formal_Package (Node12)
--       Defined in packages that are the actuals of formal_packages. Points
--       to the entity in the declaration for the formal package.

--    Associated_Node_For_Itype (Node8)
--       Defined in all type and subtype entities. Set non-Empty only for
--       Itypes. Set to point to the associated node for the Itype, i.e.
--       the node whose elaboration generated the Itype. This is used for
--       copying trees, to determine whether or not to copy an Itype, and
--       also for accessibility checks on anonymous access types. This
--       node is typically an object declaration, component declaration,
--       type or subtype declaration.

--       For an access discriminant in a type declaration, the associated_
--       node_for_itype is the corresponding discriminant specification.

--       For an access parameter it is the enclosing subprogram declaration.

--       For an access_to_protected_subprogram parameter it is the declaration
--       of the corresponding formal parameter.
--
--       Itypes have no explicit declaration, and therefore are not attached to
--       the tree: their Parent field is always empty. The Associated_Node_For_
--       Itype is the only way to determine the construct that leads to the
--       creation of a given itype entity.

--    Associated_Storage_Pool (Node22) [root type only]
--       Defined in simple and general access type entities. References the
--       storage pool to be used for the corresponding collection. A value of
--       Empty means that the default pool is to be used. This is defined
--       only in the root type, since derived types must have the same pool
--       as the parent type.

--    Barrier_Function (Node12)
--       Defined in protected entries and entry families. This is the
--       subprogram declaration for the body of the function that returns
--       the value of the entry barrier.

--    Base_Type (synthesized)
--       Applies to all type and subtype entities. Returns the base type of a
--       type or subtype. The base type of a type is the type itself. The base
--       type of a subtype is the type that it constrains (which is always
--       a type entity, not some other subtype). Note that in the case of a
--       subtype of a private type, it is possible for the base type attribute
--       to return a private type, even if the subtype to which it applies is
--       non-private. See also Implementation_Base_Type. Note: it is allowed to
--       apply Base_Type to other than a type, in which case it simply returns
--       the entity unchanged.

--    Block_Node (Node11)
--       Defined in block entities. Points to the identifier in the
--       Block_Statement itself. Used when retrieving the block construct
--       for finalization purposes, The block entity has an implicit label
--       declaration in the enclosing declarative part, and has otherwise
--       no direct connection in the tree with the block statement. The
--       link is to the identifier (which is an occurrence of the entity)
--       and not to the block_statement itself, because the statement may
--       be rewritten, e.g. in the process of removing dead code.

--    Body_Entity (Node19)
--       Defined in package and generic package entities, points to the
--       corresponding package body entity if one is present.

--    Body_Needed_For_SAL (Flag40)
--       Defined in package and subprogram entities that are compilation
--       units. Indicates that the source for the body must be included
--       when the unit is part of a standalone library.

--    Body_Needed_For_Inlining (Flag299)
--       Defined in package entities that are compilation units. Used to
--       determine whether the body unit needs to be compiled when the
--       package declaration appears in the list of units to inline. A body
--       is needed for inline processing if the unit declaration contains
--       functions that carry pragma Inline or Inline_Always, or if it
--       contains a generic unit that requires a body.
--
--    Body_References (Elist16)
--       Defined in abstract state entities. Contains an element list of
--       references (identifiers) that appear in a package body whose spec
--       defines the related state. If the body refines the said state, all
--       references on this list are illegal due to the visible refinement.

--    BIP_Initialization_Call (Node29)
--       Defined in constants and variables whose corresponding declaration
--       is wrapped in a transient block and the inital value is provided by
--       a build-in-place function call. Contains the relocated build-in-place
--       call after the expansion has decoupled the call from the object. This
--       attribute is used by the finalization machinery to insert cleanup code
--       for all additional transient objects found in the transient block.

--    C_Pass_By_Copy (Flag125) [implementation base type only]
--       Defined in record types. Set if a pragma Convention for the record
--       type specifies convention C_Pass_By_Copy. This convention name is
--       treated as identical in all respects to convention C, except that
--       if it is specified for a record type, then the C_Pass_By_Copy flag
--       is set, and if a foreign convention subprogram has a formal of the
--       corresponding type, then the parameter passing mechanism will be
--       set to By_Copy (unless specifically overridden by an Import or
--       Export pragma).

--    Can_Never_Be_Null (Flag38)
--       This flag is defined in all entities. It is set in an object which can
--       never have a null value. Set for constant access values initialized to
--       a non-null value. This is also set for all access parameters in Ada 83
--       and Ada 95 modes, and for access parameters that explicitly exclude
--       exclude null in Ada 2005 mode.
--
--       This is used to avoid unnecessary resetting of the Is_Known_Non_Null
--       flag for such entities. In Ada 2005 mode, this is also used when
--       determining subtype conformance of subprogram profiles to ensure
--       that two formals have the same null-exclusion status.
--
--       This is also set on some access types, e.g. the Etype of the anonymous
--       access type of a controlling formal.

--    Can_Use_Internal_Rep (Flag229) [base type only]
--       Defined in Access_Subprogram_Kind nodes. This flag is set by the
--       front end and used by the backend. False means that the backend
--       must represent the type in the same way as Convention-C types (and
--       other foreign-convention types). On many targets, this means that
--       the backend will use dynamically generated trampolines for nested
--       subprograms. True means that the backend can represent the type in
--       some internal way. On the aforementioned targets, this means that the
--       backend will not use dynamically generated trampolines. This flag
--       must be False if Has_Foreign_Convention is True; otherwise, the front
--       end is free to set the policy.
--
--       Setting this False in all cases corresponds to the traditional back
--       end strategy, where all access-to-subprogram types are represented the
--       same way, independent of the Convention. For further details, see also
--       Always_Compatible_Rep in Targparm.
--
--       Efficiency note: On targets that use dynamically generated
--       trampolines, False generally favors efficiency of top-level
--       subprograms, whereas True generally favors efficiency of nested
--       ones. On other targets, this flag has little or no effect on
--       efficiency. The front end should take this into account. In
--       particular, pragma Favor_Top_Level gives a hint that the flag
--       should be False.
--
--       Note: We considered using Convention-C for this purpose, but we need
--       this separate flag, because Convention-C implies that in the case of
--       P'[Unrestricted_]Access, P also have convention C. Sometimes we want
--       to have Can_Use_Internal_Rep False for an access type, but allow P to
--       have convention Ada.

--    Chars (Name1)
--       Defined in all entities. This field contains an entry into the names
--       table that has the character string of the identifier, character
--       literal or operator symbol. See Namet for further details. Note that
--       throughout the processing of the front end, this name is the simple
--       unqualified name. However, just before the backend is called, a call
--       is made to Qualify_All_Entity_Names. This causes entity names to be
--       qualified using the encoding described in exp_dbug.ads, and from that
--       point (including post backend steps, e.g. cross-reference generation),
--       the entities will contain the encoded qualified names.

--    Checks_May_Be_Suppressed (Flag31)
--       Defined in all entities. Set if a pragma Suppress or Unsuppress
--       mentions the entity specifically in the second argument. If this
--       flag is set the Global_Entity_Suppress and Local_Entity_Suppress
--       tables must be consulted to determine if there actually is an active
--       Suppress or Unsuppress pragma that applies to the entity.

--    Class_Wide_Clone (Node38)
--       Defined on subprogram entities. Set if the subprogram has a class-wide
--       ore- or postcondition, and the expression contains calls to other
--       primitive funtions of the type. Used to implement properly the
--       semantics of inherited operations whose class-wide condition may
--       be different from that of the ancestor (See AI012-0195).

--    Class_Wide_Type (Node9)
--       Defined in all type entities. For a tagged type or subtype, returns
--       the corresponding implicitly declared class-wide type. For a
--       class-wide type, returns itself. Set to Empty for untagged types.

--    Cloned_Subtype (Node16)
--       Defined in E_Record_Subtype and E_Class_Wide_Subtype entities.
--       Each such entity can either have a Discriminant_Constraint, in
--       which case it represents a distinct type from the base type (and
--       will have a list of components and discriminants in the list headed by
--       First_Entity) or else no such constraint, in which case it will be a
--       copy of the base type.
--
--       o  Each element of the list in First_Entity is copied from the base
--          type; in that case, this field is Empty.
--
--       o  The list in First_Entity is shared with the base type; in that
--          case, this field points to that entity.
--
--       A record or classwide subtype may also be a copy of some other
--       subtype and share the entities in the First_Entity with that subtype.
--       In that case, this field points to that subtype.
--
--       For E_Class_Wide_Subtype, the presence of Equivalent_Type overrides
--       this field. Note that this field ONLY appears in subtype entities, not
--       in type entities, it is not defined, and it is an error to reference
--       Cloned_Subtype in an E_Record_Type or E_Class_Wide_Type entity.

--    Comes_From_Source
--       This flag appears on all nodes, including entities, and indicates
--       that the node was created by the scanner or parser from the original
--       source. Thus for entities, it indicates that the entity is defined
--       in the original source program.

--    Component_Alignment (special field) [base type only]
--       Defined in array and record entities. Contains a value of type
--       Component_Alignment_Kind indicating the alignment of components.
--       Set to Calign_Default normally, but can be overridden by use of
--       the Component_Alignment pragma. Note: this field is currently
--       stored in a non-standard way, see body for details.

--    Component_Bit_Offset (Uint11)
--       Defined in record components (E_Component, E_Discriminant). First
--       bit position of given component, computed from the first bit and
--       position values given in the component clause. A value of No_Uint
--       means that the value is not yet known. The value can be set by the
--       appearance of an explicit component clause in a record representation
--       clause, or it can be set by the front-end in package Layout, or it can
--       be set by the backend. By the time backend processing is completed,
--       this field is always set. A negative value is used to represent
--       a value which is not known at compile time, and must be computed
--       at run-time (this happens if fields of a record have variable
--       lengths). See package Layout for details of these values.
--
--       Note: Component_Bit_Offset is redundant with respect to the fields
--       Normalized_First_Bit and Normalized_Position, and could in principle
--       be eliminated, but it is convenient in several situations, including
--       use in the backend, to have this redundant field.

--    Component_Clause (Node13)
--       Defined in record components and discriminants. If a record
--       representation clause is present for the corresponding record type a
--       that specifies a position for the component, then the Component_Clause
--       field of the E_Component entity points to the N_Component_Clause node.
--       Set to Empty if no record representation clause was present, or if
--       there was no specification for this component.

--    Component_Size (Uint22) [implementation base type only]
--       Defined in array types. It contains the component size value for
--       the array. A value of No_Uint means that the value is not yet set.
--       The value can be set by the use of a component size clause, or
--       by the front end in package Layout, or by the backend. A negative
--       value is used to represent a value which is not known at compile
--       time, and must be computed at run-time (this happens if the type
--       of the component has a variable length size). See package Layout
--       for details of these values.

--    Component_Type (Node20) [implementation base type only]
--       Defined in array types and string types. References component type.

--    Contains_Ignored_Ghost_Code (Flag279)
--       Defined in blocks, packages and their bodies, subprograms and their
--       bodies. Set if the entity contains any ignored Ghost code in the form
--       of declaration, procedure call, assignment statement or pragma.

--    Contract (Node34)
--       Defined in constant, entry, entry family, operator, [generic] package,
--       package body, protected type, [generic] subprogram, subprogram body,
--       variable and task type entities. Points to the contract of the entity,
--       holding various assertion items and data classifiers.

--    Contract_Wrapper (Node25)
--       Defined in entry and entry family entities. Set only when the entry
--       [family] has contract cases, preconditions, and/or postconditions.
--       Contains the entity of a wrapper procedure which encapsulates the
--       original entry and implements precondition/postcondition semantics.

--    Corresponding_Concurrent_Type (Node18)
--       Defined in record types that are constructed by the expander to
--       represent task and protected types (Is_Concurrent_Record_Type flag
--       set). Points to the entity for the corresponding task type or the
--       protected type.

--    Corresponding_Discriminant (Node19)
--       Defined in discriminants of a derived type, when the discriminant is
--       used to constrain a discriminant of the parent type. Points to the
--       corresponding discriminant in the parent type. Otherwise it is Empty.

--    Corresponding_Equality (Node30)
--       Defined in function entities for implicit inequality operators.
--       Denotes the explicit or derived equality operation that creates
--       the implicit inequality. Note that this field is not present in
--       other function entities, only in implicit inequality routines,
--       where Comes_From_Source is always False.

--    Corresponding_Function (Node32)
--       Defined on procedures internally built with an extra out parameter
--       to return a constrained array type, when Modify_Tree_For_C is set.
--       Denotes the function that returns the constrained array type for
--       which this procedure was built.

--    Corresponding_Procedure (Node32)
--       Defined on functions that return a constrained array type, when
--       Modify_Tree_For_C is set. Denotes the internally built procedure
--       with an extra out parameter created for it.

--    Corresponding_Protected_Entry (Node18)
--       Defined in subprogram bodies. Set for subprogram bodies that implement
--       a protected type entry to point to the entity for the entry.

--    Corresponding_Record_Component (Node21)
--       Defined in components of a derived untagged record type, including
--       discriminants. For a regular component or a girder discriminant,
--       points to the corresponding component in the parent type. Set to
--       Empty for a non-girder discriminant. It is used by the back end to
--       ensure the layout of the derived type matches that of the parent
--       type when there is no representation clause on the derived type.

--    Corresponding_Record_Type (Node18)
--       Defined in protected and task types and subtypes. References the
--       entity for the corresponding record type constructed by the expander
--       (see Exp_Ch9). This type is used to represent values of the task type.

--    Corresponding_Remote_Type (Node22)
--       Defined in record types that describe the fat pointer structure for
--       Remote_Access_To_Subprogram types. References the original access
--       to subprogram type.

--    CR_Discriminant (Node23)
--       Defined in discriminants of concurrent types. Denotes the homologous
--       discriminant of the corresponding record type. The CR_Discriminant is
--       created at the same time as the discriminal, and used to replace
--       occurrences of the discriminant within the type declaration.

--    Current_Use_Clause (Node27)
--       Defined in packages and in types. For packages, denotes the use
--       package clause currently in scope that makes the package use_visible.
--       For types, it denotes the use_type clause that makes the operators of
--       the type visible. Used for more precise warning messages on redundant
--       use clauses.

--    Current_Value (Node9)
--       Defined in all object entities. Set in E_Variable, E_Constant, formal
--       parameters and E_Loop_Parameter entities if we have trackable current
--       values. Set non-Empty if the (constant) current value of the variable
--       is known, This value is valid only for references from the same
--       sequential scope as the entity. The sequential scope of an entity
--       includes the immediate scope and any contained scopes that are package
--       specs, package bodies, blocks (at any nesting level) or statement
--       sequences in IF or loop statements.
--
--       Another related use of this field is to record information about the
--       value obtained from an IF or WHILE statement condition. If the IF or
--       ELSIF or WHILE condition has the form "NOT {,NOT] OBJ RELOP VAL ",
--       or OBJ [AND [THEN]] expr, where OBJ refers to an entity with a
--       Current_Value field, RELOP is one of the six relational operators, and
--       VAL is a compile-time known value then the Current_Value field of OBJ
--       points to the N_If_Statement, N_Elsif_Part, or N_Iteration_Scheme node
--       of the relevant construct, and the Condition field of this can be
--       consulted to give information about the value of OBJ. For more details
--       on this usage, see the procedure Exp_Util.Get_Current_Value_Condition.

--    Debug_Info_Off (Flag166)
--       Defined in all entities. Set if a pragma Suppress_Debug_Info applies
--       to the entity, or if internal processing in the compiler determines
--       that suppression of debug information is desirable. Note that this
--       flag is only for use by the front end as part of the processing for
--       determining if Needs_Debug_Info should be set. The backend should
--       always test Needs_Debug_Info, it should never test Debug_Info_Off.

--    Debug_Renaming_Link (Node25)
--       Used to link the variable associated with a debug renaming declaration
--       to the renamed entity. See Exp_Dbug.Debug_Renaming_Declaration for
--       details of the use of this field.

--    Declaration_Node (synthesized)
--       Applies to all entities. Returns the tree node for the construct that
--       declared the entity. Normally this is just the Parent of the entity.
--       One exception arises with child units, where the parent of the entity
--       is a selected component/defining program unit name. Another exception
--       is that if the entity is an incomplete type that has been completed or
--       a private type, then we obtain the declaration node denoted by the
--       full type, i.e. the full type declaration node. Also note that for
--       subprograms, this returns the {function,procedure}_specification, not
--       the subprogram_declaration.

--    Default_Aspect_Component_Value (Node19) [base type only]
--       Defined in array types. Holds the static value specified in a
--       Default_Component_Value aspect specification for the array type,
--       or inherited on derivation.

--    Default_Aspect_Value (Node19) [base type only]
--       Defined in scalar types. Holds the static value specified in a
--       Default_Value aspect specification for the type, or inherited
--       on derivation.

--    Default_Expr_Function (Node21)
--       Defined in parameters. It holds the entity of the parameterless
--       function that is built to evaluate the default expression if it is
--       more complex than a simple identifier or literal. For the latter
--       simple cases or if there is no default value, this field is Empty.

--    Default_Expressions_Processed (Flag108)
--       A flag in subprograms (functions, operators, procedures) and in
--       entries and entry families used to indicate that default expressions
--       have been processed and to avoid multiple calls to process the
--       default expressions (see Freeze.Process_Default_Expressions), which
--       would not only waste time, but also generate false error messages.

--    Default_Value (Node20)
--       Defined in formal parameters. Points to the node representing the
--       expression for the default value for the parameter. Empty if the
--       parameter has no default value (which is always the case for OUT
--       and IN OUT parameters in the absence of errors).

--    Delay_Cleanups (Flag114)
--       Defined in entities that have finalization lists (subprograms
--       blocks, and tasks). Set if there are pending generic body
--       instantiations for the corresponding entity. If this flag is
--       set, then generation of cleanup actions for the corresponding
--       entity must be delayed, since the insertion of the generic body
--       may affect cleanup generation (see Inline for further details).

--    Delay_Subprogram_Descriptors (Flag50)
--       Defined in entities for which exception subprogram descriptors
--       are generated (subprograms, package declarations and package
--       bodies). Defined if there are pending generic body instantiations
--       for the corresponding entity. If this flag is set, then generation
--       of the subprogram descriptor for the corresponding enities must
--       be delayed, since the insertion of the generic body may add entries
--       to the list of handlers.
--
--       Note: for subprograms, Delay_Subprogram_Descriptors is set if and
--       only if Delay_Cleanups is set. But Delay_Cleanups can be set for a
--       a block (in which case Delay_Subprogram_Descriptors is set for the
--       containing subprogram). In addition Delay_Subprogram_Descriptors is
--       set for a library level package declaration or body which contains
--       delayed instantiations (in this case the descriptor refers to the
--       enclosing elaboration procedure).

--    Delta_Value (Ureal18)
--       Defined in fixed and decimal types. Points to a universal real
--       that holds value of delta for the type, as given in the declaration
--       or as inherited by a subtype or derived type.

--    Dependent_Instances (Elist8)
--       Defined in packages that are instances. Holds list of instances
--       of inner generics. Used to place freeze nodes for those instances
--       after that of the current one, i.e. after the corresponding generic
--       bodies.

--    Depends_On_Private (Flag14)
--       Defined in all type entities. Set if the type is private or if it
--       depends on a private type.

--    Derived_Type_Link (Node31)
--       Defined in all type and subtype entities. Set in a base type if
--       a derived type declaration is encountered which derives from
--       this base type or one of its subtypes, and there are already
--       primitive operations declared. In this case, it references the
--       entity for the type declared by the derived type declaration.
--       For example:
--
--          type R is ...
--          subtype RS is R ...
--          ...
--          type G is new RS ...
--
--       In this case, if primitive operations have been declared for R, at
--       the point of declaration of G, then the Derived_Type_Link of R is set
--       to point to the entity for G. This is used to generate warnings and
--       errors for rep clauses that appear later on for R, which might result
--       in an unexpected (or illegal) implicit conversion operation.
--
--       Note: if there is more than one such derived type, the link will point
--       to the last one.

--    Designated_Type (synthesized)
--       Applies to access types. Returns the designated type. Differs from
--       Directly_Designated_Type in that if the access type refers to an
--       incomplete type, and the full type is available, then this full type
--       is returned instead of the incomplete type.

--    DIC_Procedure (synthesized)
--       Defined in all type entities. Set for a private type and its full view
--       when the type is subject to pragma Default_Initial_Condition (DIC), or
--       when the type inherits a DIC pragma from a parent type. Points to the
--       entity of a procedure which takes a single argument of the given type
--       and verifies the assertion expression of the DIC pragma at run time.

--       Note: the reason this is marked as a synthesized attribute is that the
--       way this is stored is as an element of the Subprograms_For_Type field.

--    Digits_Value (Uint17)
--       Defined in floating point types and subtypes and decimal types and
--       subtypes. Contains the Digits value specified in the declaration.

--    Direct_Primitive_Operations (Elist10)
--       Defined in tagged types and subtypes (including synchronized types),
--       in tagged private types and in tagged incomplete types. Element list
--       of entities for primitive operations of the tagged type. Not defined
--       in untagged types. In order to follow the C++ ABI, entities of
--       primitives that come from source must be stored in this list in the
--       order of their occurrence in the sources. For incomplete types the
--       list is always empty.
--       When expansion is disabled the corresponding record type of a
--       synchronized type is not constructed. In that case, such types
--       carry this attribute directly, for ASIS use.

--    Directly_Designated_Type (Node20)
--       Defined in access types. This field points to the type that is
--       directly designated by the access type. In the case of an access
--       type to an incomplete type, this field references the incomplete
--       type. Directly_Designated_Type is typically used in implementing the
--       static semantics of the language; in implementing dynamic semantics,
--       we typically want the full view of the designated type. The function
--       Designated_Type obtains this full type in the case of access to an
--       incomplete type.

--    Disable_Controlled (Flag253)
--      Present in all entities. Set for a controlled type subject to aspect
--      Disable_Controlled which evaluates to True. This flag is taken into
--      account in synthesized attribute Is_Controlled.

--    Discard_Names (Flag88)
--       Defined in types and exception entities. Set if pragma Discard_Names
--       applies to the entity. It is also set for declarative regions and
--       package specs for which a Discard_Names pragma with zero arguments
--       has been encountered. The purpose of setting this flag is to be able
--       to set the Discard_Names attribute on enumeration types declared
--       after the pragma within the same declarative region. This flag is
--       set to False if a Keep_Names pragma appears for an enumeration type.

--    Discriminal (Node17)
--       Defined in discriminants (Discriminant formal: GNAT's first
--       coinage). The entity used as a formal parameter that corresponds
--       to a discriminant. See section "Handling of Discriminants" for
--       full details of the use of discriminals.

--    Discriminal_Link (Node10)
--       Defined in E_In_Parameter or E_Constant entities. For discriminals,
--       points back to corresponding discriminant. For other entities, must
--       remain Empty.

--    Discriminant_Checking_Func (Node20)
--       Defined in components. Points to the defining identifier of the
--       function built by the expander returns a Boolean indicating whether
--       the given record component exists for the current discriminant
--       values.

--    Discriminant_Constraint (Elist21)
--       Defined in entities whose Has_Discriminants flag is set (concurrent
--       types, subtypes, record types and subtypes, private types and
--       subtypes, limited private types and subtypes and incomplete types).
--       It is an error to reference the Discriminant_Constraint field if
--       Has_Discriminants is False.
--
--       If the Is_Constrained flag is set, Discriminant_Constraint points
--       to an element list containing the discriminant constraints in the
--       same order in which the discriminants are declared.
--
--       If the Is_Constrained flag is not set but the discriminants of the
--       unconstrained type have default initial values then this field
--       points to an element list giving these default initial values in
--       the same order in which the discriminants are declared. Note that
--       in this case the entity cannot be a tagged record type, because
--       discriminants in this case cannot have defaults.
--
--       If the entity is a tagged record implicit type, then this field is
--       inherited from the first subtype (so that the itype is subtype
--       conformant with its first subtype, which is needed when the first
--       subtype overrides primitive operations inherited by the implicit
--       base type).
--
--       In all other cases Discriminant_Constraint contains the empty
--       Elist (i.e. it is initialized with a call to New_Elmt_List).

--    Discriminant_Default_Value (Node20)
--       Defined in discriminants. Points to the node representing the
--       expression for the default value of the discriminant. Set to
--       Empty if the discriminant has no default value.

--    Discriminant_Number (Uint15)
--       Defined in discriminants. Gives the ranking of a discriminant in
--       the list of discriminants of the type, i.e. a sequential integer
--       index starting at 1 and ranging up to number of discriminants.

--    Dispatch_Table_Wrappers (Elist26) [implementation base type only]
--       Defined in E_Record_Type and E_Record_Subtype entities. Set in library
--       level tagged type entities if we are generating statically allocated
--       dispatch tables. Points to the list of dispatch table wrappers
--       associated with the tagged type. For an untagged record, contains
--       No_Elist.

--    DTC_Entity (Node16)
--       Defined in function and procedure entities. Set to Empty unless
--       the subprogram is dispatching in which case it references the
--       Dispatch Table pointer Component. For regular Ada tagged this, this
--       is the _Tag component. For CPP_Class types and their descendants,
--       this points to the component entity in the record that holds the
--       Vtable pointer for the Vtable containing the entry referencing the
--       subprogram.

--    DT_Entry_Count (Uint15)
--       Defined in E_Component entities. Only used for component marked
--       Is_Tag. Store the number of entries in the Vtable (or Dispatch Table)

--    DT_Offset_To_Top_Func (Node25)
--       Defined in E_Component entities. Only used for component marked
--       Is_Tag. If present it stores the Offset_To_Top function used to
--       provide this value in tagged types whose ancestor has discriminants.

--    DT_Position (Uint15)
--       Defined in function and procedure entities which are dispatching
--       (should not be referenced without first checking that flag
--       Is_Dispatching_Operation is True). Contains the offset into
--       the Vtable for the entry that references the subprogram.

--    Ekind (Ekind)
--       Defined in all entities. Contains a value of the enumeration type
--       Entity_Kind declared in a subsequent section in this spec.

--    Elaborate_Body_Desirable (Flag210)
--       Defined in package entities. Set if the elaboration circuitry detects
--       a case where there is a package body that modifies one or more visible
--       entities in the package spec and there is no explicit Elaborate_Body
--       pragma for the package. This information is passed on to the binder,
--       which attempts, but does not promise, to elaborate the body as close
--       to the spec as possible.

--    Elaboration_Entity (Node13)
--       Defined in entry, entry family, [generic] package, and subprogram
--       entities. This is a counter associated with the unit that is initially
--       set to zero, is incremented when an elaboration request for the unit
--       is made, and is decremented when a finalization request for the unit
--       is made. This is used for three purposes. First, it is used to
--       implement access before elaboration checks (the counter must be
--       non-zero to call a subprogram at elaboration time). Second, it is
--       used to guard against repeated execution of the elaboration code.
--       Third, it is used to ensure that the finalization code is executed
--       only after all clients have requested it.
--
--       Note that we always allocate this counter, and set this field, but
--       we do not always actually use it. It is only used if it is needed
--       for access before elaboration use (see Elaboration_Entity_Required
--       flag) or if either the spec or the body has elaboration code. If
--       neither of these two conditions holds, then the entity is still
--       allocated (since we don't know early enough whether or not there
--       is elaboration code), but is simply not used for any purpose.

--    Elaboration_Entity_Required (Flag174)
--       Defined in entry, entry family, [generic] package, and subprogram
--       entities. Set only if Elaboration_Entity is non-Empty to indicate that
--       the counter is required to be non-zero even if there is no other
--       elaboration code. This occurs when the Elaboration_Entity counter
--       is used for access before elaboration checks. If the counter is
--       only used to prevent multiple execution of the elaboration code,
--       then if there is no other elaboration code, obviously there is no
--       need to set the flag.

--    Encapsulating_State (Node32)
--       Defined in abstract state, constant and variable entities. Contains
--       the entity of an ancestor state or a single concurrent type whose
--       refinement utilizes this item as a constituent.

--    Enclosing_Scope (Node18)
--       Defined in labels. Denotes the innermost enclosing construct that
--       contains the label. Identical to the scope of the label, except for
--       labels declared in the body of an accept statement, in which case the
--       entry_name is the Enclosing_Scope. Used to validate goto's within
--       accept statements.

--    Entry_Accepted (Flag152)
--       Defined in E_Entry and E_Entry_Family entities. Set if there is
--       at least one accept for this entry in the task body. Used to
--       generate warnings for missing accepts.

--    Entry_Bodies_Array (Node19)
--       Defined in protected types for which Has_Entries is true.
--       This is the defining identifier for the array of entry body
--       action procedures and barrier functions used by the runtime to
--       execute the user code associated with each entry.

--    Entry_Cancel_Parameter (Node23)
--       Defined in blocks. This only applies to a block statement for
--       which the Is_Asynchronous_Call_Block flag is set. It
--       contains the defining identifier of an object that must be
--       passed to the Cancel_Task_Entry_Call or Cancel_Protected_Entry_Call
--       call in the cleanup handler added to the block by
--       Exp_Ch7.Expand_Cleanup_Actions. This parameter is a Boolean
--       object for task entry calls and a Communications_Block object
--       in the case of protected entry calls. In both cases the objects
--       are declared in outer scopes to this block.

--    Entry_Component (Node11)
--       Defined in formal parameters (in, in out and out parameters). Used
--       only for formals of entries. References the corresponding component
--       of the entry parameter record for the entry.

--    Entry_Formal (Node16)
--       Defined in components of the record built to correspond to entry
--       parameters. This field points from the component to the formal. It
--       is the back pointer corresponding to Entry_Component.

--    Entry_Index_Constant (Node18)
--       Defined in an entry index parameter. This is an identifier that
--       eventually becomes the name of a constant representing the index
--       of the entry family member whose entry body is being executed. Used
--       to expand references to the entry index specification identifier.

--    Entry_Index_Type (synthesized)
--       Applies to an entry family. Denotes Etype of the subtype indication
--       in the entry declaration. Used to resolve the index expression in an
--       accept statement for a member of the family, and in the prefix of
--       'COUNT when it applies to a family member.

--    Entry_Max_Queue_Lengths_Array (Node35)
--       Defined in protected types for which Has_Entries is true. Contains the
--       defining identifier for the array of naturals used by the runtime to
--       limit the queue size of each entry individually.

--    Entry_Parameters_Type (Node15)
--       Defined in entries. Points to the access-to-record type that is
--       constructed by the expander to hold a reference to the parameter
--       values. This reference is manipulated (as an address) by the
--       tasking runtime. The designated record represents a packaging
--       up of the entry parameters (see Exp_Ch9.Expand_N_Entry_Declaration
--       for further details). Entry_Parameters_Type is Empty if the entry
--       has no parameters.

--    Enumeration_Pos (Uint11)
--       Defined in enumeration literals. Contains the position number
--       corresponding to the value of the enumeration literal.

--    Enumeration_Rep (Uint12)
--       Defined in enumeration literals. Contains the representation that
--       corresponds to the value of the enumeration literal. Note that
--       this is normally the same as Enumeration_Pos except in the presence
--       of representation clauses, where Pos will still represent the
--       position of the literal within the type and Rep will have be the
--       value given in the representation clause.

--    Enumeration_Rep_Expr (Node22)
--       Defined in enumeration literals. Points to the expression in an
--       associated enumeration rep clause that provides the representation
--       value for this literal. Empty if no enumeration rep clause for this
--       literal (or if rep clause does not have an entry for this literal,
--       an error situation). This is also used to catch duplicate entries
--       for the same literal.

--    Enum_Pos_To_Rep (Node23)
--       Defined in enumeration types (but not enumeration subtypes). Set to
--       Empty unless the enumeration type has a non-standard representation
--       (i.e. at least one literal has a representation value different from
--       its pos value). In this case, Enum_Pos_To_Rep is the entity for an
--       array constructed when the type is frozen that maps Pos values to
--       corresponding Rep values. The index type of this array is Natural,
--       and the component type is a suitable integer type that holds the
--       full range of representation values.

--    Equivalent_Type (Node18)
--       Defined in class wide types and subtypes, access to protected
--       subprogram types, and in exception types. For a classwide type, it
--       is always Empty. For a class wide subtype, it points to an entity
--       created by the expander which gives the backend an understandable
--       equivalent of the class subtype with a known size (given by an
--       initial value). See Exp_Util.Expand_Class_Wide_Subtype for further
--       details. For E_Exception_Type, this points to the record containing
--       the data necessary to represent exceptions (for further details, see
--       System.Standard_Library). For access to protected subprograms, it
--       denotes a record that holds pointers to the operation and to the
--       protected object. For remote Access_To_Subprogram types, it denotes
--       the record that is the fat pointer representation of an RAST.

--    Esize (Uint12)
--       Defined in all types and subtypes, and also for components, constants,
--       and variables, including exceptions where it refers to the static data
--       allocated for an exception. Contains the Object_Size of the type or of
--       the object. A value of zero indicates that the value is not yet known.
--
--       For the case of components where a component clause is present, the
--       value is the value from the component clause, which must be non-
--       negative (but may be zero, which is acceptable for the case of
--       a type with only one possible value). It is also possible for Esize
--       of a component to be set without a component clause defined, which
--       means that the component size is specified, but not the position.
--       See also RM_Size and the section on "Handling of Type'Size Values".
--       During backend processing, the value is back annotated for all zero
--       values, so that after the call to the backend, the value is set.

--    Etype (Node5)
--       Defined in all entities. Represents the type of the entity, which
--       is itself another entity. For a type entity, points to the parent
--       type for a derived type, or if the type is not derived, points to
--       itself. For a subtype entity, Etype points to the base type. For
--       a class wide type, points to the corresponding specific type. For a
--       subprogram or subprogram type, Etype has the return type of a function
--       or is set to Standard_Void_Type to represent a procedure. The Etype
--       field of a package is also set to Standard_Void_Type.
--
--       Note one obscure case: for pragma Default_Storage_Pool (null), the
--       Etype of the N_Null node is Empty.

--    Extra_Accessibility (Node13)
--       Defined in formal parameters in the non-generic case. Normally Empty,
--       but if expansion is active, and a parameter is one for which a
--       dynamic accessibility check is required, then an extra formal of type
--       Natural is created (see description of field Extra_Formal), and the
--       Extra_Accessibility field of the formal parameter points to the entity
--       for this extra formal. Also defined in variables when compiling
--       receiving stubs. In this case, a non Empty value means that this
--       variable's accessibility depth has been transmitted by the caller and
--       must be retrieved through the entity designed by this field instead of
--       being computed.

--    Extra_Accessibility_Of_Result (Node19)
--       Defined in (non-generic) Function, Operator, and Subprogram_Type
--       entities. Normally Empty, but if expansion is active, and a function
--       is one for which "the accessibility level of the result ... determined
--       by the point of call" (AI05-0234) is needed, then an extra formal of
--       subtype Natural is created (see description of field Extra_Formal),
--       and the Extra_Accessibility_Of_Result field of the function points to
--       the entity for this extra formal.

--    Extra_Constrained (Node23)
--       Defined in formal parameters in the non-generic case. Normally Empty,
--       but if expansion is active and a parameter is one for which a dynamic
--       indication of its constrained status is required, then an extra formal
--       of type Boolean is created (see description of field Extra_Formal),
--       and the Extra_Constrained field of the formal parameter points to the
--       entity for this extra formal. Also defined in variables when compiling
--       receiving stubs. In this case, a non empty value means that this
--       variable's constrained status has been transmitted by the caller and
--       must be retrieved through the entity designed by this field instead of
--       being computed.

--    Extra_Formal (Node15)
--       Defined in formal parameters in the non-generic case. Certain
--       parameters require extra implicit information to be passed (e.g. the
--       flag indicating if an unconstrained variant record argument is
--       constrained, and the accessibility level for access parameters). See
--       description of Extra_Constrained, Extra_Accessibility fields for
--       further details. Extra formal parameters are constructed to represent
--       these values, and chained to the end of the list of formals using the
--       Extra_Formal field (i.e. the Extra_Formal field of the last "real"
--       formal points to the first extra formal, and the Extra_Formal field of
--       each extra formal points to the next one, with Empty indicating the
--       end of the list of extra formals). Another case of Extra_Formal arises
--       in connection with unnesting of subprograms, where the ARECnF formal
--       that represents an activation record pointer is an extra formal.

--    Extra_Formals (Node28)
--       Applies to subprograms, subprogram types, entries, and entry
--       families. Returns first extra formal of the subprogram or entry.
--       Returns Empty if there are no extra formals.

--    Finalization_Master (Node23) [root type only]
--       Defined in access-to-controlled or access-to-class-wide types. The
--       field contains the entity of the finalization master which handles
--       dynamically allocated controlled objects referenced by the access
--       type. Empty for access-to-subprogram types. Empty for access types
--       whose designated type does not need finalization actions.

--    Finalize_Storage_Only (Flag158) [base type only]
--       Defined in all types. Set on direct controlled types to which a
--       valid Finalize_Storage_Only pragma applies. This flag is also set on
--       composite types when they have at least one controlled component and
--       all their controlled components are Finalize_Storage_Only. It is also
--       inherited by type derivation except for direct controlled types where
--       the Finalize_Storage_Only pragma is required at each level of
--       derivation.

--    Finalizer (Node28)
--       Applies to package declarations and bodies. Contains the entity of the
--       library-level program which finalizes all package-level controlled
--       objects.

--    First_Component (synthesized)
--       Applies to incomplete, private, protected, record and task types.
--       Returns the first component by following the chain of declared
--       entities for the type a component is found (one with an Ekind of
--       E_Component). The discriminants are skipped. If the record is null,
--       then Empty is returned.

--    First_Component_Or_Discriminant (synthesized)
--       Similar to First_Component, but discriminants are not skipped, so will
--       find the first discriminant if discriminants are present.

--    First_Entity (Node17)
--       Defined in all entities which act as scopes to which a list of
--       associated entities is attached (blocks, class subtypes and types,
--       entries, functions, loops, packages, procedures, protected objects,
--       record types and subtypes, private types, task types and subtypes).
--       Points to a list of associated entities using the Next_Entity field
--       as a chain pointer with Empty marking the end of the list.

--    First_Exit_Statement (Node8)
--       Defined in E_Loop entity. The exit statements for a loop are chained
--       (in reverse order of appearance) using this field to point to the
--       first entry in the chain (last exit statement in the loop). The
--       entries are chained through the Next_Exit_Statement field of the
--       N_Exit_Statement node with Empty marking the end of the list.

--    First_Formal (synthesized)
--       Applies to subprograms and subprogram types, and also to entries
--       and entry families. Returns first formal of the subprogram or entry.
--       The formals are the first entities declared in a subprogram or in
--       a subprogram type (the designated type of an Access_To_Subprogram
--       definition) or in an entry.

--    First_Formal_With_Extras (synthesized)
--       Applies to subprograms and subprogram types, and also in entries
--       and entry families. Returns first formal of the subprogram or entry.
--       Returns Empty if there are no formals. The list returned includes
--       all the extra formals (see description of Extra_Formals field).

--    First_Index (Node17)
--       Defined in array types and subtypes. By introducing implicit subtypes
--       for the index constraints, we have the same structure for constrained
--       and unconstrained arrays, subtype marks and discrete ranges are
--       both represented by a subtype. This function returns the tree node
--       corresponding to an occurrence of the first index (NOT the entity for
--       the type). Subsequent indices are obtained using Next_Index. Note that
--       this field is defined for the case of string literal subtypes, but is
--       always Empty.

--    First_Literal (Node17)
--       Defined in all enumeration types, including character and boolean
--       types. This field points to the first enumeration literal entity
--       for the type (i.e. it is set to First (Literals (N)) where N is
--       the enumeration type definition node. A special case occurs with
--       standard character and wide character types, where this field is
--       Empty, since there are no enumeration literal lists in these cases.
--       Note that this field is set in enumeration subtypes, but it still
--       points to the first literal of the base type in this case.

--    First_Private_Entity (Node16)
--       Defined in all entities containing private parts (packages, protected
--       types and subtypes, task types and subtypes). The entities on the
--       entity chain are in order of declaration, so the entries for private
--       entities are at the end of the chain. This field points to the first
--       entity for the private part. It is Empty if there are no entities
--       declared in the private part or if there is no private part.

--    First_Rep_Item (Node6)
--       Defined in all entities. If non-empty, points to a linked list of
--       representation pragmas nodes and representation clause nodes that
--       apply to the entity, linked using Next_Rep_Item, with Empty marking
--       the end of the list. In the case of derived types and subtypes, the
--       new entity inherits the chain at the point of declaration. This means
--       that it is possible to have multiple instances of the same kind of rep
--       item on the chain, in which case it is the first one that applies to
--       the entity.
--
--       Note: pragmas that can apply to more than one overloadable entity,
--       (Convention, Interface, Inline, Inline_Always, Import, Export,
--       External) are never present on this chain when they apply to
--       overloadable entities, since it is impossible for a given pragma
--       to be on more than one chain at a time.
--
--       For most representation items, the representation information is
--       reflected in other fields and flags in the entity. For example if a
--       record representation clause is present, the component entities
--       reflect the specified information. However, there are some items that
--       are only reflected in the chain. These include:
--
--          Machine_Attribute pragma
--          Link_Alias pragma
--          Linker_Constructor pragma
--          Linker_Destructor pragma
--          Weak_External pragma
--          Thread_Local_Storage pragma
--
--       If any of these items are present, then the flag Has_Gigi_Rep_Item is
--       set, indicating that the backend should search the chain.
--
--       Other representation items are included in the chain so that error
--       messages can easily locate the relevant nodes for posting errors.
--       Note in particular that size clauses are defined only for this
--       purpose, and should only be accessed if Has_Size_Clause is set.

--    Float_Rep (Uint10)
--       Defined in floating-point entities. Contains a value of type
--       Float_Rep_Kind. Together with the Digits_Value uniquely defines
--       the floating-point representation to be used.

--    Freeze_Node (Node7)
--       Defined in all entities. If there is an associated freeze node for the
--       entity, this field references this freeze node. If no freeze node is
--       associated with the entity, then this field is Empty. See package
--       Freeze for further details.

--    From_Limited_With (Flag159)
--       Defined in abtract states, package and type entities. Set to True when
--       the related entity is generated by the expansion of a limited with
--       clause. Such an entity is said to be a "shadow" - it acts as the
--       abstract view of a state or variable or as the incomplete view of a
--       type by inheriting relevant attributes from the said entity.

--    Full_View (Node11)
--       Defined in all type and subtype entities and in deferred constants.
--       References the entity for the corresponding full type or constant
--       declaration. For all types other than private and incomplete types,
--       this field always contains Empty. If an incomplete type E1 is
--       completed by a private type E2 whose full type declaration entity is
--       E3 then the full view of E1 is E2, and the full view of E2 is E3. See
--       also Underlying_Type.

--    Generic_Homonym (Node11)
--       Defined in generic packages. The generic homonym is the entity of
--       a renaming declaration inserted in every generic unit. It is used
--       to resolve the name of a local entity that is given by a qualified
--       name, when the generic entity itself is hidden by a local name.

--    Generic_Renamings (Elist23)
--       Defined in package and subprogram instances. Holds mapping that
--       associates generic parameters with the corresponding instances, in
--       those cases where the instance is an entity.

--    Handler_Records (List10)
--       Defined in subprogram and package entities. Points to a list of
--       identifiers referencing the handler record entities for the
--       corresponding unit.

--    Has_Aliased_Components (Flag135) [implementation base type only]
--       Defined in array type entities. Indicates that the component type
--       of the array is aliased. Should this also be set for records to
--       indicate that at least one component is aliased (see processing in
--       Sem_Prag.Process_Atomic_Independent_Shared_Volatile???)

--    Has_Alignment_Clause (Flag46)
--       Defined in all type entities and objects. Indicates if an alignment
--       clause has been given for the entity. If set, then Alignment_Clause
--       returns the N_Attribute_Definition node for the alignment attribute
--       definition clause. Note that it is possible for this flag to be False
--       even when Alignment_Clause returns non_Empty (this happens in the case
--       of derived type declarations).

--    Has_All_Calls_Remote (Flag79)
--       Defined in all library unit entities. Set if the library unit has an
--       All_Calls_Remote pragma. Note that such entities must also be RCI
--       entities, so the flag Is_Remote_Call_Interface will always be set if
--       this flag is set.

--    Has_Atomic_Components (Flag86) [implementation base type only]
--       Defined in all types and objects. Set only for an array type or
--       an array object if a valid pragma Atomic_Components applies to the
--       type or object. Note that in the case of an object, this flag is
--       only set on the object if there was an explicit pragma for the
--       object. In other words, the proper test for whether an object has
--       atomic components is to see if either the object or its base type
--       has this flag set. Note that in the case of a type, the pragma will
--       be chained to the rep item chain of the first subtype in the usual
--       manner.

--    Has_Attach_Handler (synthesized)
--       Applies to record types that are constructed by the expander to
--       represent protected types. Returns True if there is at least one
--       Attach_Handler pragma in the corresponding specification.

--    Has_Biased_Representation (Flag139)
--       Defined in discrete types (where it applies to the type'size value),
--       and to objects (both stand-alone and components), where it applies to
--       the size of the object from a size or record component clause. In
--       all cases it indicates that the size in question is smaller than
--       would normally be required, but that the size requirement can be
--       satisfied by using a biased representation, in which stored values
--       have the low bound (Expr_Value (Type_Low_Bound (T)) subtracted to
--       reduce the required size. For example, a type with a range of 1..2
--       takes one bit, using 0 to represent 1 and 1 to represent 2.
--
--       Note that in the object and component cases, the flag is only set if
--       the type is unbiased, but the object specifies a smaller size than the
--       size of the type, forcing biased representation for the object, but
--       the subtype is still an unbiased type.

--    Has_Completion (Flag26)
--       Defined in all entities that require a completion (functions,
--       procedures, private types, limited private types, incomplete types,
--       constants and packages that require a body). The flag is set if the
--       completion has been encountered and analyzed.

--    Has_Completion_In_Body (Flag71)
--       Defined in all entities for types and subtypes. Set only in "Taft
--       amendment types" (incomplete types whose full declaration appears in
--       the package body).

--    Has_Complex_Representation (Flag140) [implementation base type only]
--       Defined in record types. Set only for a base type to which a valid
--       pragma Complex_Representation applies.

--    Has_Component_Size_Clause (Flag68) [implementation base type only]
--       Defined in all type entities. Set if a component size clause is
--       Defined for the given type. Note that this flag can be False even
--       if Component_Size is non-zero (happens in the case of derived types).

--    Has_Constrained_Partial_View (Flag187)
--       Defined in private type and their completions, when the private
--       type has no discriminants and the full view has discriminants with
--       defaults. In Ada 2005 heap-allocated objects of such types are not
--       constrained, and can change their discriminants with full assignment.
--
--       Ada 2012 has an additional rule (3.3. (23/10.3)) concerning objects
--       declared in a generic package body. Objects whose type is an untagged
--       generic formal private type are considered to have a constrained
--       partial view. The predicate Object_Type_Has_Constrained_Partial_View
--       in sem_aux is used to test for this case.

--    Has_Contiguous_Rep (Flag181)
--       Defined in enumeration types. Set if the type as a representation
--       clause whose entries are successive integers.

--    Has_Controlled_Component (Flag43) [base type only]
--       Defined in all type and subtype entities. Set only for composite type
--       entities which contain a component that either is a controlled type,
--       or itself contains controlled component (i.e. either Is_Controlled or
--       Has_Controlled_Component is set for at least one component).

--    Has_Controlling_Result (Flag98)
--       Defined in E_Function entities. Set if the function is a primitive
--       function of a tagged type which can dispatch on result.

--    Has_Convention_Pragma (Flag119)
--       Defined in all entities. Set for an entity for which a valid pragma
--       Convention, Import, or Export has been given. Used to prevent more
--       than one such pragma appearing for a given entity (RM B.1(45)).

--    Has_Default_Aspect (Flag39) [base type only]
--       Defined in entities for types and subtypes, set for scalar types with
--       a Default_Value aspect and array types with a Default_Component_Value
--       aspect. If this flag is set, then a corresponding aspect specification
--       node will be present on the rep item chain for the entity. For a
--       derived type that inherits a default from its ancestor, the default
--       value is set, but it may be overridden by an aspect declaration on
--       type derivation.

--    Has_Delayed_Aspects (Flag200)
--      Defined in all entities. Set if the Rep_Item chain for the entity has
--      one or more N_Aspect_Definition nodes chained which are not to be
--      evaluated till the freeze point. The aspect definition expression
--      clause has been preanalyzed to get visibility at the point of use,
--      but no other action has been taken.

--    Has_Delayed_Freeze (Flag18)
--       Defined in all entities. Set to indicate that an explicit freeze
--       node must be generated for the entity at its freezing point. See
--       separate section ("Delayed Freezing and Elaboration") for details.

--    Has_Delayed_Rep_Aspects (Flag261)
--       Defined in all types and subtypes. This flag is set if there is at
--       least one aspect for a representation characteristic that has to be
--       delayed and is one of the characteristics that may be inherited by
--       types derived from this type if not overridden. If this flag is set,
--       then types derived from this type have May_Inherit_Delayed_Rep_Aspects
--       set, signalling that Freeze.Inherit_Delayed_Rep_Aspects must be called
--       at the freeze point of the derived type.

--    Has_DIC (synthesized)
--       Defined in all type entities. Set for a private type and its full view
--       when the type is subject to pragma Default_Initial_Condition (DIC), or
--       when the type inherits a DIC pragma from a parent type.

--    Has_Discriminants (Flag5)
--       Defined in all types and subtypes. For types that are allowed to have
--       discriminants (record types and subtypes, task types and subtypes,
--       protected types and subtypes, private types, limited private types,
--       and incomplete types), indicates if the corresponding type or subtype
--       has a known discriminant part. Always false for all other types.

--    Has_Dispatch_Table (Flag220)
--       Defined in E_Record_Types that are tagged. Set to indicate that the
--       corresponding dispatch table is already built. This flag is used to
--       avoid duplicate construction of library level dispatch tables (because
--       the declaration of library level objects cause premature construction
--       of the table); otherwise the code that builds the table is added at
--       the end of the list of declarations of the package.

--    Has_Dynamic_Predicate_Aspect (Flag258)
--       Defined in all types and subtypes. Set if a Dynamic_Predicate aspect
--       was explicitly applied to the type. Generally we treat predicates as
--       static if possible, regardless of whether they are specified using
--       Predicate, Static_Predicate, or Dynamic_Predicate. And if a predicate
--       can be treated as static (i.e. its expression is predicate-static),
--       then the flag Has_Static_Predicate will be set True. But there are
--       cases where legality is affected by the presence of an explicit
--       Dynamic_Predicate aspect. For example, even if a predicate looks
--       static, you can't use it in a case statement if there is an explicit
--       Dynamic_Predicate aspect specified. So test Has_Static_Predicate if
--       you just want to know if the predicate can be evaluated statically,
--       but test Has_Dynamic_Predicate_Aspect to enforce legality rules about
--       the use of dynamic predicates.

--    Has_Entries (synthesized)
--       Applies to concurrent types. True if any entries are declared
--       within the task or protected definition for the type.

--    Has_Enumeration_Rep_Clause (Flag66)
--       Defined in enumeration types. Set if an enumeration representation
--       clause has been given for this enumeration type. Used to prevent more
--       than one enumeration representation clause for a given type. Note
--       that this does not imply a representation with holes, since the rep
--       clause may merely confirm the default 0..N representation.

--    Has_Exit (Flag47)
--       Defined in loop entities. Set if the loop contains an exit statement.

--    Has_Expanded_Contract (Flag240)
--       Defined in functions, procedures, entries, and entry families. Set
--       when a subprogram has a N_Contract node that has been expanded. The
--       flag prevents double expansion of a contract when a construct is
--       rewritten into something else and subsequently reanalyzed/expanded.

--    Has_Foreign_Convention (synthesized)
--       Applies to all entities. Determines if the Convention for the
--       entity is a foreign convention (i.e. is other than Convention_Ada,
--       Convention_Intrinsic, Convention_Entry or Convention_Protected).

--    Has_Forward_Instantiation (Flag175)
--       Defined in package entities. Set for packages that instantiate local
--       generic entities before the corresponding generic body has been seen.
--       If a package has a forward instantiation, we cannot inline subprograms
--       appearing in the same package because the placement requirements of
--       the instance will conflict with the linear elaboration of front-end
--       inlining.

--    Has_Fully_Qualified_Name (Flag173)
--       Defined in all entities. Set if the name in the Chars field has been
--       replaced by the fully qualified name, as used for debug output. See
--       Exp_Dbug for a full description of the use of this flag and also the
--       related flag Has_Qualified_Name.

--    Has_Gigi_Rep_Item (Flag82)
--       Defined in all entities. Set if the rep item chain (referenced by
--       First_Rep_Item and linked through the Next_Rep_Item chain) contains a
--       representation item that needs to be specially processed by the back
--       end, i.e. one of the following items:
--
--          Machine_Attribute pragma
--          Linker_Alias pragma
--          Linker_Constructor pragma
--          Linker_Destructor pragma
--          Weak_External pragma
--          Thread_Local_Storage pragma
--
--       If this flag is set, then the backend should scan the rep item chain
--       to process any of these items that appear. At least one such item will
--       be present.
--
--    Has_Homonym (Flag56)
--       Defined in all entities. Set if an entity has a homonym in the same
--       scope. Used by the backend to generate unique names for all entities.

--    Has_Implicit_Dereference (Flag251)
--       Defined in types and discriminants. Set if the type has an aspect
--       Implicit_Dereference. Set also on the discriminant named in the aspect
--       clause, to simplify type resolution.

--    Has_Independent_Components (Flag34) [implementation base type only]
--       Defined in all types and objects. Set only for a record type or an
--       array type or array object if a valid pragma Independent_Components
--       applies to the type or object. Note that in the case of an object,
--       this flag is only set on the object if there was an explicit pragma
--       for the object. In other words, the proper test for whether an object
--       has independent components is to see if either the object or its base
--       type has this flag set. Note that in the case of a type, the pragma
--       will be chained to the rep item chain of the first subtype in the
--       usual manner. Also set if a pragma Has_Atomic_Components or pragma
--       Has_Aliased_Components applies to the type or object.

--    Has_Inheritable_Invariants (Flag248) [base type only]
--       Defined in all type entities. Set on private types and interface types
--       which define at least one class-wide invariant. Such invariants must
--       be inherited by derived types. The flag is also set on the full view
--       of a private type for completeness.

--    Has_Inherited_DIC (Flag133) [base type only]
--       Defined in all type entities. Set for a derived type which inherits
--       pragma Default_Initial_Condition from a parent type.

--    Has_Inherited_Invariants (Flag291) [base type only]
--       Defined in all type entities. Set on private extensions and derived
--       types which inherit at least one class-wide invariant from a parent or
--       an interface type. The flag is also set on the full view of a private
--       extension for completeness.

--    Has_Initial_Value (Flag219)
--       Defined in entities for variables and out parameters. Set if there
--       is an explicit initial value expression in the declaration of the
--       variable. Note that this is set only if this initial value is
--       explicit, it is not set for the case of implicit initialization
--       of access types or controlled types. Always set to False for out
--       parameters. Also defined in entities for in and in-out parameters,
--       but always false in these cases.

--    Has_Interrupt_Handler (synthesized)
--       Applies to all protected type entities. Set if the protected type
--       definition contains at least one procedure to which a pragma
--       Interrupt_Handler applies.

--    Has_Invariants (synthesized)
--       Defined in all type entities. True if the type defines at least one
--       invariant of its own or inherits at least one class-wide invariant
--       from a parent type or an interface.

--    Has_Loop_Entry_Attributes (Flag260)
--       Defined in E_Loop entities. Set when the loop is subject to at least
--       one attribute 'Loop_Entry. The flag also implies that the loop has
--       already been transformed. See Expand_Loop_Entry_Attribute for details.

--    Has_Machine_Radix_Clause (Flag83)
--       Defined in decimal types and subtypes, set if a Machine_Radix
--       representation clause is present. This flag is used to detect
--       the error of multiple machine radix clauses for a single type.

--    Has_Master_Entity (Flag21)
--       Defined in entities that can appear in the scope stack (see spec
--       of Sem). It is set if a task master entity (_master) has been
--       declared and initialized in the corresponding scope.

--    Has_Missing_Return (Flag142)
--       Defined in functions and generic functions. Set if there is one or
--       more missing return statements in the function. This is used to
--       control wrapping of the body in Exp_Ch6 to ensure that the program
--       error exception is correctly raised in this case at run time.

--    Has_Nested_Block_With_Handler (Flag101)
--       Defined in scope entities. Set if there is a nested block within the
--       scope that has an exception handler and the two scopes are in the
--       same procedure. This is used by the backend for controlling certain
--       optimizations to ensure that they are consistent with exceptions.
--       See documentation in backend for further details.

--    Has_Nested_Subprogram (Flag282)
--      Defined in subprogram entities. Set for a subprogram which contains at
--      least one nested subprogram.

--    Has_Non_Limited_View (synth)
--       Defined in E_Incomplete_Type, E_Incomplete_Subtype, E_Class_Wide_Type,
--       E_Abstract_State entities. True if their Non_Limited_View attribute
--       is present.

--    Has_Non_Null_Abstract_State (synth)
--       Defined in package entities. True if the package is subject to a non-
--       null Abstract_State aspect/pragma.

--    Has_Non_Null_Visible_Refinement (synth)
--       Defined in E_Abstract_State entities. True if the state has a visible
--       refinement of at least one variable or state constituent as expressed
--       in aspect/pragma Refined_State.

--    Has_Non_Standard_Rep (Flag75) [implementation base type only]
--       Defined in all type entities. Set when some representation clause
--       or pragma causes the representation of the item to be significantly
--       modified. In this category are changes of small or radix for a
--       fixed-point type, change of component size for an array, and record
--       or enumeration representation clauses, as well as packed pragmas.
--       All other representation clauses (e.g. Size and Alignment clauses)
--       are not considered to be significant since they do not affect
--       stored bit patterns.

--    Has_Null_Abstract_State (synth)
--       Defined in package entities. True if the package is subject to a null
--       Abstract_State aspect/pragma.

--    Has_Null_Visible_Refinement (synth)
--       Defined in E_Abstract_State entities. True if the state has a visible
--       null refinement as expressed in aspect/pragma Refined_State.

--    Has_Object_Size_Clause (Flag172)
--       Defined in entities for types and subtypes. Set if an Object_Size
--       clause has been processed for the type. Used to prevent multiple
--       Object_Size clauses for a given entity.

--    Has_Out_Or_In_Out_Parameter (Flag110)
--       Present in subprograms, generic subprograms, entries, and entry
--       families. Set if they have at least one OUT or IN OUT parameter
--       (allowed for functions only in Ada 2012).

--    Has_Own_DIC (Flag3) [base type only]
--       Defined in all type entities. Set for a private type and its full view
--       when the type is subject to pragma Default_Initial_Condition.

--    Has_Own_Invariants (Flag232) [base type only]
--       Defined in all type entities. Set on any type that defines at least
--       one invariant of its own. The flag is also set on the full view of a
--       private type for completeness.

--    Has_Partial_Visible_Refinement (Flag296)
--       Defined in E_Abstract_State entities. Set when a state has at least
--       one refinement constituent subject to indicator Part_Of, and analysis
--       is in the region between the declaration of the first constituent for
--       this abstract state (in the private part of the package) and the end
--       of the package spec or body with visibility over this private part
--       (which includes the package itself and its child packages).

--    Has_Per_Object_Constraint (Flag154)
--       Defined in E_Component entities. Set if the subtype of the component
--       has a per object constraint. Per object constraints result from the
--       following situations :
--
--       1. N_Attribute_Reference - when the prefix is the enclosing type and
--          the attribute is Access.
--       2. N_Discriminant_Association - when the expression uses the
--          discriminant of the enclosing type.
--       3. N_Index_Or_Discriminant_Constraint - when at least one of the
--          individual constraints is a per object constraint.
--       4. N_Range - when the lower or upper bound uses the discriminant of
--          the enclosing type.
--       5. N_Range_Constraint - when the range expression uses the
--          discriminant of the enclosing type.

--    Has_Pragma_Controlled (Flag27) [implementation base type only]
--       Defined in access type entities. It is set if a pragma Controlled
--       applies to the access type.

--    Has_Pragma_Elaborate_Body (Flag150)
--       Defined in all entities. Set in compilation unit entities if a
--       pragma Elaborate_Body applies to the compilation unit.

--    Has_Pragma_Inline (Flag157)
--       Defined in all entities. Set for functions and procedures for which a
--       pragma Inline or Inline_Always applies to the subprogram. Note that
--       this flag can be set even if Is_Inlined is not set. This happens for
--       pragma Inline (if Inline_Active is False). In other words, the flag
--       Has_Pragma_Inline represents the formal semantic status, and is used
--       for checking semantic correctness. The flag Is_Inlined indicates
--       whether inlining is actually active for the entity.

--    Has_Pragma_Inline_Always (Flag230)
--       Defined in all entities. Set for functions and procedures for which a
--       pragma Inline_Always applies. Note that if this flag is set, the flag
--       Has_Pragma_Inline is also set.

--    Has_Pragma_No_Inline (Flag201)
--       Defined in all entities. Set for functions and procedures for which a
--       pragma No_Inline applies. Note that if this flag is set, the flag
--       Has_Pragma_Inline_Always cannot be set.

--    Has_Pragma_Ordered (Flag198) [implementation base type only]
--       Defined in entities for enumeration types. If set indicates that a
--       valid pragma Ordered was given for the type. This flag is inherited
--       by derived enumeration types. We don't need to distinguish the derived
--       case since we allow multiple occurrences of this pragma anyway.

--    Has_Pragma_Pack (Flag121) [implementation base type only]
--       Defined in array and record type entities. If set, indicates that a
--       valid pragma Pack was given for the type. Note that this flag is not
--       inherited by derived type. See also the Is_Packed flag.

--    Has_Pragma_Preelab_Init (Flag221)
--       Defined in type and subtype entities. If set indicates that a valid
--       pragma Preelaborable_Initialization applies to the type.

--    Has_Pragma_Pure (Flag203)
--       Defined in all entities. If set, indicates that a valid pragma Pure
--       was given for the entity. In some cases, we need to test whether
--       Is_Pure was explicitly set using this pragma.

--    Has_Pragma_Pure_Function (Flag179)
--       Defined in all entities. If set, indicates that a valid pragma
--       Pure_Function was given for the entity. In some cases, we need to test
--       whether Is_Pure was explicitly set using this pragma. We also set
--       this flag for some internal entities that we know should be treated
--       as pure for optimization purposes.

--    Has_Pragma_Thread_Local_Storage (Flag169)
--       Defined in all entities. If set, indicates that a valid pragma
--       Thread_Local_Storage was given for the entity.

--    Has_Pragma_Unmodified (Flag233)
--       Defined in all entities. Can only be set for variables (E_Variable,
--       E_Out_Parameter, E_In_Out_Parameter). Set if a valid pragma Unmodified
--       applies to the variable, indicating that no warning should be given
--       if the entity is never modified. Note that clients should generally
--       not test this flag directly, but instead use function Has_Unmodified.

--    Has_Pragma_Unreferenced (Flag180)
--       Defined in all entities. Set if a valid pragma Unreferenced applies
--       to the entity, indicating that no warning should be given if the
--       entity has no references, but a warning should be given if it is
--       in fact referenced. For private types, this flag is set in both the
--       private entity and full entity if the pragma applies to either. Note
--       that clients should generally not test this flag directly, but instead
--       use function Has_Unreferenced.

--  ??? this real description was clobbered

--    Has_Pragma_Unreferenced_Objects (Flag212)
--       Defined in all entities. Set if a valid pragma Unused applies to an
--       entity, indicating that warnings should be given if the entity is
--       modified or referenced. This pragma is equivalent to a pair of
--       Unmodified and Unreferenced pragmas.

--    Has_Pragma_Unused (Flag294)
--       Defined in all entities. Set if a valid pragma Unused applies to a
--       variable or entity, indicating that warnings should not be given if
--       it is never modified or referenced. Note: This pragma is exactly
--       equivalent Unmodified and Unreference combined.

--    Has_Predicates (Flag250)
--       Defined in type and subtype entities. Set if a pragma Predicate or
--       Predicate aspect applies to the type or subtype, or if it inherits a
--       Predicate aspect from its parent or progenitor types.
--
--       Note: this flag is set on both partial and full view of types to which
--       a Predicate pragma or aspect applies.

--    Has_Primitive_Operations (Flag120) [base type only]
--       Defined in all type entities. Set if at least one primitive operation
--       is defined for the type.

--    Has_Private_Ancestor (Flag151)
--       Applies to type extensions. True if some ancestor is derived from a
--       private type, making some components invisible and aggregates illegal.
--       This flag is set at the point of derivation. The legality of the
--       aggregate must be rechecked because it also depends on the visibility
--       at the point the aggregate is resolved. See sem_aggr.adb. This is part
--       of AI05-0115.

--    Has_Private_Declaration (Flag155)
--       Defined in all entities. Set if it is the defining entity of a private
--       type declaration or its corresponding full declaration. This flag is
--       thus preserved when the full and the partial views are exchanged, to
--       indicate if a full type declaration is a completion. Used for semantic
--       checks in E.4(18) and elsewhere.

--    Has_Private_Extension (Flag300)
--       Defined in tagged types. Set to indicate that the tagged type has some
--       private extension. Used to report a warning on public primitives added
--       after defining its private extensions.

--    Has_Protected (Flag271) [base type only]
--       Defined in all type entities. Set on protected types themselves, and
--       also (recursively) on any composite type which has a component for
--       which Has_Protected is set, unless the protected type is declared in
--       the private part of an internal unit. The meaning is that restrictions
--       for protected types apply to this type. Note: the flag is not set on
--       access types, even if they designate an object that Has_Protected.

--    Has_Qualified_Name (Flag161)
--       Defined in all entities. Set if the name in the Chars field has
--       been replaced by its qualified name, as used for debug output. See
--       Exp_Dbug for a full description of qualification requirements. For
--       some entities, the name is the fully qualified name, but there are
--       exceptions. In particular, for local variables in procedures, we
--       do not include the procedure itself or higher scopes. See also the
--       flag Has_Fully_Qualified_Name, which is set if the name does indeed
--       include the fully qualified name.

--    Has_RACW (Flag214)
--       Defined in package spec entities. Set if the spec contains the
--       declaration of a remote access-to-classwide type.

--    Has_Record_Rep_Clause (Flag65) [implementation base type only]
--       Defined in record types. Set if a record representation clause has
--       been given for this record type. Used to prevent more than one such
--       clause for a given record type. Note that this is initially cleared
--       for a derived type, even though the representation is inherited. See
--       also the flag Has_Specified_Layout.

--    Has_Recursive_Call (Flag143)
--       Defined in procedures. Set if a direct parameterless recursive call
--       is detected while analyzing the body. Used to activate some error
--       checks for infinite recursion.

--    Has_Shift_Operator (Flag267) [base type only]
--       Defined in integer types. Set in the base type of an integer type for
--       which at least one of the shift operators is defined.

--    Has_Size_Clause (Flag29)
--       Defined in entities for types and objects. Set if a size clause is
--       defined for the entity. Used to prevent multiple Size clauses for a
--       given entity. Note that it is always initially cleared for a derived
--       type, even though the Size for such a type is inherited from a Size
--       clause given for the parent type.

--    Has_Small_Clause (Flag67)
--       Defined in ordinary fixed point types (but not subtypes). Indicates
--       that a small clause has been given for the entity. Used to prevent
--       multiple Small clauses for a given entity. Note that it is always
--       initially cleared for a derived type, even though the Small for such
--       a type is inherited from a Small clause given for the parent type.

--    Has_Specified_Layout (Flag100) [implementation base type only]
--       Defined in all type entities. Set for a record type or subtype if
--       the record layout has been specified by a record representation
--       clause. Note that this differs from the flag Has_Record_Rep_Clause
--       in that it is inherited by a derived type. Has_Record_Rep_Clause is
--       used to indicate that the type is mentioned explicitly in a record
--       representation clause, and thus is not inherited by a derived type.
--       This flag is always False for non-record types.

--    Has_Specified_Stream_Input (Flag190)
--    Has_Specified_Stream_Output (Flag191)
--    Has_Specified_Stream_Read (Flag192)
--    Has_Specified_Stream_Write (Flag193)
--       Defined in all type and subtype entities. Set for a given view if the
--       corresponding stream-oriented attribute has been defined by an
--       attribute definition clause. When such a clause occurs, a TSS is set
--       on the underlying full view; the flags are used to track visibility of
--       the attribute definition clause for partial or incomplete views.

--    Has_Static_Discriminants (Flag211)
--       Defined in record subtypes constrained by discriminant values. Set if
--       all the discriminant values have static values, meaning that in the
--       case of a variant record, the component list can be trimmed down to
--       include only the components corresponding to these discriminants.

--    Has_Static_Predicate (Flag269)
--       Defined in all types and subtypes. Set if the type (which must be a
--       scalar type) has a predicate whose expression is predicate-static.
--       This can result from the use of any Predicate, Static_Predicate, or
--       Dynamic_Predicate aspect. We can distinguish these cases by testing
--       Has_Static_Predicate_Aspect and Has_Dynamic_Predicate_Aspect. See
--       description of the latter flag for further information on dynamic
--       predicates which are also static.

--    Has_Static_Predicate_Aspect (Flag259)
--       Defined in all types and subtypes. Set if a Static_Predicate aspect
--       applies to the type. Note that we can tell if a static predicate is
--       present by looking at Has_Static_Predicate, but this could have come
--       from a Predicate aspect or pragma or even from a Dynamic_Predicate
--       aspect. When we need to know the difference (e.g. to know what set of
--       check policies apply, use this flag and Has_Dynamic_Predicate_Aspect
--       to determine which case we have).

--    Has_Storage_Size_Clause (Flag23) [implementation base type only]
--       Defined in task types and access types. It is set if a Storage_Size
--       clause is present for the type. Used to prevent multiple clauses for
--       one type. Note that this flag is initially cleared for a derived type
--       even though the Storage_Size for such a type is inherited from a
--       Storage_Size clause given for the parent type. Note that in the case
--       of access types, this flag is defined only in the root type, since a
--       storage size clause cannot be given to a derived type.

--    Has_Stream_Size_Clause (Flag184)
--       Defined in all entities. It is set for types which have a Stream_Size
--       clause attribute. Used to prevent multiple Stream_Size clauses for a
--       given entity, and also whether it is necessary to check for a stream
--       size clause.

--    Has_Task (Flag30) [base type only]
--       Defined in all type entities. Set on task types themselves, and also
--       (recursively) on any composite type which has a component for which
--       Has_Task is set. The meaning is that an allocator or declaration of
--       such an object must create the required tasks. Note: the flag is not
--       set on access types, even if they designate an object that Has_Task.

--    Has_Timing_Event (Flag289) [base type only]
--       Defined in all type entities. Set on language defined type
--       Ada.Real_Time.Timing_Events.Timing_Event, and also (recursively) on
--       any composite type which has a component for which Has_Timing_Event
--       is set. Used for the No_Local_Timing_Event restriction.

--    Has_Thunks (Flag228)
--       Applies to E_Constant entities marked Is_Tag. True for secondary tag
--       referencing a dispatch table whose contents are pointers to thunks.

--    Has_Unchecked_Union (Flag123) [base type only]
--       Defined in all type entities. Set on unchecked unions themselves
--       and (recursively) on any composite type which has a component for
--       which Has_Unchecked_Union is set. The meaning is that a comparison
--       operation or 'Valid_Scalars reference for the type is not permitted.
--       Note that the flag is not set on access types, even if they designate
--       an object that has the flag Has_Unchecked_Union set.

--    Has_Unknown_Discriminants (Flag72)
--       Defined in all entities. Set for types with unknown discriminants.
--       Types can have unknown discriminants either from their declaration or
--       through type derivation. The use of this flag exactly meets the spec
--       in RM 3.7(26). Note that all class-wide types are considered to have
--       unknown discriminants. Note that both flags Has_Discriminants and
--       Has_Unknown_Discriminants may be true for a type. Class-wide types and
--       their subtypes have unknown discriminants and can have declared ones
--       as well. Private types declared with unknown discriminants may have a
--       full view that has explicit discriminants, and both flag will be set
--       on the partial view, to ensure that discriminants are properly
--       inherited in certain contexts.

--    Has_Visible_Refinement (Flag263)
--       Defined in E_Abstract_State entities. Set when a state has at least
--       one refinement constituent and analysis is in the region between
--       pragma Refined_State and the end of the package body declarations.

--    Has_Volatile_Components (Flag87) [implementation base type only]
--       Defined in all types and objects. Set only for an array type or array
--       object if a valid pragma Volatile_Components or a valid pragma
--       Atomic_Components applies to the type or object. Note that in the case
--       of an object, this flag is only set on the object if there was an
--       explicit pragma for the object. In other words, the proper test for
--       whether an object has volatile components is to see if either the
--       object or its base type has this flag set. Note that in the case of a
--       type the pragma will be chained to the rep item chain of the first
--       subtype in the usual manner.

--    Has_Xref_Entry (Flag182)
--       Defined in all entities. Set if an entity has an entry in the Xref
--       information generated in ali files. This is true for all source
--       entities in the extended main source file. It is also true of entities
--       in other packages that are referenced directly or indirectly from the
--       main source file (indirect reference occurs when the main source file
--       references an entity with a type reference. See package Lib.Xref for
--       further details).

--    Hiding_Loop_Variable (Node8)
--       Defined in variables. Set only if a variable of a discrete type is
--       hidden by a loop variable in the same local scope, in which case
--       the Hiding_Loop_Variable field of the hidden variable points to
--       the E_Loop_Parameter entity doing the hiding. Used in processing
--       warning messages if the hidden variable turns out to be unused
--       or is referenced without being set.

--    Hidden_In_Formal_Instance (Elist30)
--       Defined on actuals for formal packages. Entities on the list are
--       formals that are hidden outside of the formal package when this
--       package is not declared with a box, or the formal itself is not
--       defaulted (see RM 12.7 (10)). Their visibility is restored on exit
--       from the current generic, because the actual for the formal package
--       may be used subsequently in the current unit.

--    Homonym (Node4)
--       Defined in all entities. Link for list of entities that have the
--       same source name and that are declared in the same or enclosing
--       scopes. Homonyms in the same scope are overloaded. Used for name
--       resolution and for the generation of debugging information.

--    Ignore_SPARK_Mode_Pragmas (Flag301)
--       Present in concurrent type, entry, operator, [generic] package,
--       package body, [generic] subprogram, and subprogram body entities.
--       Set when the entity appears in an instance subject to SPARK_Mode
--       "off" and indicates that all SPARK_Mode pragmas found within must
--       be ignored.

--    Implementation_Base_Type (synthesized)
--       Applies to all entities. For types, similar to Base_Type, but never
--       returns a private type when applied to a non-private type. Instead in
--       this case, it always returns the Underlying_Type of the base type, so
--       that we still have a concrete type. For entities other than types,
--       returns the entity unchanged.

--    Import_Pragma (Node35)
--       Defined in subprogram entities. Set if a valid pragma Import or pragma
--       Import_Function or pragma Import_Procedure applies to the subprogram,
--       in which case this field points to the pragma (we can't use the normal
--       Rep_Item chain mechanism, because a single pragma Import can apply
--       to multiple subprogram entities).

--    In_Package_Body (Flag48)
--       Defined in package entities. Set on the entity that denotes the
--       package (the defining occurrence of the package declaration) while
--       analyzing and expanding the package body. Reset on completion of
--       analysis/expansion.

--    In_Private_Part (Flag45)
--       Defined in all entities. Can be set only in package entities and
--       objects. For package entities, this flag is set to indicate that the
--       private part of the package is being analyzed. The flag is reset at
--       the end of the package declaration. For objects it indicates that the
--       declaration of the object occurs in the private part of a package.

--    Incomplete_Actuals (Elist24)
--       Defined on package entities that are instances. Indicates the actuals
--       types in the instantiation that are limited views. If this list is
--       not empty, the instantiation, which appears in a package declaration,
--       is relocated to the corresponding package body, which must have a
--       corresponding nonlimited with_clause.

--    Initialization_Statements (Node28)
--       Defined in constants and variables. For a composite object initialized
--       initialized with an aggregate that has been converted to a sequence
--       of assignments, points to a block statement containing the
--       assignments.

--    Inner_Instances (Elist23)
--       Defined in generic units. Contains element list of units that are
--       instantiated within the given generic. Used to diagnose circular
--       instantiations.

--    Interface_Alias (Node25)
--       Defined in subprograms that cover a primitive operation of an abstract
--       interface type. Can be set only if the Is_Hidden flag is also set,
--       since such entities are always hidden. Points to its associated
--       interface subprogram. It is used to register the subprogram in
--       secondary dispatch table of the interface (Ada 2005: AI-251).

--    Interface_Name (Node21)
--       Defined in constants, variables, exceptions, functions, procedures,
--       and packages. Set to Empty unless an export, import, or interface name
--       pragma has explicitly specified an external name, in which case it
--       references an N_String_Literal node for the specified external name.
--       Note that if this field is Empty, and Is_Imported or Is_Exported is
--       set, then the default interface name is the name of the entity, cased
--       in a manner that is appropriate to the system in use. Note that
--       Interface_Name is ignored if an address clause is present (since it
--       is meaningless in this case).

--    Interfaces (Elist25)
--       Defined in record types and subtypes. List of abstract interfaces
--       implemented by a tagged type that are not already implemented by the
--       ancestors (Ada 2005: AI-251).

--    Invariants_Ignored (Flag308)
--       Defined on all types. Indicates whether the type declaration is in
--       a context where Assertion_Policy is Ignore, in which case no checks
--       (static or dynamic) must be generated for objects of the type.

--    Invariant_Procedure (synthesized)
--       Defined in types and subtypes. Set for private types and their full
--       views if one or more [class-wide] invariants apply to the type, or
--       when the type inherits class-wide invariants from a parent type or
--       an interface, or when the type is an array and its component type is
--       subject to an invariant, or when the type is record and contains a
--       component subject to an invariant (property is recursive). Points to
--       to the entity for a procedure which checks all these invariants. The
--       invariant procedure takes a single argument of the given type, and
--       returns if the invariant holds, or raises exception Assertion_Error
--       with an appropriate message if it does not hold. This attribute is
--       defined but always Empty for private subtypes.

--       Note: the reason this is marked as a synthesized attribute is that the
--       way this is stored is as an element of the Subprograms_For_Type field.

--    In_Use (Flag8)
--       Defined in packages and types. Set when analyzing a use clause for
--       the corresponding entity. Reset at end of corresponding declarative
--       part. The flag on a type is also used to determine the visibility of
--       the primitive operators of the type.

--    Is_Abstract_Subprogram (Flag19)
--       Defined in all subprograms and entries. Set for abstract subprograms.
--       Always False for enumeration literals and entries. See also
--       Requires_Overriding.

--    Is_Abstract_Type (Flag146)
--       Defined in all types. Set for abstract types.

--    Is_Access_Constant (Flag69)
--       Defined in access types and subtypes. Indicates that the keyword
--       constant was present in the access type definition.

--    Is_Access_Protected_Subprogram_Type (synthesized)
--       Applies to all types, true for named and anonymous access to
--       protected subprograms.

--    Is_Access_Type (synthesized)
--       Applies to all entities, true for access types and subtypes

--    Is_Activation_Record (Flag305)
--       Applies to E_In_Parameters generated in Exp_Unst for nested
--       subprograms, to mark the added formal that carries the activation
--       record created in the enclosing subprogram.

--    Is_Actual_Subtype (Flag293)
--       Defined on all types, true for the generated constrained subtypes
--       that are built for unconstrained composite actuals.

--    Is_Ada_2005_Only (Flag185)
--       Defined in all entities, true if a valid pragma Ada_05 or Ada_2005
--       applies to the entity which specifically names the entity, indicating
--       that the entity is Ada 2005 only. Note that this flag is not set if
--       the entity is part of a unit compiled with the normal no-argument form
--       of pragma Ada_05 or Ada_2005.

--    Is_Ada_2012_Only (Flag199)
--       Defined in all entities, true if a valid pragma Ada_12 or Ada_2012
--       applies to the entity which specifically names the entity, indicating
--       that the entity is Ada 2012 only. Note that this flag is not set if
--       the entity is part of a unit compiled with the normal no-argument form
--       of pragma Ada_12 or Ada_2012.

--    Is_Aliased (Flag15)
--       Defined in all entities. Set for objects and types whose declarations
--       carry the keyword aliased, and on record components that have the
--       keyword. For Ada 2012, also applies to formal parameters.

--    Is_Array_Type (synthesized)
--       Applies to all entities, true for array types and subtypes

--    Is_Asynchronous (Flag81)
--       Defined in all type entities and in procedure entities. Set
--       if a pragma Asynchronous applies to the entity.

--    Is_Atomic (Flag85)
--       Defined in all type entities, and also in constants, components, and
--       variables. Set if a pragma Atomic or Shared applies to the entity.
--       In the case of private and incomplete types, this flag is set in
--       both the partial view and the full view.

--    Is_Atomic_Or_VFA (synth)
--       Defined in all type entities, and also in constants, components and
--       variables. Set if a pragma Atomic or Shared or Volatile_Full_Access
--       applies to the entity. For many purposes VFA objects should be treated
--       the same as Atomic objects, and this predicate is intended for that
--       usage. In the case of private and incomplete types, the predicate
--       applies to both the partial view and the full view.

--    Is_Base_Type (synthesized)
--       Applies to type and subtype entities. True if entity is a base type.

--    Is_Bit_Packed_Array (Flag122) [implementation base type only]
--       Defined in all entities. This flag is set for a packed array type that
--       is bit-packed (i.e. the component size is known by the front end and
--       is in the range 1-63 but not a multiple of 8). Is_Packed is always set
--       if Is_Bit_Packed_Array is set, but it is possible for Is_Packed to be
--       set without Is_Bit_Packed_Array if the component size is not known by
--       the front-end or for the case of an array having one or more index
--       types that are enumeration types with non-standard representation.

--    Is_Boolean_Type (synthesized)
--       Applies to all entities, true for boolean types and subtypes,
--       i.e. Standard.Boolean and all types ultimately derived from it.

--    Is_Called (Flag102)
--       Defined in subprograms and packages. Set if a subprogram is called
--       from the unit being compiled or a unit in the closure. Also set for
--       a package that contains called subprograms. Used only for inlining.

--    Is_Character_Type (Flag63)
--       Defined in all entities. Set for character types and subtypes,
--       i.e. enumeration types that have at least one character literal.

--    Is_Checked_Ghost_Entity (Flag277)
--       Applies to all entities. Set for abstract states, [generic] packages,
--       [generic] subprograms, components, discriminants, formal parameters,
--       objects, package bodies, subprogram bodies, and [sub]types subject to
--       pragma Ghost or inherit "ghostness" from an enclosing construct, and
--       subject to Assertion_Policy Ghost => Check.

--    Is_Child_Unit (Flag73)
--       Defined in all entities. Set only for defining entities of program
--       units that are child units (but False for subunits).

--    Is_Class_Wide_Clone (Flag290)
--       Defined on subprogram entities. Set for subprograms built in order
--       to implement properly the inheritance of class-wide pre- or post-
--       conditions when the condition contains calls to other primitives
--       of the ancestor type. Used to implement AI12-0195.

--    Is_Class_Wide_Equivalent_Type (Flag35)
--       Defined in record types and subtypes. Set to True, if the type acts
--       as a class-wide equivalent type, i.e. the Equivalent_Type field of
--       some class-wide subtype entity references this record type.

--    Is_Class_Wide_Type (synthesized)
--       Applies to all entities, true for class wide types and subtypes

--    Is_Compilation_Unit (Flag149)
--       Defined in all entities. Set if the entity is a package or subprogram
--       entity for a compilation unit other than a subunit (since we treat
--       subunits as part of the same compilation operation as the ultimate
--       parent, we do not consider them to be separate units for this flag).

--    Is_Completely_Hidden (Flag103)
--       Defined on discriminants. Only set on girder discriminants of
--       untagged types. When set, the entity is a girder discriminant of a
--       derived untagged type which is not directly visible in the derived
--       type because the derived type or one of its ancestors have renamed the
--       discriminants in the root type. Note: there are girder discriminants
--       which are not Completely_Hidden (e.g. discriminants of a root type).

--    Is_Composite_Type (synthesized)
--       Applies to all entities, true for all composite types and subtypes.
--       Either Is_Composite_Type or Is_Elementary_Type (but not both) is true
--       of any type.

--    Is_Concurrent_Record_Type (Flag20)
--       Defined in record types and subtypes. Set if the type was created
--       by the expander to represent a task or protected type. For every
--       concurrent type, such as record type is constructed, and task and
--       protected objects are instances of this record type at run time
--       (The backend will replace declarations of the concurrent type using
--       the declarations of the corresponding record type). See Exp_Ch9 for
--       further details.

--    Is_Concurrent_Type (synthesized)
--       Applies to all entities, true for task types and subtypes and for
--       protected types and subtypes.

--    Is_Constant_Object (synthesized)
--       Applies to all entities, true for E_Constant, E_Loop_Parameter, and
--       E_In_Parameter entities.

--    Is_Constrained (Flag12)
--       Defined in types or subtypes which may have index, discriminant
--       or range constraint (i.e. array types and subtypes, record types
--       and subtypes, string types and subtypes, and all numeric types).
--       Set if the type or subtype is constrained.

--    Is_Constr_Subt_For_U_Nominal (Flag80)
--       Defined in all types and subtypes. Set only for the constructed
--       subtype of an object whose nominal subtype is unconstrained. Note
--       that the constructed subtype itself will be constrained.

--    Is_Constr_Subt_For_UN_Aliased (Flag141)
--       Defined in all types and subtypes. This flag can be set only if
--       Is_Constr_Subt_For_U_Nominal is also set. It indicates that in
--       addition the object concerned is aliased. This flag is used by
--       the backend to determine whether a template must be constructed.

--    Is_Constructor (Flag76)
--       Defined in function and procedure entities. Set if a pragma
--       CPP_Constructor applies to the subprogram.

--    Is_Controlled_Active (Flag42) [base type only]
--       Defined in all type entities. Indicates that the type is controlled,
--       i.e. is either a descendant of Ada.Finalization.Controlled or of
--       Ada.Finalization.Limited_Controlled.

--    Is_Controlled (synth) [base type only]
--       Defined in all type entities. Set if Is_Controlled_Active is set for
--       the type, and Disable_Controlled is not set.

--    Is_Controlling_Formal (Flag97)
--       Defined in all Formal_Kind entities. Marks the controlling parameters
--       of dispatching operations.

--    Is_CPP_Class (Flag74)
--       Defined in all type entities, set only for tagged types to which a
--       valid pragma Import (CPP, ...) or pragma CPP_Class has been applied.

--    Is_Decimal_Fixed_Point_Type (synthesized)
--       Applies to all type entities, true for decimal fixed point
--       types and subtypes.

--    Is_Descendant_Of_Address (Flag223)
--       Defined in all entities. True if the entity is type System.Address,
--       or (recursively) a subtype or derived type of System.Address.

--    Is_DIC_Procedure (Flag132)
--       Defined in functions and procedures. Set for a generated procedure
--       which verifies the assumption of pragma Default_Initial_Condition at
--       run time.

--    Is_Discrete_Or_Fixed_Point_Type (synthesized)
--       Applies to all entities, true for all discrete types and subtypes
--       and all fixed-point types and subtypes.

--    Is_Discrete_Type (synthesized)
--       Applies to all entities, true for all discrete types and subtypes

--    Is_Discrim_SO_Function (Flag176)
--       Defined in all entities. Set only in E_Function entities that Layout
--       creates to compute discriminant-dependent dynamic size/offset values.

--    Is_Discriminant_Check_Function (Flag264)
--       Defined in all entities. Set only in E_Function entities for functions
--       created to do discriminant checks.

--    Is_Discriminal (synthesized)
--       Applies to all entities, true for renamings of discriminants. Such
--       entities appear as constants or IN parameters.

--    Is_Dispatch_Table_Entity (Flag234)
--       Applies to all entities. Set to indicate to the backend that this
--       entity is associated with a dispatch table.

--    Is_Dispatching_Operation (Flag6)
--       Defined in all entities. Set for procedures, functions, generic
--       procedures, and generic functions if the corresponding operation
--       is dispatching.

--    Is_Dynamic_Scope (synthesized)
--       Applies to all Entities. Returns True if the entity is a dynamic
--       scope (i.e. a block, subprogram, task_type, entry or extended return
--       statement).

--    Is_Elaboration_Checks_OK_Id (Flag148)
--       Defined in elaboration targets (see terminology in Sem_Elab). Set when
--       the target appears in a region which is subject to elabled elaboration
--       checks. Such targets are allowed to generate run-time conditional ABE
--       checks or guaranteed ABE failures.

--    Is_Elaboration_Target (synthesized)
--       Applies to all entities, True only for elaboration targets (see the
--       terminology in Sem_Elab).

--    Is_Elaboration_Warnings_OK_Id (Flag304)
--       Defined in elaboration targets (see terminology in Sem_Elab). Set when
--       the target appears in a region with elaboration warnings enabled.

--    Is_Elementary_Type (synthesized)
--       Applies to all entities, True for all elementary types and subtypes.
--       Either Is_Composite_Type or Is_Elementary_Type (but not both) is true
--       of any type.

--    Is_Eliminated (Flag124)
--       Defined in type entities, subprogram entities, and object entities.
--       Indicates that the corresponding entity has been eliminated by use
--       of pragma Eliminate. Also used to mark subprogram entities whose
--       declaration and body are within unreachable code that is removed.

--    Is_Entry (synthesized)
--       Applies to all entities, True only for entry and entry family
--       entities and False for all other entity kinds.

--    Is_Entry_Formal (Flag52)
--       Defined in all entities. Set only for entry formals (which can only
--       be in, in-out or out parameters). This flag is used to speed up the
--       test for the need to replace references in Exp_Ch2.

--    Is_Entry_Wrapper (Flag297)
--       Defined on wrappers created for entries that have precondition aspects

--    Is_Enumeration_Type (synthesized)
--       Defined in all entities, true for enumeration types and subtypes

--    Is_Exception_Handler (Flag286)
--       Defined in blocks. Set if the block serves only as a scope of an
--       exception handler with a choice parameter. Such a block does not
--       physically appear in the tree.

--    Is_Exported (Flag99)
--       Defined in all entities. Set if the entity is exported. For now we
--       only allow the export of constants, exceptions, functions, procedures
--       and variables, but that may well change later on. Exceptions can only
--       be exported in the Java VM implementation of GNAT, which is retired.

--    Is_External_State (synthesized)
--       Applies to all entities, true for abstract states that are subject to
--       option External or Synchronous.

--    Is_Finalized_Transient (Flag252)
--       Defined in constants, loop parameters of generalized iterators, and
--       variables. Set when a transient object has been finalized by one of
--       the transient finalization mechanisms. The flag prevents the double
--       finalization of the object.

--    Is_Finalizer (synthesized)
--       Applies to all entities, true for procedures containing finalization
--       code to process local or library level objects.

--    Is_First_Subtype (Flag70)
--       Defined in all entities. True for first subtypes (RM 3.2.1(6)),
--       i.e. the entity in the type declaration that introduced the type.
--       This may be the base type itself (e.g. for record declarations and
--       enumeration type declarations), or it may be the first subtype of
--       an anonymous base type (e.g. for integer type declarations or
--       constrained array declarations).

--    Is_Fixed_Point_Type (synthesized)
--       Applies to all entities, true for decimal and ordinary fixed
--       point types and subtypes.

--    Is_Floating_Point_Type (synthesized)
--       Applies to all entities, true for float types and subtypes

--    Is_Formal (synthesized)
--       Applies to all entities, true for IN, IN OUT and OUT parameters

--    Is_Formal_Object (synthesized)
--       Applies to all entities, true for generic IN and IN OUT parameters

--    Is_Formal_Subprogram (Flag111)
--       Defined in all entities. Set for generic formal subprograms.

--    Is_Frozen (Flag4)
--       Defined in all type and subtype entities. Set if type or subtype has
--       been frozen.

--    Is_Generic_Actual_Subprogram (Flag274)
--       Defined on functions and procedures. Set on the entity of the renaming
--       declaration created within an instance for an actual subprogram.
--       Used to generate constraint checks on calls to these subprograms, even
--       within an instance of a predefined run-time unit, in which checks
--       are otherwise suppressed.
--
--       The flag is also set on the entity of the expression function created
--       within an instance, for a function that has external axiomatization,
--       for use in GNATprove mode.

--    Is_Generic_Actual_Type (Flag94)
--       Defined in all type and subtype entities. Set in the subtype
--       declaration that renames the generic formal as a subtype of the
--       actual. Guarantees that the subtype is not static within the instance.
--       Also used during analysis of an instance, to simplify resolution of
--       accidental overloading that occurs when different formal types get the
--       same actual.

--    Is_Generic_Instance (Flag130)
--       Defined in all entities. Set to indicate that the entity is an
--       instance of a generic unit, or a formal package (which is an instance
--       of the template).

--    Is_Generic_Subprogram (synthesized)
--       Applies to all entities. Yields True for a generic subprogram
--       (generic function, generic subprogram), False for all other entities.

--    Is_Generic_Type (Flag13)
--       Defined in all entities. Set for types which are generic formal types.
--       Such types have an Ekind that corresponds to their classification, so
--       the Ekind cannot be used to identify generic formal types.

--    Is_Generic_Unit (synthesized)
--       Applies to all entities. Yields True for a generic unit (generic
--       package, generic function, generic procedure), and False for all
--       other entities.

--    Is_Ghost_Entity (synthesized)
--       Applies to all entities. Yields True for abstract states, [generic]
--       packages, [generic] subprograms, components, discriminants, formal
--       parameters, objects, package bodies, subprogram bodies, and [sub]types
--       subject to pragma Ghost or those that inherit the Ghost property from
--       an enclosing construct.

--    Is_Hidden (Flag57)
--       Defined in all entities. Set for all entities declared in the
--       private part or body of a package. Also marks generic formals of a
--       formal package declared without a box. For library level entities,
--       this flag is set if the entity is not publicly visible. This flag
--       is reset when compiling the body of the package where the entity
--       is declared, when compiling the private part or body of a public
--       child unit, and when compiling a private child unit (see Install_
--       Private_Declaration in sem_ch7).

--    Is_Hidden_Non_Overridden_Subpgm (Flag2)
--       Defined in all entities. Set for implicitly declared subprograms
--       that require overriding or are null procedures, and are hidden by
--       a non-fully conformant homograph with the same characteristics
--       (Ada RM 8.3 12.3/2).

--    Is_Hidden_Open_Scope (Flag171)
--       Defined in all entities. Set for a scope that contains the
--       instantiation of a child unit, and whose entities are not visible
--       during analysis of the instance.

--    Is_Ignored_Ghost_Entity (Flag278)
--       Applies to all entities. Set for abstract states, [generic] packages,
--       [generic] subprograms, components, discriminants, formal parameters,
--       objects, package bodies, subprogram bodies, and [sub]types subject to
--       pragma Ghost or inherit "ghostness" from an enclosing construct, and
--       subject to Assertion_Policy Ghost => Ignore.

--    Is_Ignored_Transient (Flag295)
--       Defined in constants, loop parameters of generalized iterators, and
--       variables. Set when a transient object must be processed by one of
--       the transient finalization mechanisms. Once marked, a transient is
--       intentionally ignored by the general finalization mechanism because
--       its clean up actions are context specific.

--    Is_Immediately_Visible (Flag7)
--       Defined in all entities. Set if entity is immediately visible, i.e.
--       is defined in some currently open scope (RM 8.3(4)).

--    Is_Implementation_Defined (Flag254)
--       Defined in all entities. Set if a pragma Implementation_Defined is
--       applied to the pragma. Used to mark all implementation defined
--       identifiers in standard library packages, and to implement the
--       restriction No_Implementation_Identifiers.

--    Is_Imported (Flag24)
--       Defined in all entities. Set if the entity is imported. For now we
--       only allow the import of exceptions, functions, procedures, packages,
--       constants, and variables. Exceptions, packages, and types can only be
--       imported in the Java VM implementation, which is retired.

--    Is_Incomplete_Or_Private_Type (synthesized)
--       Applies to all entities, true for private and incomplete types

--    Is_Incomplete_Type (synthesized)
--       Applies to all entities, true for incomplete types and subtypes

--    Is_Independent (Flag268)
--       Defined in all types and objects. Set if a valid pragma or aspect
--       Independent applies to the entity, or for a component if a valid
--       pragma or aspect Independent_Components applies to the enclosing
--       record type. Also set if a pragma Shared or pragma Atomic applies to
--       the entity, or if the declaration of the entity carries the Aliased
--       keyword. For Ada 2012, also applies to formal parameters. In the
--       case of private and incomplete types, this flag is set in both the
--       partial view and the full view.

--    Is_Initial_Condition_Procedure (Flag302)
--       Defined in functions and procedures. Set for a generated procedure
--       which verifies the assumption of pragma Initial_Condition at run time.

--    Is_Inlined (Flag11)
--       Defined in all entities. Set for functions and procedures which are
--       to be inlined. For subprograms created during expansion, this flag
--       may be set directly by the expander to request inlining. Also set
--       for packages that contain inlined subprograms, whose bodies must be
--       be compiled. Is_Inlined is also set on generic subprograms and is
--       inherited by their instances. It is also set on the body entities
--       of inlined subprograms. See also Has_Pragma_Inline.

--    Is_Inlined_Always (Flag1)
--       Defined in subprograms. Set for functions and procedures which are
--       always inlined in GNATprove mode. GNATprove uses this flag to know
--       when a body does not need to be analyzed. The value of this flag is
--       only meaningful if Body_To_Inline is not Empty for the subprogram.

--    Is_Instantiated (Flag126)
--       Defined in generic packages and generic subprograms. Set if the unit
--       is instantiated from somewhere in the extended main source unit. This
--       flag is used to control warnings about the unit being uninstantiated.
--       Also set in a package that is used as an actual for a generic package
--       formal in an instantiation. Also set on a parent instance, in the
--       instantiation of a child, which is implicitly declared in the parent.

--    Is_Integer_Type (synthesized)
--       Applies to all entities, true for integer types and subtypes

--    Is_Interface (Flag186)
--       Defined in record types and subtypes. Set to indicate that the current
--       entity corresponds to an abstract interface. Because abstract
--       interfaces are conceptually a special kind of abstract tagged type
--       we represent them by means of tagged record types and subtypes
--       marked with this attribute. This allows us to reuse most of the
--       compiler support for abstract tagged types to implement interfaces
--       (Ada 2005: AI-251).

--    Is_Internal (Flag17)
--       Defined in all entities. Set to indicate an entity created during
--       semantic processing (e.g. an implicit type, or a temporary). The
--       current uses of this flag are:
--
--         1) Internal entities (such as temporaries generated for the result
--         of an inlined function call or dummy variables generated for the
--         debugger). Set to indicate that they need not be initialized, even
--         when scalars are initialized or normalized.
--
--         2) Predefined primitives of tagged types. Set to mark that they
--         have specific properties: first they are primitives even if they
--         are not defined in the type scope (the freezing point is not
--         necessarily in the same scope), and second the predefined equality
--         can be overridden by a user-defined equality, no body will be
--         generated in this case.
--
--         3) Object declarations generated by the expander that are implicitly
--         imported or exported so that they can be marked in Sprint output.
--
--         4) Internal entities in the list of primitives of tagged types that
--         are used to handle secondary dispatch tables. These entities have
--         also the attribute Interface_Alias.

--    Is_Interrupt_Handler (Flag89)
--       Defined in procedures. Set if a pragma Interrupt_Handler applies
--       to the procedure. The procedure must be parameterless, and on all
--       targets except AAMP it must be a protected procedure.

--    Is_Intrinsic_Subprogram (Flag64)
--       Defined in functions and procedures. It is set if a valid pragma
--       Interface or Import is present for this subprogram specifying
--       convention Intrinsic. Valid means that the name and profile of the
--       subprogram match the requirements of one of the recognized intrinsic
--       subprograms (see package Sem_Intr for details). Note: the value of
--       Convention for such an entity will be set to Convention_Intrinsic,
--       but it is the setting of Is_Intrinsic_Subprogram, NOT simply having
--       convention set to intrinsic, which causes intrinsic code to be
--       generated.

--    Is_Invariant_Procedure (Flag257)
--       Defined in functions and procedures. Set for a generated invariant
--       procedure which verifies the invariants of both the partial and full
--       views of a private type or private extension as well as any inherited
--       class-wide invariants from parent types or interfaces.

--    Is_Itype (Flag91)
--       Defined in all entities. Set to indicate that a type is an Itype,
--       which means that the declaration for the type does not appear
--       explicitly in the tree. Instead the backend will elaborate the type
--       when it is first used. Has_Delayed_Freeze can be set for Itypes, and
--       the meaning is that the first use (the one which causes the type to be
--       defined) will be the freeze node. Note that an important restriction
--       on Itypes is that the first use of such a type (the one that causes it
--       to be defined) must be in the same scope as the type.

--    Is_Known_Non_Null (Flag37)
--       Defined in all entities. Relevant (and can be set) only for
--       objects of an access type. It is set if the object is currently
--       known to have a non-null value (meaning that no access checks
--       are needed). The indication can for example come from assignment
--       of an access parameter or an allocator whose value is known non-null.
--
--       Note: this flag is set according to the sequential flow of the
--       program, watching the current value of the variable. However, this
--       processing can miss cases of changing the value of an aliased or
--       constant object, so even if this flag is set, it should not be
--       believed if the variable is aliased or volatile. It would be a
--       little neater to avoid the flag being set in the first place in
--       such cases, but that's trickier, and there is only one place that
--       tests the value anyway.
--
--       The flag is dynamically set and reset as semantic analysis and
--       expansion proceeds. Its value is meaningless once the tree is
--       fully constructed, since it simply indicates the last state.
--       Thus this flag has no meaning to the backend.

--    Is_Known_Null (Flag204)
--       Defined in all entities. Relevant (and can be set ) only for
--       objects of an access type. It is set if the object is currently known
--       to have a null value (meaning that a dereference will surely raise
--       constraint error exception). The indication can come from an
--       assignment or object declaration.
--
--       The comments above about sequential flow and aliased and volatile for
--       the Is_Known_Non_Null flag apply equally to the Is_Known_Null flag.

--    Is_Known_Valid (Flag170)
--       Defined in all entities. Relevant for types (and subtype) and
--       for objects (and enumeration literals) of a discrete type.
--
--       The purpose of this flag is to implement the requirement stated
--       in (RM 13.9.1(9-11)) which require that the use of possibly invalid
--       values may not cause programs to become erroneous. See the function
--       Checks.Expr_Known_Valid for further details. Note that the setting
--       is conservative, in the sense that if the flag is set, it must be
--       right. If the flag is not set, nothing is known about the validity.
--
--       For enumeration literals, the flag is always set, since clearly
--       an enumeration literal represents a valid value. Range checks
--       where necessary will ensure that this valid value is appropriate.
--
--       For objects, the flag indicates the state of knowledge about the
--       current value of the object. This may be modified during expansion,
--       and thus the final value is not relevant to the backend.
--
--       For types and subtypes, the flag is set if all possible bit patterns
--       of length Object_Size (i.e. Esize of the type) represent valid values
--       of the type. In general for such types, all values are valid, the
--       only exception being the case where an object of the type has an
--       explicit size that is greater than Object_Size.
--
--       For non-discrete objects, the setting of the Is_Known_Valid flag is
--       not defined, and is not relevant, since the considerations of the
--       requirement in (RM 13.9.1(9-11)) do not apply.
--
--       The flag is dynamically set and reset as semantic analysis and
--       expansion proceeds. Its value is meaningless once the tree is
--       fully constructed, since it simply indicates the last state.
--       Thus this flag has no meaning to the backend.

--    Is_Limited_Composite (Flag106)
--       Defined in all entities. Set for composite types that have a limited
--       component. Used to enforce the rule that operations on the composite
--       type that depend on the full view of the component do not become
--       visible until the immediate scope of the composite type itself
--       (RM 7.3.1 (5)).

--    Is_Limited_Interface (Flag197)
--       Defined in record types and subtypes. True for interface types, if
--       interface is declared limited, task, protected, or synchronized, or
--       is derived from a limited interface.

--    Is_Limited_Record (Flag25)
--       Defined in all entities. Set to true for record (sub)types if the
--       record is declared to be limited. Note that this flag is not set
--       simply because some components of the record are limited.

--    Is_Local_Anonymous_Access (Flag194)
--       Defined in access types. Set for an anonymous access type to indicate
--       that the type is created for a record component with an access
--       definition, an array component, or (pre-Ada 2012) a standalone object.
--       Such anonymous types have an accessibility level equal to that of the
--       declaration in which they appear, unlike the anonymous access types
--       that are created for access parameters, access discriminants, and
--       (as of Ada 2012) stand-alone objects.

--    Is_Loop_Parameter (Flag307)
--       Applies to all entities. Certain loops, in particular "for ... of"
--       loops, get transformed so that the loop parameter is declared by a
--       variable declaration, so the entity is an E_Variable. This is True for
--       such E_Variables; False otherwise.

--    Is_Machine_Code_Subprogram (Flag137)
--       Defined in subprogram entities. Set to indicate that the subprogram
--       is a machine code subprogram (i.e. its body includes at least one
--       code statement). Also indicates that all necessary semantic checks
--       as required by RM 13.8(3) have been performed.

--    Is_Modular_Integer_Type (synthesized)
--       Applies to all entities. True if entity is a modular integer type

--    Is_Non_Static_Subtype (Flag109)
--       Defined in all type and subtype entities. It is set in some (but not
--       all) cases in which a subtype is known to be non-static. Before this
--       flag was added, the computation of whether a subtype was static was
--       entirely synthesized, by looking at the bounds, and the immediate
--       subtype parent. However, this method does not work for some Itypes
--       that have no parent set (and the only way to find the immediate
--       subtype parent is to go through the tree). For now, this flag is set
--       conservatively, i.e. if it is set then for sure the subtype is non-
--       static, but if it is not set, then the type may or may not be static.
--       Thus the test for a static subtype is that this flag is clear AND that
--       the bounds are static AND that the parent subtype (if available to be
--       tested) is static. Eventually we should make sure this flag is always
--       set right, at which point, these comments can be removed, and the
--       tests for static subtypes greatly simplified.

--    Is_Null_Init_Proc (Flag178)
--       Defined in procedure entities. Set for generated init proc procedures
--       (used to initialize composite types), if the code for the procedure
--       is null (i.e. is a return and nothing else). Such null initialization
--       procedures are generated in case some client is compiled using the
--       Initialize_Scalars pragma, generating a call to this null procedure,
--       but there is no need to call such procedures within a compilation
--       unit, and this flag is used to suppress such calls.

--    Is_Null_State (synthesized)
--       Applies to all entities, true for an abstract state declared with
--       keyword null.

--    Is_Numeric_Type (synthesized)
--       Applies to all entities, true for all numeric types and subtypes
--       (integer, fixed, float).

--    Is_Object (synthesized)
--       Applies to all entities, true for entities representing objects,
--       including generic formal parameters.

--    Is_Obsolescent (Flag153)
--       Defined in all entities. Set for any entity to which a valid pragma
--       or aspect Obsolescent applies.

--    Is_Only_Out_Parameter (Flag226)
--       Defined in formal parameter entities. Set if this parameter is the
--       only OUT parameter for this formal part. If there is more than one
--       out parameter, or if there is some other IN OUT parameter then this
--       flag is not set in any of them. Used in generation of warnings.

--    Is_Ordinary_Fixed_Point_Type (synthesized)
--       Applies to all entities, true for ordinary fixed point types and
--       subtypes.

--    Is_Package_Body_Entity (Flag160)
--       Defined in all entities. Set for entities defined at the top level
--       of a package body. Used to control externally generated names.

--    Is_Package_Or_Generic_Package (synthesized)
--       Applies to all entities. True for packages and generic packages.
--       False for all other entities.

--    Is_Packed (Flag51) [implementation base type only]
--       Defined in all type entities. This flag is set only for record and
--       array types which have a packed representation. There are four cases
--       which cause packing:
--
--         1. Explicit use of pragma Pack to pack a record.
--         2. Explicit use of pragma Pack to pack an array.
--         3. Setting Component_Size of an array to a packable value.
--         4. Indexing an array with a non-standard enumeration type.
--
--       For records, Is_Packed is always set if Has_Pragma_Pack is set, and
--       can also be set on its own in a derived type which inherited its
--       packed status.
--
--       For arrays, Is_Packed is set if either Has_Pragma_Pack is set and the
--       component size is either not known at compile time or known but not
--       8/16/32/64 bits, or a Component_Size clause exists and the specified
--       value is smaller than 64 bits but not 8/16/32, or if the array has one
--       or more index types that are enumeration types with a non-standard
--       representation (in GNAT, we store such arrays compactly, using the Pos
--       of the enumeration type value). As for the case of records, Is_Packed
--       can be set on its own for a derived type.

--       Before an array type is frozen, Is_Packed will always be set if
--       Has_Pragma_Pack is set. Before the freeze point, it is not possible
--       to know the component size, since the component type is not frozen
--       until the array type is frozen. Thus Is_Packed for an array type
--       before it is frozen means that packed is required. Then if it turns
--       out that the component size doesn't require packing, the Is_Packed
--       flag gets turned off.

--       In the bit-packed array case (i.e. the component size is known by the
--       front end and is in the range 1-63 but not a multiple of 8), then the
--       Is_Bit_Packed_Array flag will be set once the array type is frozen.
--
--    Is_Packed_Array (synth)
--       Applies to all entities, true if entity is for a packed array.

--    Is_Packed_Array_Impl_Type (Flag138)
--       Defined in all entities. This flag is set on the entity for the type
--       used to implement a packed array (either a modular type or a subtype
--       of Packed_Bytes{1,2,4} in the bit-packed array case, a regular array
--       in the non-standard enumeration index case). It is set if and only
--       if the type appears in the Packed_Array_Impl_Type field of some other
--       entity. It is used by the back end to activate the special processing
--       for such types (unchecked conversions that would not otherwise be
--       allowed are allowed for such types). If Is_Packed_Array_Impl_Type is
--       set in an entity, then the Original_Array_Type field of this entity
--       points to the array type for which this is the Packed_Array_Impl_Type.

--    Is_Param_Block_Component_Type (Flag215) [base type only]
--       Defined in access types. Set to indicate that a type is the type of a
--       component of the parameter block record type generated by the compiler
--       for an entry or a select statement. Read by CodePeer.

--    Is_Partial_Invariant_Procedure (Flag292)
--       Defined in functions and procedures. Set for a generated invariant
--       procedure which verifies the invariants of the partial view of a
--       private type or private extension.

--    Is_Potentially_Use_Visible (Flag9)
--       Defined in all entities. Set if entity is potentially use visible,
--       i.e. it is defined in a package that appears in a currently active
--       use clause (RM 8.4(8)). Note that potentially use visible entities
--       are not necessarily use visible (RM 8.4(9-11)).

--    Is_Predicate_Function (Flag255)
--       Present in functions and procedures. Set for generated predicate
--       functions.

--    Is_Predicate_Function_M (Flag256)
--       Present in functions and procedures. Set for special version of
--       predicate function generated for use in membership tests, where
--       raise expressions are transformed to return False.

--    Is_Preelaborated (Flag59)
--       Defined in all entities, set in E_Package and E_Generic_Package
--       entities to which a pragma Preelaborate is applied, and also in
--       all entities within such packages. Note that the fact that this
--       flag is set does not necesarily mean that no elaboration code is
--       generated for the package.

--    Is_Primitive (Flag218)
--       Defined in overloadable entities and in generic subprograms. Set to
--       indicate that this is a primitive operation of some type, which may
--       be a tagged type or an untagged type. Used to verify overriding
--       indicators in bodies.

--    Is_Primitive_Wrapper (Flag195)
--       Defined in functions and procedures created by the expander to serve
--       as an indirection mechanism to overriding primitives of concurrent
--       types, entries and protected procedures.

--    Is_Prival (synthesized)
--       Applies to all entities, true for renamings of private protected
--       components. Such entities appear as constants or variables.

--    Is_Private_Composite (Flag107)
--       Defined in composite types that have a private component. Used to
--       enforce the rule that operations on the composite type that depend
--       on the full view of the component, do not become visible until the
--       immediate scope of the composite type itself (7.3.1 (5)). Both this
--       flag and Is_Limited_Composite are needed.

--    Is_Private_Descendant (Flag53)
--       Defined in entities that can represent library units (packages,
--       functions, procedures). Set if the library unit is itself a private
--       child unit, or if it is the descendant of a private child unit.

--    Is_Private_Primitive (Flag245)
--       Defined in subprograms. Set if the operation is a primitive of a
--       tagged type (procedure or function dispatching on result) whose
--       full view has not been seen. Used in particular for primitive
--       subprograms of a synchronized type declared between the two views
--       of the type, so that the wrapper built for such a subprogram can
--       be given the proper signature.

--    Is_Private_Type (synthesized)
--       Applies to all entities, true for private types and subtypes,
--       as well as for record with private types as subtypes.

--    Is_Protected_Component (synthesized)
--       Applicable to all entities, true if the entity denotes a private
--       component of a protected type.

--    Is_Protected_Interface (synthesized)
--       Defined in types that are interfaces. True if interface is declared
--       protected, or is derived from protected interfaces.

--    Is_Protected_Record_Type (synthesized)
--       Applies to all entities, true if Is_Concurrent_Record_Type is true and
--       Corresponding_Concurrent_Type is a protected type.

--    Is_Protected_Type (synthesized)
--       Applies to all entities, true for protected types and subtypes

--    Is_Public (Flag10)
--       Defined in all entities. Set to indicate that an entity defined in
--       one compilation unit can be referenced from other compilation units.
--       If this reference causes a reference in the generated code, for
--       example in the case of a variable name, then the backend will generate
--       an appropriate external name for use by the linker.

--    Is_Pure (Flag44)
--       Defined in all entities. Set in all entities of a unit to which a
--       pragma Pure is applied except for non-intrinsic imported subprograms,
--       and also set for the entity of the unit itself. In addition, this
--       flag may be set for any other functions or procedures that are known
--       to be side effect free, so in the case of subprograms, the Is_Pure
--       flag may be used by the optimizer to imply that it can assume freedom
--       from side effects (other than those resulting from assignment to Out
--       or In Out parameters, or to objects designated by access parameters).

--    Is_Pure_Unit_Access_Type (Flag189)
--       Defined in access type and subtype entities. Set if the type or
--       subtype appears in a pure unit. Used to give an error message at
--       freeze time if the access type has a storage pool.

--    Is_RACW_Stub_Type (Flag244)
--       Defined in all types, true for the stub types generated for remote
--       access-to-class-wide types.

--    Is_Raised (Flag224)
--       Defined in exception entities. Set if the entity is referenced by a
--       a raise statement.

--    Is_Real_Type (synthesized)
--       Applies to all entities, true for real types and subtypes

--    Is_Record_Type (synthesized)
--       Applies to all entities, true for record types and subtypes,
--       includes class-wide types and subtypes (which are also records).

--    Is_Remote_Call_Interface (Flag62)
--       Defined in all entities. Set in E_Package and E_Generic_Package
--       entities to which a pragma Remote_Call_Interface is applied, and
--       also on entities declared in the visible part of such a package.

--    Is_Remote_Types (Flag61)
--       Defined in all entities. Set in E_Package and E_Generic_Package
--       entities to which a pragma Remote_Types is applied, and also on
--       entities declared in the visible part of the spec of such a package.
--       Also set for types which are generic formal types to which the
--       pragma Remote_Access_Type applies.

--    Is_Renaming_Of_Object (Flag112)
--       Defined in all entities, set only for a variable or constant for
--       which the Renamed_Object field is non-empty and for which the
--       renaming is handled by the front end, by macro substitution of
--       a copy of the (evaluated) name tree whereever the variable is used.

--    Is_Return_Object (Flag209)
--       Defined in all object entities. True if the object is the return
--       object of an extended_return_statement; False otherwise.

--    Is_Safe_To_Reevaluate (Flag249)
--       Defined in all entities. Set in variables that are initialized by
--       means of an assignment statement. When initialized their contents
--       never change and hence they can be seen by the backend as constants.
--       See also Is_True_Constant.

--    Is_Scalar_Type (synthesized)
--       Applies to all entities, true for scalar types and subtypes

--    Is_Shared_Passive (Flag60)
--       Defined in all entities. Set in E_Package and E_Generic_Package
--       entities to which a pragma Shared_Passive is applied, and also in
--       all entities within such packages.

--    Is_Standard_Character_Type (synthesized)
--       Applies to all entities, true for types and subtypes whose root type
--       is one of the standard character types (Character, Wide_Character, or
--       Wide_Wide_Character).

--    Is_Standard_String_Type (synthesized)
--       Applies to all entities, true for types and subtypes whose root
--       type is one of the standard string types (String, Wide_String, or
--       Wide_Wide_String).

--    Is_Static_Type (Flag281)
--       Defined in entities. Only set for (sub)types. If set, indicates that
--       the type is known to be a static type (defined as a discrete type with
--       static bounds, a record all of whose component types are static types,
--       or an array, all of whose bounds are of a static type, and also have
--       a component type that is a static type). See Set_Uplevel_Type for more
--       information on how this flag is used.

--    Is_Statically_Allocated (Flag28)
--       Defined in all entities. This can only be set for exception,
--       variable, constant, and type/subtype entities. If the flag is set,
--       then the variable or constant must be allocated statically rather
--       than on the local stack frame. For exceptions, the meaning is that
--       the exception data should be allocated statically (and indeed this
--       flag is always set for exceptions, since exceptions do not have
--       local scope). For a type, the meaning is that the type must be
--       elaborated at the global level rather than locally. No type marked
--       with this flag may depend on a local variable, or on any other type
--       which does not also have this flag set to True. For a variable or
--       or constant, if the flag is set, then the type of the object must
--       either be declared at the library level, or it must also have the
--       flag set (since to allocate the object statically, its type must
--       also be elaborated globally).

--    Is_String_Type (synthesized)
--       Applies to all type entities. Determines if the given type is a
--       string type, i.e. it is directly a string type or string subtype,
--       or a string slice type, or an array type with one dimension and a
--       component type that is a character type.

--    Is_Subprogram (synthesized)
--       Applies to all entities, true for function, procedure and operator
--       entities.

--    Is_Subprogram_Or_Generic_Subprogram
--       Applies to all entities, true for function procedure and operator
--       entities, and also for the corresponding generic entities.

--    Is_Synchronized_Interface (synthesized)
--       Defined in types that are interfaces. True if interface is declared
--       synchronized, task, or protected, or is derived from a synchronized
--       interface.

--    Is_Synchronized_State (synthesized)
--       Applies to all entities, true for abstract states that are subject to
--       option Synchronous.

--    Is_Tag (Flag78)
--       Defined in E_Component and E_Constant entities. For regular tagged
--       type this flag is set on the tag component (whose name is Name_uTag).
--       For CPP_Class tagged types, this flag marks the pointer to the main
--       vtable (i.e. the one to be extended by derivation).

--    Is_Tagged_Type (Flag55)
--       Defined in all entities, set for an entity that is a tagged type

--    Is_Task_Interface (synthesized)
--       Defined in types that are interfaces. True if interface is declared as
--       a task interface, or if it is derived from task interfaces.

--    Is_Task_Record_Type (synthesized)
--       Applies to all entities, true if Is_Concurrent_Record_Type is true and
--       Corresponding_Concurrent_Type is a task type.

--    Is_Task_Type (synthesized)
--       Applies to all entities. True for task types and subtypes

--    Is_Thunk (Flag225)
--       Defined in all entities. True for subprograms that are thunks: that is
--       small subprograms built by the expander for tagged types that cover
--       interface types. As part of the runtime call to an interface, thunks
--       displace the pointer to the object (pointer named "this" in the C++
--       terminology) from a secondary dispatch table to the primary dispatch
--       table associated with a given tagged type; if the thunk is a function
--       that returns an object which covers an interface type then the thunk
--       displaces the pointer to the object from the primary dispatch table to
--       the secondary dispatch table associated with the interface type. Set
--       by Expand_Interface_Thunk and used by Expand_Call to handle extra
--       actuals associated with accessibility level.

--    Is_Trivial_Subprogram (Flag235)
--       Defined in all entities. Set in subprograms where either the body
--       consists of a single null statement, or the first or only statement
--       of the body raises an exception. This is used for suppressing certain
--       warnings, see Sem_Ch6.Analyze_Subprogram_Body discussion for details.

--    Is_True_Constant (Flag163)
--       Defined in all entities for constants and variables. Set in constants
--       and variables which have an initial value specified but which are
--       never assigned, partially or in the whole. For variables, it means
--       that the variable was initialized but never modified, and hence can be
--       treated as a constant by the code generator. For a constant, it means
--       that the constant was not modified by generated code (e.g. to set a
--       discriminant in an init proc). Assignments by user or generated code
--       will reset this flag. See also Is_Safe_To_Reevaluate.

--    Is_Type (synthesized)
--       Applies to all entities, true for a type entity

--    Is_Unchecked_Union (Flag117) [implementation base type only]
--       Defined in all entities. Set only in record types to which the
--       pragma Unchecked_Union has been validly applied.

--    Is_Underlying_Full_View (Flag298)
--       Defined in all entities. Set for types which represent the true full
--       view of a private type completed by another private type. For further
--       details, see attribute Underlying_Full_View.

--    Is_Underlying_Record_View (Flag246) [base type only]
--       Defined in all entities. Set only in record types that represent the
--       underlying record view. This view is built for derivations of types
--       with unknown discriminants; it is a record with the same structure
--       as its corresponding record type, but whose parent is the full view
--       of the parent in the original type extension.

--    Is_Unimplemented (Flag284)
--       Defined in all entities. Set for any entity to which a valid pragma
--       or aspect Unimplemented applies.

--    Is_Unsigned_Type (Flag144)
--       Defined in all types, but can be set only for discrete and fixed-point
--       type and subtype entities. This flag is only valid if the entity is
--       frozen. If set it indicates that the representation is known to be
--       unsigned (i.e. that no negative values appear in the range). This is
--       normally just a reflection of the lower bound of the subtype or base
--       type, but there is one case in which the setting is not obvious,
--       namely the case of an unsigned subtype of a signed type from which
--       a further subtype is obtained using variable bounds. This further
--       subtype is still unsigned, but this cannot be determined by looking
--       at its bounds or the bounds of the corresponding base type.
--       For a subtype indication whose range is statically a null range,
--       the flag is set if the lower bound is non-negative, but the flag
--       cannot be used to determine the comparison operator to emit in the
--       generated code: use the base type.

--    Is_Uplevel_Referenced_Entity (Flag283)
--       Defined in all entities. Used when unnesting subprograms to indicate
--       that an entity is locally defined within a subprogram P, and there is
--       a reference to the entity within a subprogram nested within P (at any
--       depth). Set for uplevel referenced objects (variables, constants,
--       discriminants and loop parameters), and also for upreferenced dynamic
--       types, including the cases where the reference is implicit (e.g. the
--       type of an array used for computing the location of an element in an
--       array. This is used internally in Exp_Unst, see this package for
--       further details.

--    Is_Valued_Procedure (Flag127)
--       Defined in procedure entities. Set if an Import_Valued_Procedure
--       or Export_Valued_Procedure pragma applies to the procedure entity.

--    Is_Visible_Formal (Flag206)
--       Defined in all entities. Set for instances of the formals of a
--       formal package. Indicates that the entity must be made visible in the
--       body of the instance, to reproduce the visibility of the generic.
--       This simplifies visibility settings in instance bodies.

--    Is_Visible_Lib_Unit (Flag116)
--       Defined in all (root or child) library unit entities. Once compiled,
--       library units remain chained to the entities in the parent scope, and
--       a separate flag must be used to indicate whether the names are visible
--       by selected notation, or not.

--    Is_Volatile (Flag16)
--       Defined in all type entities, and also in constants, components and
--       variables. Set if a pragma Volatile applies to the entity. Also set
--       if pragma Shared or pragma Atomic applies to entity. In the case of
--       private or incomplete types, this flag is set in both the private
--       and full view. The flag is not set reliably on private subtypes,
--       and is always retrieved from the base type (but this is not a base-
--       type-only attribute because it applies to other entities). Note that
--       the backend should use Treat_As_Volatile, rather than Is_Volatile
--       to indicate code generation requirements for volatile variables.
--       Similarly, any front end test which is concerned with suppressing
--       optimizations on volatile objects should test Treat_As_Volatile
--       rather than testing this flag.

--    Is_Volatile_Full_Access (Flag285)
--       Defined in all type entities, and also in constants, components, and
--       variables. Set if a pragma Volatile_Full_Access applies to the entity.
--       In the case of private and incomplete types, this flag is set in
--       both the partial view and the full view.

--    Is_Wrapper_Package (synthesized)
--       Defined in package entities. Indicates that the package has been
--       created as a wrapper for a subprogram instantiation.

--    Itype_Printed (Flag202)
--       Defined in all type and subtype entities. Set in Itypes if the Itype
--       has been printed by Sprint. This is used to avoid printing an Itype
--       more than once.

--    Kill_Elaboration_Checks (Flag32)
--       Defined in all entities. Set by the expander to kill elaboration
--       checks which are known not to be needed. Equivalent in effect to
--       the use of pragma Suppress (Elaboration_Checks) for that entity
--       except that the effect is permanent and cannot be undone by a
--       subsequent pragma Unsuppress.

--    Kill_Range_Checks (Flag33)
--       Defined in all entities. Equivalent in effect to the use of pragma
--       Suppress (Range_Checks) for that entity except that the result is
--       permanent and cannot be undone by a subsequent pragma Unsuppress.
--       This is currently only used in one odd situation in Sem_Ch3 for
--       record types, and it would be good to get rid of it???

--    Known_To_Have_Preelab_Init (Flag207)
--       Defined in all type and subtype entities. If set, then the type is
--       known to have preelaborable initialization. In the case of a partial
--       view of a private type, it is only possible for this to be set if a
--       pragma Preelaborable_Initialization is given for the type. For other
--       types, it is never set if the type does not have preelaborable
--       initialization, it may or may not be set if the type does have
--       preelaborable initialization.

--    Last_Aggregate_Assignment (Node30)
--       Applies to controlled constants and variables initialized by an
--       aggregate. Points to the last statement associated with the expansion
--       of the aggregate. The attribute is used by the finalization machinery
--       when marking an object as successfully initialized.

--    Last_Assignment (Node26)
--       Defined in entities for variables, and OUT or IN OUT formals. Set for
--       a local variable or formal to point to the left side of an assignment
--       statement assigning a value to the variable. Cleared if the value of
--       the entity is referenced. Used to warn about dubious assignment
--       statements whose value is not used.

--    Last_Entity (Node20)
--       Defined in all entities which act as scopes to which a list of
--       associated entities is attached (blocks, class subtypes and types,
--       entries, functions, loops, packages, procedures, protected objects,
--       record types and subtypes, private types, task types and subtypes).
--       Points to the last entry in the list of associated entities chained
--       through the Next_Entity field. Empty if no entities are chained.

--    Last_Formal (synthesized)
--       Applies to subprograms and subprogram types, and also in entries
--       and entry families. Returns last formal of the subprogram or entry.
--       The formals are the first entities declared in a subprogram or in
--       a subprogram type (the designated type of an Access_To_Subprogram
--       definition) or in an entry.

--    Limited_View (Node23)
--       Defined in non-generic package entities that are not instances. Bona
--       fide package with the limited-view list through the first_entity and
--       first_private attributes. The elements of this list are the shadow
--       entities created for the types and local packages that are declared
--       in a package appearing in a limited_with clause (Ada 2005: AI-50217).

--    Linker_Section_Pragma (Node33)
--       Present in constant, variable, type and subprogram entities. Points
--       to a linker section pragma that applies to the entity, or is Empty if
--       no such pragma applies. Note that for constants and variables, this
--       field may be set as a result of a linker section pragma applied to the
--       type of the object.

--    Lit_Indexes (Node18)
--       Defined in enumeration types and subtypes. Non-empty only for the
--       case of an enumeration root type, where it contains the entity for
--       the generated indexes entity. See unit Exp_Imgv for full details of
--       the nature and use of this entity for implementing the Image and
--       Value attributes for the enumeration type in question.

--    Lit_Strings (Node16)
--       Defined in enumeration types and subtypes. Non-empty only for the
--       case of an enumeration root type, where it contains the entity for
--       the literals string entity. See unit Exp_Imgv for full details of
--       the nature and use of this entity for implementing the Image and
--       Value attributes for the enumeration type in question.

--    Low_Bound_Tested (Flag205)
--       Defined in all entities. Currently this can only be set for formal
--       parameter entries of a standard unconstrained one-dimensional array
--       or string type. Indicates that an explicit test of the low bound of
--       the formal appeared in the code, e.g. in a pragma Assert. If this
--       flag is set, warnings about assuming the index low bound to be one
--       are suppressed.

--    Machine_Radix_10 (Flag84)
--       Defined in decimal types and subtypes, set if the Machine_Radix is 10,
--       as the result of the specification of a machine radix representation
--       clause. Note that it is possible for this flag to be set without
--       having Has_Machine_Radix_Clause True. This happens when a type is
--       derived from a type with a clause present.

--    Master_Id (Node17)
--       Defined in access types and subtypes. Empty unless Has_Task is set for
--       the designated type, in which case it points to the entity for the
--       Master_Id for the access type master. Also set for access-to-limited-
--       class-wide types whose root may be extended with task components, and
--       for access-to-limited-interfaces because they can be used to reference
--       tasks implementing such interface.

--    Materialize_Entity (Flag168)
--       Defined in all entities. Set only for renamed obects which should be
--       materialized for debugging purposes. This means that a memory location
--       containing the renamed address should be allocated. This is needed so
--       that the debugger can find the entity.

--    May_Inherit_Delayed_Rep_Aspects (Flag262)
--       Defined in all entities for types and subtypes. Set if the type is
--       derived from a type which has delayed rep aspects (marked by the flag
--       Has_Delayed_Rep_Aspects being set). In this case, at the freeze point
--       for the derived type we know that the parent type is frozen, and if
--       a given attribute has not been set for the derived type, we copy the
--       value from the parent type. See Freeze.Inherit_Delayed_Rep_Aspects.

--    Mechanism (Uint8) (returned as Mechanism_Type)
--       Defined in functions and non-generic formal parameters. Indicates
--       the mechanism to be used for the function return or for the formal
--       parameter. See full description in the spec of Sem_Mech. This field
--       is also set (to the default value of zero = Default_Mechanism) in a
--       subprogram body entity but not used in this context.

--    Minimum_Accessibility (Node24)
--       Defined in formal parameters in the non-generic case. Normally Empty,
--       but if expansion is active, and a parameter exists for which a
--       dynamic accessibility check is required, then an object is generated
--       within such a subprogram representing the accessibility level of the
--       subprogram or the formal's Extra_Accessibility - whichever one is
--       lesser. The Minimum_Accessibility field then points to this object.

--    Modulus (Uint17) [base type only]
--       Defined in modular types. Contains the modulus. For the binary case,
--       this will be a power of 2, but if Non_Binary_Modulus is set, then it
--       will not be a power of 2.

--    Must_Be_On_Byte_Boundary (Flag183)
--       Defined in entities for types and subtypes. Set if objects of the type
--       must always be allocated on a byte boundary (more accurately a storage
--       unit boundary). The front end checks that component clauses respect
--       this rule, and the backend ensures that record packing does not
--       violate this rule. Currently the flag is set only for packed arrays
--       longer than 64 bits where the component size is not a power of 2.

--    Must_Have_Preelab_Init (Flag208)
--       Defined in entities for types and subtypes. Set in the full type of a
--       private type or subtype if a pragma Has_Preelaborable_Initialization
--       is present for the private type. Used to check that the full type has
--       preelaborable initialization at freeze time (this has to be deferred
--       to the freeze point because of the rule about overriding Initialize).

--    Needs_Activation_Record (Flag306)
--       Defined on generated subprogram types. Indicates that a call through
--       a named or anonymous access to subprogram requires an activation
--       record when compiling with unnesting for C or LLVM.

--    Needs_Debug_Info (Flag147)
--       Defined in all entities. Set if the entity requires normal debugging
--       information to be generated. This is true of all entities that have
--       Comes_From_Source set, and also transitively for entities associated
--       with such components (e.g. their types). It is true for all entities
--       in Debug_Generated_Code mode (-gnatD switch). This is the flag that
--       the backend should check to determine whether or not to generate
--       debugging information for an entity. Note that callers should always
--       use Sem_Util.Set_Debug_Info_Needed, rather than Set_Needs_Debug_Info,
--       so that the flag is set properly on subsidiary entities.

--    Needs_No_Actuals (Flag22)
--       Defined in callable entities (subprograms, entries, access to
--       subprograms) which can be called without actuals because all of
--       their formals (if any) have default values. This flag simplifies the
--       resolution of the syntactic ambiguity involving a call to these
--       entities when the return type is an array type, and a call can be
--       interpreted as an indexing of the result of the call. It is also
--       used to resolve various cases of entry calls.

--    Never_Set_In_Source (Flag115)
--       Defined in all entities, but can be set only for variables and
--       parameters. This flag is set if the object is never assigned a value
--       in user source code, either by assignment or by being used as an out
--       or in out parameter. Note that this flag is not reset from using an
--       initial value, so if you want to test for this case as well, test the
--       Has_Initial_Value flag also.
--
--       This flag is only for the purposes of issuing warnings, it must not
--       be used by the code generator to indicate that the variable is in
--       fact a constant, since some assignments in generated code do not
--       count (for example, the call to an init proc to assign some but
--       not all of the fields in a partially initialized record). The code
--       generator should instead use the flag Is_True_Constant.
--
--       For the purposes of this warning, the default assignment of access
--       variables to null is not considered the assignment of a value (so
--       the warning can be given for code that relies on this initial null
--       value when no other value is ever set).
--
--       In variables and out parameters, if this flag is set after full
--       processing of the corresponding declarative unit, it indicates that
--       the variable or parameter was never set, and a warning message can
--       be issued.
--
--       Note: this flag is initially set, and then cleared on encountering
--       any construct that might conceivably legitimately set the value.
--       Thus during the analysis of a declarative region and its associated
--       statement sequence, the meaning of the flag is "not set yet", and
--       once this analysis is complete the flag means "never assigned".

--       Note: for variables appearing in package declarations, this flag is
--       never set. That is because there is no way to tell if some client
--       modifies the variable (or, in the case of variables in the private
--       part, if some child unit modifies the variables).

--       Note: in the case of renamed objects, the flag must be set in the
--       ultimate renamed object. Clients noting a possible modification
--       should use the Note_Possible_Modification procedure in Sem_Util
--       rather than Set_Never_Set_In_Source precisely to deal properly with
--       the renaming possibility.

--    Next_Component (synthesized)
--       Applies to record components. Returns the next component by following
--       the chain of declared entities until one is found which corresponds to
--       a component (Ekind is E_Component). Any internal types generated from
--       the subtype indications of the record components are skipped. Returns
--       Empty if no more components.

--    Next_Component_Or_Discriminant (synthesized)
--      Similar to Next_Component, but includes components and discriminants
--      so the input can have either E_Component or E_Discriminant, and the
--      same is true for the result. Returns Empty if no more components or
--      discriminants in the record.

--    Next_Discriminant (synthesized)
--       Applies to discriminants returned by First/Next_Discriminant. Returns
--       the next language-defined (i.e. perhaps non-girder) discriminant by
--       following the chain of declared entities as long as the kind of the
--       entity corresponds to a discriminant. Note that the discriminants
--       might be the only components of the record. Returns Empty if there
--       are no more discriminants.

--    Next_Entity (Node2)
--       Defined in all entities. The entities of a scope are chained, with
--       the head of the list being in the First_Entity field of the scope
--       entity. All entities use the Next_Entity field as a forward pointer
--       for this list, with Empty indicating the end of the list. Since this
--       field is in the base part of the entity, the access routines for this
--       field are in Sinfo.

--    Next_Formal (synthesized)
--       Applies to the entity for a formal parameter. Returns the next formal
--       parameter of the subprogram or subprogram type. Returns Empty if there
--       are no more formals.

--    Next_Formal_With_Extras (synthesized)
--       Applies to the entity for a formal parameter. Returns the next
--       formal parameter of the subprogram or subprogram type. Returns
--       Empty if there are no more formals. The list returned includes
--       all the extra formals (see description of Extra_Formal field)

--    Next_Index (synthesized)
--       Applies to array types and subtypes and to string types and
--       subtypes. Yields the next index. The first index is obtained by
--       using the First_Index attribute, and then subsequent indexes are
--       obtained by applying Next_Index to the previous index. Empty is
--       returned to indicate that there are no more indexes. Note that
--       unlike most attributes in this package, Next_Index applies to
--       nodes for the indexes, not to entities.

--    Next_Inlined_Subprogram (Node12)
--       Defined in subprograms. Used to chain inlined subprograms used in
--       the current compilation, in the order in which they must be compiled
--       by the backend to ensure that all inlinings are performed.

--    Next_Literal (synthesized)
--       Applies to enumeration literals, returns the next literal, or
--       Empty if applied to the last literal. This is actually a synonym
--       for Next, but its use is preferred in this context.

--    No_Dynamic_Predicate_On_Actual (Flag276)
--       Defined in discrete types. Set for generic formal types that are used
--       in loops and quantified expressions. The corresponing actual cannot
--       have dynamic predicates.

--    No_Pool_Assigned (Flag131) [root type only]
--       Defined in access types. Set if a storage size clause applies to the
--       variable with a static expression value of zero. This flag is used to
--       generate errors if any attempt is made to allocate or free an instance
--       of such an access type. This is set only in the root type, since
--       derived types must have the same pool.

--    No_Predicate_On_Actual (Flag275)
--       Defined in discrete types. Set for generic formal types that are used
--       in the spec of a generic package, in constructs that forbid discrete
--       types with predicates.

--    No_Reordering (Flag239) [implementation base type only]
--       Defined in record types. Set only for a base type to which a valid
--       pragma No_Component_Reordering applies.

--    No_Return (Flag113)
--       Defined in all entities. Always false except in the case of procedures
--       and generic procedures for which a pragma No_Return is given.

--    No_Strict_Aliasing (Flag136) [base type only]
--       Defined in access types. Set to direct the backend to avoid any
--       optimizations based on an assumption about the aliasing status of
--       objects designated by the access type. For the case of the gcc
--       backend, the effect is as though all references to objects of
--       the type were compiled with -fno-strict-aliasing. This flag is
--       set if an unchecked conversion with the access type as a target
--       type occurs in the same source unit as the declaration of the
--       access type, or if an explicit pragma No_Strict_Aliasing applies.

--    No_Tagged_Streams_Pragma (Node32)
--       Present in all subtype and type entities. Set for tagged types and
--       subtypes (i.e. entities with Is_Tagged_Type set True) if a valid
--       pragma/aspect applies to the type.

--    Non_Binary_Modulus (Flag58) [base type only]
--       Defined in all subtype and type entities. Set for modular integer
--       types if the modulus value is other than a power of 2.

--    Non_Limited_View (Node19)
--       Defined in abstract states and incomplete types that act as shadow
--       entities created when analysing a limited with clause (Ada 2005:
--       AI-50217). Points to the defining entity of the original declaration.

--    Nonzero_Is_True (Flag162) [base type only]
--       Defined in enumeration types. Set if any non-zero value is to be
--       interpreted as true. Currently this is set for derived Boolean
--       types which have a convention of C, C++ or Fortran.

--    Normalized_First_Bit (Uint8)
--       Defined in components and discriminants. Indicates the normalized
--       value of First_Bit for the component, i.e. the offset within the
--       lowest addressed storage unit containing part or all of the field.
--       Set to No_Uint if no first bit position is assigned yet.

--    Normalized_Position (Uint14)
--       Defined in components and discriminants. Indicates the normalized
--       value of Position for the component, i.e. the offset in storage
--       units from the start of the record to the lowest addressed storage
--       unit containing part or all of the field.

--    Normalized_Position_Max (Uint10)
--       Defined in components and discriminants. For almost all cases, this
--       is the same as Normalized_Position. The one exception is for the case
--       of a discriminated record containing one or more arrays whose length
--       depends on discriminants. In this case, the Normalized_Position_Max
--       field represents the maximum possible value of Normalized_Position
--       assuming min/max values for discriminant subscripts in all fields.
--       This is used by Layout in front end layout mode to properly compute
--       the maximum size of such records (needed for allocation purposes when
--       there are default discriminants, and also for the 'Size value).

--    Number_Dimensions (synthesized)
--       Applies to array types and subtypes. Returns the number of dimensions
--       of the array type or subtype as a value of type Pos.

--    Number_Entries (synthesized)
--       Applies to concurrent types. Returns the number of entries that are
--       declared within the task or protected definition for the type.

--    Number_Formals (synthesized)
--       Applies to subprograms and subprogram types. Yields the number of
--       formals as a value of type Pos.

--    Object_Size_Clause (synthesized)
--       Applies to entities for types and subtypes. If an object size clause
--       is present in the rep item chain for an entity then the attribute
--       definition clause node is returned. Otherwise Object_Size_Clause
--       returns Empty if no item is present. Usually this is only meaningful
--       if the flag Has_Object_Size_Clause is set. This is because when the
--       representation item chain is copied for a derived type, it can inherit
--       an object size clause that is not applicable to the entity.

--    OK_To_Rename (Flag247)
--       Defined only in entities for variables. If this flag is set, it
--       means that if the entity is used as the initial value of an object
--       declaration, the object declaration can be safely converted into a
--       renaming to avoid an extra copy. This is set for variables which are
--       generated by the expander to hold the result of evaluating some
--       expression. Most notably, the local variables used to store the result
--       of concatenations are so marked (see Exp_Ch4.Expand_Concatenate). It
--       is only worth setting this flag for composites, since for primitive
--       types, it is cheaper to do the copy.

--    Optimize_Alignment_Space (Flag241)
--       Defined in type, subtype, variable, and constant entities. This
--       flag records that the type or object is to be laid out in a manner
--       consistent with Optimize_Alignment (Space) mode. The compiler and
--       binder ensure a consistent view of any given type or object. If pragma
--       Optimize_Alignment (Off) mode applies to the type/object, then neither
--       of the flags Optimize_Alignment_Space/Optimize_Alignment_Time is set.

--    Optimize_Alignment_Time (Flag242)
--       Defined in type, subtype, variable, and constant entities. This
--       flag records that the type or object is to be laid out in a manner
--       consistent with Optimize_Alignment (Time) mode. The compiler and
--       binder ensure a consistent view of any given type or object. If pragma
--       Optimize_Alignment (Off) mode applies to the type/object, then neither
--       of the flags Optimize_Alignment_Space/Optimize_Alignment_Time is set.

--    Original_Access_Type (Node28)
--       Defined in E_Access_Subprogram_Type entities. Set only if the access
--       type was generated by the expander as part of processing an access-
--       to-protected-subprogram type. Points to the access-to-protected-
--       subprogram type.

--    Original_Array_Type (Node21)
--       Defined in modular types and array types and subtypes. Set only if
--       the Is_Packed_Array_Impl_Type flag is set, indicating that the type
--       is the implementation type for a packed array, and in this case it
--       points to the original array type for which this is the packed
--       array implementation type.

--    Original_Protected_Subprogram (Node41)
--       Defined in functions and procedures. Set only on internally built
--       dispatching subprograms of protected types to reference their original
--       non-dispatching protected subprogram since their names differ.

--    Original_Record_Component (Node22)
--       Defined in components, including discriminants. The usage depends
--       on whether the record is a base type and whether it is tagged.
--
--       In base tagged types:
--         When the component is inherited in a record extension, it points
--         to the original component (the entity of the ancestor component
--         which is not itself inherited) otherwise it points to itself. The
--         backend uses this attribute to implement the automatic dereference
--         in the extension and to apply the transformation:
--
--            Rec_Ext.Comp -> Rec_Ext.Parent. ... .Parent.Comp
--
--       In base untagged types:
--         Always points to itself except for non-girder discriminants, where
--         it points to the girder discriminant it renames.
--
--       In subtypes (tagged and untagged):
--         Points to the component in the base type.

--    Overlays_Constant (Flag243)
--       Defined in all entities. Set only for E_Constant or E_Variable for
--       which there is an address clause that causes the entity to overlay
--       a constant object.

--    Overridden_Operation (Node26)
--       Defined in subprograms. For overriding operations, points to the
--       user-defined parent subprogram that is being overridden. Note: this
--       attribute uses the same field as Static_Initialization. The latter
--       is only defined for internal initialization procedures, for which
--       Overridden_Operation is irrelevant. Thus this attribute must not be
--       set for init_procs.

--    Package_Instantiation (Node26)
--       Defined in packages and generic packages. When defined, this field
--       references an N_Generic_Instantiation node associated with an
--       instantiated package. In the case where the referenced node has
--       been rewritten to an N_Package_Specification, the instantiation
--       node is available from the Original_Node field of the package spec
--       node. This is currently not guaranteed to be set in all cases, but
--       when set, the field is used in Get_Unit_Instantiation_Node as
--       one of the means of obtaining the instantiation node. Eventually
--       it should be set in all cases, including package entities associated
--       with formal packages. ???

--    Packed_Array_Impl_Type (Node23)
--       Defined in array types and subtypes, except for the string literal
--       subtype case, if the corresponding type is packed and implemented
--       specially (either bit-packed or packed to eliminate holes in the
--       non-contiguous enumeration index types). References the type used to
--       represent the packed array, which is either a modular type for short
--       static arrays or an array of System.Unsigned in the bit-packed case,
--       or a regular array in the non-standard enumeration index case. Note
--       that in some situations (internal types and references to fields of
--       variant records), it is not always possible to construct this type in
--       advance of its use. If this field is empty, then the necessary type
--       is declared on the fly for each reference to the array.

--    Parameter_Mode (synthesized)
--       Applies to formal parameter entities. This is a synonym for Ekind,
--       used when obtaining the formal kind of a formal parameter (the result
--       is one of E_[In/Out/In_Out]_Parameter).

--    Parent_Subtype (Node19) [base type only]
--       Defined in E_Record_Type. Set only for derived tagged types, in which
--       case it points to the subtype of the parent type. This is the type
--       that is used as the Etype of the _parent field.

--    Part_Of_Constituents (Elist10)
--       Present in abstract state and variable entities. Contains all
--       constituents that are subject to indicator Part_Of (both aspect and
--       option variants).

--    Part_Of_References (Elist11)
--       Present in variable entities. Contains all references to the variable
--       when it is subject to pragma Part_Of. If the variable is a constituent
--       of a single protected/task type, the references are examined as they
--       must appear only within the type defintion and the corresponding body.

--    Partial_Invariant_Procedure (synthesized)
--       Defined in types and subtypes. Set for private types when one or more
--       [class-wide] type invariants apply to them. Points to the entity for a
--       procedure which checks the invariant. This invariant procedure takes a
--       single argument of the given type, and returns if the invariant holds,
--       or raises exception Assertion_Error with an appropriate message if it
--       does not hold. This attribute is defined but always Empty for private
--       subtypes. This attribute is also set for the corresponding full type.
--
--       Note: the reason this is marked as a synthesized attribute is that the
--       way this is stored is as an element of the Subprograms_For_Type field.

--    Partial_Refinement_Constituents (synthesized)
--       Defined in abstract state entities. Returns the constituents that
--       refine the state in the current scope, which are allowed in a global
--       refinement in this scope. These consist of those constituents that are
--       abstract states with no or only partial refinement visible, and those
--       that are not themselves abstract states.

--    Partial_View_Has_Unknown_Discr (Flag280)
--       Present in all types. Set to Indicate that the partial view of a type
--       has unknown discriminants. A default initialization of an object of
--       the type does not require an invariant check (AI12-0133).

--    Pending_Access_Types (Elist15)
--       Defined in all types. Set for incomplete, private, Taft-amendment
--       types, and their corresponding full views. This list contains all
--       access types, both named and anonymous, declared between the partial
--       and the full view. The list is used by the finalization machinery to
--       ensure that the finalization masters of all pending access types are
--       fully initialized when the full view is frozen.

--    Postconditions_Proc (Node14)
--       Defined in functions, procedures, entries, and entry families. Refers
--       to the entity of the _Postconditions procedure used to check contract
--       assertions on exit from a subprogram.

--    Predicate_Function (synthesized)
--       Defined in all types. Set for types for which (Has_Predicates is True)
--       and for which a predicate procedure has been built that tests that the
--       specified predicates are True. Contains the entity for the function
--       which takes a single argument of the given type, and returns True if
--       the predicate holds and False if it does not.
--
--       Note: flag Has_Predicate does not imply that Predicate_Function is set
--       to a non-empty entity; this happens, for example, for itypes created
--       when instantiating generic units with private types with predicates.
--       However, if an explicit pragma Predicate or Predicate aspect is given
--       either for private or full type declaration then both Has_Predicates
--       and a non-empty Predicate_Function will be set on both the partial and
--       full views of the type.
--
--       Note: the reason this is marked as a synthesized attribute is that the
--       way this is stored is as an element of the Subprograms_For_Type field.

--    Predicate_Function_M (synthesized)
--       Defined in all types. Present only if Predicate_Function is present,
--       and only if the predicate function has Raise_Expression nodes. It
--       is the special version created for membership tests, where if one of
--       these raise expressions is executed, the result is to return False.

--    Predicated_Parent (Node38)
--       Defined on itypes created by subtype indications, when the parent
--       subtype has predicates. The itype shares the Predicate_Function
--       of the predicated parent, but this function may not have been built
--       at the point the Itype is constructed, so this attribute allows its
--       retrieval at the point a predicate check needs to be generated.
--       The utility Predicate_Function takes this link into account.

--    Predicates_Ignored (Flag288)
--       Defined on all types. Indicates whether the subtype declaration is in
--       a context where Assertion_Policy is Ignore, in which case no checks
--       (static or dynamic) must be generated for objects of the type.

--    Prev_Entity (Node36)
--       Defined in all entities. The entities of a scope are chained, and this
--       field is used as a backward pointer for this entity list - effectivly
--       making the entity chain doubly-linked.

--    Primitive_Operations (synthesized)
--       Defined in concurrent types, tagged record types and subtypes, tagged
--       private types and tagged incomplete types. For concurrent types whose
--       Corresponding_Record_Type (CRT) is available, returns the list of
--       Direct_Primitive_Operations of its CRT; otherwise returns No_Elist.
--       For all the other types returns the Direct_Primitive_Operations.

--    Prival (Node17)
--       Defined in private components of protected types. Refers to the entity
--       of the component renaming declaration generated inside protected
--       subprograms, entries or barrier functions.

--    Prival_Link (Node20)
--       Defined in constants and variables which rename private components of
--       protected types. Set to the original private component.

--    Private_Dependents (Elist18)
--       Defined in private (sub)types. Records the subtypes of the private
--       type, derivations from it, and records and arrays with components
--       dependent on the type.
--
--       The subtypes are traversed when installing and deinstalling (the full
--       view of) a private type in order to ensure correct view of the
--       subtypes.
--
--       Used in similar fashion for incomplete types: holds list of subtypes
--       of these incomplete types that have discriminant constraints. The
--       full views of these subtypes are constructed when the full view of
--       the incomplete type is processed.

--       In addition, if the incomplete type is the designated type in an
--       access definition for an access parameter, the operation may be
--       a dispatching primitive operation, which is only known when the full
--       declaration of the type is seen. Subprograms that have such an
--       access parameter are also placed in the list of private_dependents.

--    Protected_Body_Subprogram (Node11)
--       Defined in protected operations. References the entity for the
--       subprogram which implements the body of the operation.

--    Protected_Formal (Node22)
--       Defined in formal parameters (in, in out and out parameters). Used
--       only for formals of protected operations. References corresponding
--       formal parameter in the unprotected version of the operation that
--       is created during expansion.

--    Protected_Subprogram (Node39)
--       Defined in functions and procedures. Set for the pair of subprograms
--       which emulate the runtime semantics of a protected subprogram. Denotes
--       the entity of the origial protected subprogram.

--    Protection_Object (Node23)
--       Applies to protected entries, entry families and subprograms. Denotes
--       the entity which is used to rename the _object component of protected
--       types.

--    Reachable (Flag49)
--       Defined in labels. The flag is set over the range of statements in
--       which a goto to that label is legal.

--    Receiving_Entry (Node19)
--       Defined in procedures. Set for an internally generated procedure which
--       wraps the original statements of an accept alternative. Designates the
--       entity of the task entry being accepted.

--    Referenced (Flag156)
--       Defined in all entities. Set if the entity is referenced, except for
--       the case of an appearance of a simple variable that is not a renaming
--       as the left side of an assignment in which case Referenced_As_LHS is
--       set instead, or a similar appearance as an out parameter actual, in
--       which case Referenced_As_Out_Parameter is set.

--    Referenced_As_LHS (Flag36):
--       Defined in all entities. This flag is set instead of Referenced if a
--       simple variable that is not a renaming appears as the left side of an
--       assignment. The reason we distinguish this kind of reference is that
--       we have a separate warning for variables that are only assigned and
--       never read.

--    Referenced_As_Out_Parameter (Flag227):
--       Defined in all entities. This flag is set instead of Referenced if a
--       simple variable that is not a renaming appears as an actual for an out
--       formal. The reason we distinguish this kind of reference is that
--       we have a separate warning for variables that are only assigned and
--       never read, and out parameters are a special case.

--    Refinement_Constituents (Elist8)
--       Present in abstract state entities. Contains all the constituents that
--       refine the state, in other words, all the hidden states that appear in
--       the constituent_list of aspect/pragma Refined_State.

--    Register_Exception_Call (Node20)
--       Defined in exception entities. When an exception is declared,
--       a call is expanded to Register_Exception. This field points to
--       the expanded N_Procedure_Call_Statement node for this call. It
--       is used for Import/Export_Exception processing to modify the
--       register call to make appropriate entries in the special tables
--       used for handling these pragmas at run time.

--    Related_Array_Object (Node25)
--       Defined in array types and subtypes. Used only for the base type
--       and subtype created for an anonymous array object. Set to point
--       to the entity of the corresponding array object. Currently used
--       only for type-related error messages.

--    Related_Expression (Node24)
--       Defined in variables and types. When Set for internally generated
--       entities, it may be used to denote the source expression whose
--       elaboration created the variable declaration. If set, it is used
--       for generating clearer messages from CodePeer. It is used on source
--       entities that are variables in iterator specifications, to provide
--       a link to the container that is the domain of iteration. This allows
--       for better cross-reference information when the loop modifies elements
--       of the container, and suppresses spurious warnings.
--
--       Shouldn't it also be used for the same purpose in errout? It seems
--       odd to have two mechanisms here???

--    Related_Instance (Node15)
--       Defined in the wrapper packages created for subprogram instances.
--       The internal subprogram that implements the instance is inside the
--       wrapper package, but for debugging purposes its external symbol
--       must correspond to the name and scope of the related instance.

--    Related_Type (Node27)
--       Defined in components, constants and variables. Set when there is an
--       associated dispatch table to point to entities containing primary or
--       secondary tags. Not set in the _tag component of record types.

--    Relative_Deadline_Variable (Node28) [implementation base type only]
--       Defined in task type entities. This flag is set if a valid and
--       effective pragma Relative_Deadline applies to the base type. Points
--       to the entity for a variable that is created to hold the value given
--       in a Relative_Deadline pragma for a task type.

--    Renamed_Entity (Node18)
--       Defined in exception, generic unit, package, and subprogram entities.
--       Set when the entity is defined by a renaming declaration. Denotes the
--       renamed entity, or transitively the ultimate renamed entity if there
--       is a chain of renaming declarations. Empty if no renaming.

--    Renamed_In_Spec (Flag231)
--       Defined in package entities. If a package renaming occurs within
--       a package spec, then this flag is set on the renamed package. The
--       purpose is to prevent a warning about unused entities in the renamed
--       package. Such a warning would be inappropriate since clients of the
--       package can see the entities in the package via the renaming.

--    Renamed_Object (Node18)
--       Defined in components, constants, discriminants, formal parameters,
--       generic formals, loop parameters, and variables. Set to non-Empty if
--       the object was declared by a renaming declaration. For constants and
--       variables, the attribute references the tree node for the name of the
--       renamed object. For formal parameters, the field is used in inlining
--       and maps the entities of all formal parameters of a subprogram to the
--       entities of the corresponding actuals. For formals of a task entry,
--       the attribute denotes the local renaming that replaces the actual
--       within an accept statement. For all remaining cases (discriminants,
--       loop parameters) the field is Empty.

--    Renaming_Map (Uint9)
--       Defined in generic subprograms, generic packages, and their
--       instances. Also defined in the instances of the corresponding
--       bodies. Denotes the renaming map (generic entities => instance
--       entities) used to construct the instance by giving an index into
--       the tables used to represent these maps. See Sem_Ch12 for further
--       details. The maps for package instances are also used when the
--       instance is the actual corresponding to a formal package.

--    Requires_Overriding (Flag213)
--       Defined in all subprograms and entries. Set for subprograms that
--       require overriding as defined by RM-2005-3.9.3(6/2). Note that this
--       is True only for implicitly declared subprograms; it is not set on the
--       parent type's subprogram. See also Is_Abstract_Subprogram.

--    Return_Applies_To (Node8)
--       Defined in E_Return_Statement. Points to the entity representing
--       the construct to which the return statement applies, as defined in
--       RM-6.5(4/2). Note that a (simple) return statement within an
--       extended_return_statement applies to the extended_return_statement,
--       even though it causes the whole function to return.

--    Return_Present (Flag54)
--       Defined in function and generic function entities. Set if the
--       function contains a return statement (used for error checking).
--       This flag can also be set in procedure and generic procedure
--       entities (for convenience in setting it), but is only tested
--       for the function case.

--    Returns_By_Ref (Flag90)
--       Defined in function entities. Set if the function returns the result
--       by reference, either because its return type is a by-reference-type
--       or because the function explicitly uses the secondary stack.

--    Reverse_Bit_Order (Flag164) [base type only]
--       Defined in all record type entities. Set if entity has a Bit_Order
--       aspect (set by an aspect clause or attribute definition clause) that
--       has reversed the order of bits from the default value. When this flag
--       is set, a component clause must specify a set of bits entirely within
--       a single storage unit (Ada 95) or within a single machine scalar (see
--       Ada 2005 AI-133), or must occupy an integral number of storage units.

--    Reverse_Storage_Order (Flag93) [base type only]
--       Defined in all record and array type entities. Set if entity has a
--       Scalar_Storage_Order aspect (set by an aspect clause or attribute
--       definition clause) that has reversed the order of storage elements
--       from the default value. When this flag is set for a record type,
--       the Bit_Order aspect must be set to the same value (either explicitly
--       or as the target default value).

--    Rewritten_For_C (Flag287)
--       Defined on functions that return a constrained array type, when
--       Modify_Tree_For_C is set. Indicates that a procedure with an extra
--       out parameter has been created for it, and calls must be rewritten as
--       calls to the new procedure.

--    RM_Size (Uint13)
--       Defined in all type and subtype entities. Contains the value of
--       type'Size as defined in the RM. See also the Esize field and
--       and the description on "Handling of Type'Size Values". A value
--       of zero in this field for a non-discrete type means that
--       the front end has not yet determined the size value. For the
--       case of a discrete type, this field is always set by the front
--       end and zero is a legitimate value for a type with one value.

--    Root_Type (synthesized)
--       Applies to all type entities. For class-wide types, returns the root
--       type of the class covered by the CW type, otherwise returns the
--       ultimate derivation ancestor of the given type. This function
--       preserves the view, i.e. the Root_Type of a partial view is the
--       partial view of the ultimate ancestor, the Root_Type of a full view
--       is the full view of the ultimate ancestor. Note that this function
--       does not correspond exactly to the use of root type in the RM, since
--       in the RM root type applies to a class of types, not to a type.

--    Scalar_Range (Node20)
--       Defined in all scalar types (including modular types, where the
--       bounds are 0 .. modulus - 1). References a node in the tree that
--       contains the bounds for the range. Note that this information
--       could be obtained by rummaging around the tree, but it is more
--       convenient to have it immediately at hand in the entity. The
--       contents of Scalar_Range can either be an N_Subtype_Indication
--       node (with a constraint), a Range node, or an Integer_Type_Definition,
--       but not a simple subtype reference (a subtype is converted into a
--       explicit range).

--    Scale_Value (Uint16)
--       Defined in decimal fixed-point types and subtypes. Contains the scale
--       for the type (i.e. the value of type'Scale = the number of decimal
--       digits after the decimal point).

--    Scope (Node3)
--       Defined in all entities. Points to the entity for the scope (block,
--       loop, subprogram, package etc.) in which the entity is declared.
--       Since this field is in the base part of the entity node, the access
--       routines for this field are in Sinfo. Note that for a child unit,
--       the Scope will be the parent package, and for a root library unit,
--       the Scope will be Standard.

--    Scope_Depth (synthesized)
--       Applies to program units, blocks, concurrent types and entries, and
--       also to record types, i.e. to any entity that can appear on the scope
--       stack. Yields the scope depth value, which for those entities other
--       than records is simply the scope depth value, for record entities, it
--       is the Scope_Depth of the record scope.

--    Scope_Depth_Value (Uint22)
--       Defined in program units, blocks, concurrent types, and entries.
--       Indicates the number of scopes that statically enclose the declaration
--       of the unit or type. Library units have a depth of zero. Note that
--       record types can act as scopes but do NOT have this field set (see
--       Scope_Depth above).

--    Scope_Depth_Set (synthesized)
--       Applies to a special predicate function that returns a Boolean value
--       indicating whether or not the Scope_Depth field has been set. It is
--       needed, since returns an invalid value in this case.

--    Sec_Stack_Needed_For_Return (Flag167)
--       Defined in scope entities (blocks, entries, entry families, functions,
--       and procedures). Set to True when secondary stack is used to hold the
--       returned value of a function and thus should not be released on scope
--       exit.

--    Shared_Var_Procs_Instance (Node22)
--       Defined in variables. Set non-Empty only if Is_Shared_Passive is
--       set, in which case this is the entity for the associated instance of
--       System.Shared_Storage.Shared_Var_Procs. See Exp_Smem for full details.

--    Size_Check_Code (Node19)
--       Defined in constants and variables. Normally Empty. Set if code is
--       generated to check the size of the object. This field is used to
--       suppress this code if a subsequent address clause is encountered.

--    Size_Clause (synthesized)
--       Applies to all entities. If a size clause is present in the rep
--       item chain for an entity then the attribute definition clause node
--       for the size clause is returned. Otherwise Size_Clause returns Empty
--       if no item is present. Usually this is only meaningful if the flag
--       Has_Size_Clause is set. This is because when the representation item
--       chain is copied for a derived type, it can inherit a size clause that
--       is not applicable to the entity.

--    Size_Depends_On_Discriminant (Flag177)
--       Defined in all entities for types and subtypes. Indicates that the
--       size of the type depends on the value of one or more discriminants.
--       Currently, this flag is only set for arrays which have one or more
--       bounds depending on a discriminant value.

--    Size_Known_At_Compile_Time (Flag92)
--       Defined in all entities for types and subtypes. Indicates that the
--       size of objects of the type is known at compile time. This flag is
--       used to optimize some generated code sequences, and also to enable
--       some error checks (e.g. disallowing component clauses on variable
--       length objects). It is set conservatively (i.e. if it is True, the
--       size is certainly known at compile time, if it is False, then the
--       size may or may not be known at compile time, but the code will
--       assume that it is not known). Note that the value may be known only
--       to the back end, so the fact that this flag is set does not mean that
--       the front end can access the value.

--    Small_Value (Ureal21)
--       Defined in fixed point types. Points to the universal real for the
--       Small of the type, either as given in a representation clause, or
--       as computed (as a power of two) by the compiler.

--    SPARK_Aux_Pragma (Node41)
--       Present in concurrent type, [generic] package spec and package body
--       entities. For concurrent types and package specs it refers to the
--       SPARK mode setting for the private part. This field points to the
--       N_Pragma node that either appears in the private part or is inherited
--       from the enclosing context. For package bodies, it refers to the SPARK
--       mode of the elaboration sequence after the BEGIN. The fields points to
--       the N_Pragma node that either appears in the statement sequence or is
--       inherited from the enclosing context. In all cases, if the pragma is
--       inherited, then the SPARK_Aux_Pragma_Inherited flag is set.

--    SPARK_Aux_Pragma_Inherited (Flag266)
--       Present in concurrent type, [generic] package spec and package body
--       entities. Set if the SPARK_Aux_Pragma field points to a pragma that is
--       inherited, rather than a local one.

--    SPARK_Pragma (Node40)
--       Present in the following entities:
--
--         abstract states
--         constants
--         entries
--         operators
--         [generic] packages
--         package bodies
--         [generic] subprograms
--         subprogram bodies
--         variables
--         types
--
--       Points to the N_Pragma node that applies to the initial declaration or
--       body. This is either set by a local SPARK_Mode pragma or is inherited
--       from the context (from an outer scope for the spec case or from the
--       spec for the body case). In the case where the attribute is inherited,
--       flag SPARK_Pragma_Inherited is set. Empty if no SPARK_Mode pragma is
--       applicable.

--    SPARK_Pragma_Inherited (Flag265)
--       Present in the following entities:
--
--         abstract states
--         constants
--         entries
--         operators
--         [generic] packages
--         package bodies
--         [generic] subprograms
--         subprogram bodies
--         variables
--         types
--
--       Set if the SPARK_Pragma attribute points to an inherited pragma rather
--       than a local one.

--    Spec_Entity (Node19)
--       Defined in package body entities. Points to corresponding package
--       spec entity. Also defined in subprogram body parameters in the
--       case where there is a separate spec, where this field references
--       the corresponding parameter entities in the spec.

--    SSO_Set_High_By_Default (Flag273) [base type only]
--       Defined for record and array types. Set in the base type if a pragma
--       Default_Scalar_Storage_Order (High_Order_First) was active at the time
--       the record or array was declared and therefore applies to it.

--    SSO_Set_Low_By_Default (Flag272) [base type only]
--       Defined for record and array types. Set in the base type if a pragma
--       Default_Scalar_Storage_Order (High_Order_First) was active at the time
--       the record or array was declared and therefore applies to it.

--    Static_Discrete_Predicate (List25)
--       Defined in discrete types/subtypes with static predicates (with the
--       two flags Has_Predicates and Has_Static_Predicate set). Set if the
--       type/subtype has a static predicate. Points to a list of expression
--       and N_Range nodes that represent the predicate in canonical form. The
--       canonical form has entries sorted in ascending order, with duplicates
--       eliminated, and adjacent ranges coalesced, so that there is always a
--       gap in the values between successive entries. The entries in this list
--       are fully analyzed and typed with the base type of the subtype. Note
--       that all entries are static and have values within the subtype range.

--    Static_Elaboration_Desired (Flag77)
--       Defined in library-level packages. Set by the pragma of the same
--       name, to indicate that static initialization must be attempted for
--       all types declared in the package, and that a warning must be emitted
--       for those types to which static initialization is not available.

--    Static_Initialization (Node30)
--       Defined in initialization procedures for types whose objects can be
--       initialized statically. The value of this attribute is a positional
--       aggregate whose components are compile-time static values. Used
--       when available in object declarations to eliminate the call to the
--       initialization procedure, and to minimize elaboration code. Note:
--       This attribute uses the same field as Overridden_Operation, which is
--       irrelevant in init_procs.

--    Static_Real_Or_String_Predicate (Node25)
--       Defined in real types/subtypes with static predicates (with the two
--       flags Has_Predicates and Has_Static_Predicate set). Set if the type
--       or subtype has a static predicate. Points to the return expression
--       of the predicate function. This is the original expression given as
--       the predicate except that occurrences of the type are replaced by
--       occurrences of the formal parameter of the predicate function (note
--       that the spec of this function including this formal parameter name
--       is available from the Subprograms_For_Type field; it can be accessed
--       as Predicate_Function (typ)). Also, in the case where a predicate is
--       inherited, the expression is of the form:
--
--         xxxPredicate (typ2 (ent)) AND THEN expression
--
--       where typ2 is the type from which the predicate is inherited, ent is
--       the entity for the current predicate function, and xxxPredicate is the
--       inherited predicate (from typ2). Finally for a predicate that inherits
--       from another predicate but does not add a predicate of its own, the
--       expression may consist of the above xxxPredicate call on its own.

--    Status_Flag_Or_Transient_Decl (Node15)
--       Defined in constant, loop, and variable entities. Applies to objects
--       that require special treatment by the finalization machinery, such as
--       extended return results, IF and CASE expression results, and objects
--       inside N_Expression_With_Actions nodes. The attribute contains the
--       entity of a flag which specifies particular behavior over a region of
--       code or the declaration of a "hook" object.
--       In which case is it a flag, or a hook object???

--    Storage_Size_Variable (Node26) [implementation base type only]
--       Defined in access types and task type entities. This flag is set
--       if a valid and effective pragma Storage_Size applies to the base
--       type. Points to the entity for a variable that is created to
--       hold the value given in a Storage_Size pragma for an access
--       collection or a task type. Note that in the access type case,
--       this field is defined only in the root type (since derived types
--       share the same storage pool).

--    Stored_Constraint (Elist23)
--       Defined in entities that can have discriminants (concurrent types
--       subtypes, record types and subtypes, private types and subtypes,
--       limited private types and subtypes and incomplete types). Points
--       to an element list containing the expressions for each of the
--       stored discriminants for the record (sub)type.

--    Stores_Attribute_Old_Prefix (Flag270)
--       Defined in constants. Set when the constant has been generated to save
--       the value of attribute 'Old's prefix.

--    Strict_Alignment (Flag145) [implementation base type only]
--       Defined in all type entities. Indicates that the type is by-reference
--       or contains an aliased part. This forbids packing a component of this
--       type tighter than the alignment and size of the type, as specified by
--       RM 13.2(7) modified by AI12-001 as a Binding Interpretation.

--    String_Literal_Length (Uint16)
--       Defined in string literal subtypes (which are created to correspond
--       to string literals in the program). Contains the length of the string
--       literal.

--    String_Literal_Low_Bound (Node18)
--       Defined in string literal subtypes (which are created to correspond
--       to string literals in the program). Contains an expression whose
--       value represents the low bound of the literal. This is a copy of
--       the low bound of the applicable index constraint if there is one,
--       or a copy of the low bound of the index base type if not.

--    Subprograms_For_Type (Elist29)
--       Defined in all types. The list may contain the entities of the default
--       initial condition procedure, invariant procedure, and the two versions
--       of the predicate function.
--
--       Historical note: This attribute used to be a direct linked list of
--       entities rather than an Elist. The Elist allows greater flexibility
--       in inheritance of subprograms between views of the same type.

--    Subps_Index (Uint24)
--       Present in subprogram entries. Set if the subprogram contains nested
--       subprograms, or is a subprogram nested within such a subprogram. Holds
--       the index in the Exp_Unst.Subps table for the subprogram. Note that
--       for the outer level subprogram, this is the starting index in the Subp
--       table for the entries for this subprogram.

--    Suppress_Elaboration_Warnings (Flag303)
--       NOTE: this flag is relevant only for the legacy ABE mechanism and
--       should not be used outside of that context.
--
--       Defined in all entities, can be set only for subprogram entities and
--       for variables. If this flag is set then Sem_Elab will not generate
--       elaboration warnings for the subprogram or variable. Suppression of
--       such warnings is automatic for subprograms for which elaboration
--       checks are suppressed (without the need to set this flag), but the
--       flag is also set for various internal entities (such as init procs)
--       which are known not to generate any possible access before elaboration
--       and it is set on variables when a warning is given to avoid multiple
--       elaboration warnings for the same variable.

--    Suppress_Initialization (Flag105)
--       Defined in all variable, type and subtype entities. If set for a base
--       type, then the generation of initialization procedures is suppressed
--       for the type. Any other implicit initialization (e.g. from the use of
--       pragma Initialize_Scalars) is also suppressed if this flag is set for
--       either the subtype in question, or for the base type. For variables,
--       this flag suppresses all implicit initialization for the object, even
--       if the type would normally require initialization. Set by use of
--       pragma Suppress_Initialization and also for internal entities where
--       we know that no initialization is required. For example, enumeration
--       image table entities set it.

--    Suppress_Style_Checks (Flag165)
--       Defined in all entities. Suppresses any style checks specifically
--       associated with the given entity if set.

--    Suppress_Value_Tracking_On_Call (Flag217)
--       Defined in all entities. Set in a scope entity if value tracking is to
--       be suppressed on any call within the scope. Used when an access to a
--       local subprogram is computed, to deal with the possibility that this
--       value may be passed around, and if used, may clobber a local variable.

--    Task_Body_Procedure (Node25)
--       Defined in task types and subtypes. Points to the entity for the task
--       task body procedure (as further described in Exp_Ch9, task bodies are
--       expanded into procedures). A convenient function to retrieve this
--       field is Sem_Util.Get_Task_Body_Procedure.
--
--       The last sentence is odd??? Why not have Task_Body_Procedure go to the
--       Underlying_Type of the Root_Type???

--    Thunk_Entity (Node31)
--       Defined in functions and procedures which have been classified as
--       Is_Thunk. Set to the target entity called by the thunk.

--    Treat_As_Volatile (Flag41)
--       Defined in all type entities, and also in constants, components and
--       variables. Set if this entity is to be treated as volatile for code
--       generation purposes. Always set if Is_Volatile is set, but can also
--       be set as a result of situations (such as address overlays) where
--       the front end wishes to force volatile handling to inhibit aliasing
--       optimization which might be legally ok, but is undesirable. Note
--       that the backend always tests this flag rather than Is_Volatile.
--       The front end tests Is_Volatile if it is concerned with legality
--       checks associated with declared volatile variables, but if the test
--       is for the purposes of suppressing optimizations, then the front
--       end should test Treat_As_Volatile rather than Is_Volatile.
--
--       Note: before testing Treat_As_Volatile, consider whether it would
--       be more appropriate to use Exp_Util.Is_Volatile_Reference instead,
--       which catches more cases of volatile references.

--    Type_High_Bound (synthesized)
--       Applies to scalar types. Returns the tree node (Node_Id) that contains
--       the high bound of a scalar type. The returned value is literal for a
--       base type, but may be an expression in the case of scalar type with
--       dynamic bounds. Note that in the case of a fixed point type, the high
--       bound is in units of small, and is an integer.

--    Type_Low_Bound (synthesized)
--       Applies to scalar types. Returns the tree node (Node_Id) that contains
--       the low bound of a scalar type. The returned value is literal for a
--       base type, but may be an expression in the case of scalar type with
--       dynamic bounds. Note that in the case of a fixed point type, the low
--       bound is in units of small, and is an integer.

--    Underlying_Full_View (Node19)
--       Defined in private subtypes that are the completion of other private
--       types, or in private types that are derived from private subtypes. If
--       the full view of a private type T is derived from another private type
--       with discriminants Td, the full view of T is also private, and there
--       is no way to attach to it a further full view that would convey the
--       structure of T to the backend. The Underlying_Full_View is an
--       attribute of the full view that is a subtype of Td with the same
--       constraint as the declaration for T. The declaration for this subtype
--       is built at the point of the declaration of T, either as completion,
--       or as a subtype declaration where the base type is private and has a
--       private completion. If Td is already constrained, then its full view
--       can serve directly as the full view of T.

--    Underlying_Record_View (Node28)
--       Defined in record types. Set for record types that are extensions of
--       types with unknown discriminants, and also set for internally built
--       underlying record views to reference its original record type. Record
--       types that are extensions of types with unknown discriminants do not
--       have a completion, but they cannot be used without having some
--       discriminated view at hand. This view is a record type with the same
--       structure, whose parent type is the full view of the parent in the
--       original type extension.

--    Underlying_Type (synthesized)
--       Applies to all entities. This is the identity function except in the
--       case where it is applied to an incomplete or private type, in which
--       case it is the underlying type of the type declared by the completion,
--       or Empty if the completion has not yet been encountered and analyzed.
--
--       Note: the reason this attribute applies to all entities, and not just
--       types, is to legitimize code where Underlying_Type is applied to an
--       entity which may or may not be a type, with the intent that if it is a
--       type, its underlying type is taken.
--
--       Note also that the value of this attribute is interesting only after
--       the full view of the parent type has been processed. If the parent
--       type is declared in an enclosing package, the attribute will be non-
--       trivial only after the full view of the type has been analyzed.

--    Universal_Aliasing (Flag216) [implementation base type only]
--       Defined in all type entities. Set to direct the back-end to avoid
--       any optimizations based on type-based alias analysis for this type.
--       Indicates that objects of this type can alias objects of any other
--       types, which guarantees that any objects can be referenced through
--       access types designating this type safely, whatever the actual type
--       of these objects. In other words, the effect is as though access
--       types designating this type were subject to No_Strict_Aliasing.

--    Unset_Reference (Node16)
--       Defined in variables and out parameters. This is normally Empty. It
--       is set to point to an identifier that represents a reference to the
--       entity before any value has been set. Only the first such reference
--       is identified. This field is used to generate a warning message if
--       necessary (see Sem_Warn.Check_Unset_Reference).

--    Used_As_Generic_Actual (Flag222)
--       Defined in all entities, set if the entity is used as an argument to
--       a generic instantiation. Used to tune certain warning messages, and
--       in checking type conformance within an instantiation that involves
--       incomplete formal and actual types.

--    Uses_Lock_Free (Flag188)
--       Defined in protected type entities. Set to True when the Lock Free
--       implementation is used for the protected type. This implementation is
--       based on atomic transactions and doesn't require anymore the use of
--       Protection object (see System.Tasking.Protected_Objects).

--    Uses_Sec_Stack (Flag95)
--       Defined in scope entities (blocks, entries, entry families, functions,
--       loops, and procedures). Set to True when the secondary stack is used
--       in this scope and must be released on exit unless flag
--       Sec_Stack_Needed_For_Return is set.

--    Validated_Object (Node38)
--       Defined in variables. Contains the object whose value is captured by
--       the variable for validity check purposes.

--    Warnings_Off (Flag96)
--       Defined in all entities. Set if a pragma Warnings (Off, entity-name)
--       is used to suppress warnings for a given entity. It is also used by
--       the compiler in some situations to kill spurious warnings. Note that
--       clients should generally not test this flag directly, but instead
--       use function Has_Warnings_Off.

--    Warnings_Off_Used (Flag236)
--       Defined in all entities. Can only be set if Warnings_Off is set. If
--       set indicates that a warning was suppressed by the Warnings_Off flag,
--       and Unmodified/Unreferenced would not have suppressed the warning.

--    Warnings_Off_Used_Unmodified (Flag237)
--       Defined in all entities. Can only be set if Warnings_Off is set and
--       Has_Pragma_Unmodified is not set. If set indicates that a warning was
--       suppressed by the Warnings_Off status but that pragma Unmodified
--       would also have suppressed the warning.

--    Warnings_Off_Used_Unreferenced (Flag238)
--       Defined in all entities. Can only be set if Warnings_Off is set and
--       Has_Pragma_Unreferenced is not set. If set indicates that a warning
--       was suppressed by the Warnings_Off status but that pragma Unreferenced
--       would also have suppressed the warning.

--    Was_Hidden (Flag196)
--       Defined in all entities. Used to save the value of the Is_Hidden
--       attribute when the limited-view is installed (Ada 2005: AI-217).

--    Wrapped_Entity (Node27)
--       Defined in functions and procedures which have been classified as
--       Is_Primitive_Wrapper. Set to the entity being wrapper.

---------------------------
-- Renaming and Aliasing --
---------------------------

--  Several entity attributes relate to renaming constructs, and to the use of
--  different names to refer to the same entity. The following is a summary of
--  these constructs and their prefered uses.

--  There are three related attributes:

--    Renamed_Entity
--    Renamed_Object
--    Alias

--  They all overlap because they are supposed to apply to different entity
--  kinds. They are semantically related, and have the following intended uses:

--  a) Renamed_Entity applies to entities in renaming declarations that rename
--  an entity, so the value of the attribute IS an entity. This applies to
--  generic renamings, package renamings, exception renamings, and subprograms
--  renamings that rename a subprogram (rather than an attribute, an entry, a
--  protected operation, etc).

--  b) Alias applies to overloadable entities, and the value is an overloadable
--  entity. So this is a subset of the previous one. We use the term Alias to
--  cover both renamings and inherited operations, because both cases are
--  handled in the same way when expanding a call. Namely the Alias of a given
--  subprogram is the subprogram that will actually be called.

--  Both a) and b) are set transitively, so that in fact it is not necessary to
--  traverse chains of renamings when looking for the original entity: it's
--  there in one step (this is done when analyzing renaming declarations other
--  than object renamings in sem_ch8).

--  c) Renamed_Object applies to constants and variables. Given that the name
--  in an object renaming declaration is not necessarily an entity name, the
--  value of the attribute is the tree for that name, eg AR (1).Comp. The case
--  when that name is in fact an entity is not handled specially. This is why
--  in a few cases we need to use a loop to trace a chain of object renamings
--  where all of them happen to be entities. So:

--    X : integer;
--    Y : integer renames X;   -- renamed object is the identifier X
--    Z : integer renames Y;   -- renamed object is the identifier Y

--  The front-end does not store explicitly the fact that Z renames X.

--------------------------------------
-- Delayed Freezing and Elaboration --
--------------------------------------

--  The flag Has_Delayed_Freeze indicates that an entity carries an explicit
--  freeze node, which appears later in the expanded tree.

--  a) The flag is used by the front-end to trigger expansion actions
--  which include the generation of that freeze node. Typically this happens at
--  the end of the current compilation unit, or before the first subprogram
--  body is encountered in the current unit. See files freeze and exp_ch13 for
--  details on the actions triggered by a freeze node, which include the
--  construction of initialization procedures and dispatch tables.

--  b) The flag is used by the backend to defer elaboration of the entity until
--  its freeze node is seen. In the absence of an explicit freeze node, an
--  entity is frozen (and elaborated) at the point of declaration.

--  For object declarations, the flag is set when an address clause for the
--  object is encountered. Legality checks on the address expression only
--  take place at the freeze point of the object.

--  Most types have an explicit freeze node, because they cannot be elaborated
--  until all representation and operational items that apply to them have been
--  analyzed. Private types and incomplete types have the flag set as well, as
--  do task and protected types.

--  Implicit base types created for type derivations, as well as classwide
--  types created for all tagged types, have the flag set.

--  If a subprogram has an access parameter whose designated type is incomplete
--  the subprogram has the flag set.

------------------
-- Access Kinds --
------------------

--  The following entity kinds are introduced by the corresponding type
--  definitions:

--    E_Access_Type,
--    E_General_Access_Type,
--    E_Access_Subprogram_Type,
--    E_Anonymous_Access_Subprogram_Type,
--    E_Access_Protected_Subprogram_Type,
--    E_Anonymous_Access_Protected_Subprogram_Type
--    E_Anonymous_Access_Type.

--  E_Access_Subtype is for an access subtype created by a subtype
--  declaration.

--  In addition, we define the kind E_Allocator_Type to label allocators.
--  This is because special resolution rules apply to this construct.
--  Eventually the constructs are labeled with the access type imposed by
--  the context. The backend should never see types with this Ekind.

--  Similarly, the type E_Access_Attribute_Type is used as the initial kind
--  associated with an access attribute. After resolution a specific access
--  type will be established as determined by the context.

--  Finally, the type Any_Access is used to label -null- during type
--  resolution. Any_Access is also replaced by the context type after
--  resolution.

--------------------------------
-- Classification of Entities --
--------------------------------

--  The classification of program entities which follows is a refinement of
--  the list given in RM 3.1(1). E.g., separate entities denote subtypes of
--  different type classes. Ada 95 entities include class wide types,
--  protected types, subprogram types, generalized access types, generic
--  formal derived types and generic formal packages.

--  The order chosen for these kinds allows us to classify related entities
--  so that they are contiguous. As a result, they do not appear in the
--  exact same order as their order of first appearance in the LRM (For
--  example, private types are listed before packages). The contiguity
--  allows us to define useful subtypes (see below) such as type entities,
--  overloaded entities, etc.

--  Each entity (explicitly or implicitly declared) has a kind, which is
--  a value of the following type:

   type Entity_Kind is (

      E_Void,
      --  The initial Ekind value for a newly created entity. Also used as the
      --  Ekind for Standard_Void_Type, a type entity in Standard used as a
      --  dummy type for the return type of a procedure (the reason we create
      --  this type is to share the circuits for performing overload resolution
      --  on calls).

      -------------
      -- Objects --
      -------------

      E_Component,
      --  Components of a record declaration, private declarations of
      --  protected objects.

      E_Constant,
      --  Constants created by an object declaration with a constant keyword

      E_Discriminant,
      --  A discriminant, created by the use of a discriminant in a type
      --  declaration.

      E_Loop_Parameter,
      --  A loop parameter created by a for loop

      E_Variable,
      --  Variables created by an object declaration with no constant keyword

      ------------------------
      -- Parameter Entities --
      ------------------------

      --  Parameters are also objects

      E_Out_Parameter,
      --  An out parameter of a subprogram or entry

      E_In_Out_Parameter,
      --  An in-out parameter of a subprogram or entry

      E_In_Parameter,
      --  An in parameter of a subprogram or entry

      --------------------------------
      -- Generic Parameter Entities --
      --------------------------------

      --  Generic parameters are also objects

      E_Generic_In_Out_Parameter,
      --  A generic in out parameter, created by the use of a generic in out
      --  parameter in a generic declaration.

      E_Generic_In_Parameter,
      --  A generic in parameter, created by the use of a generic in
      --  parameter in a generic declaration.

      -------------------
      -- Named Numbers --
      -------------------

      E_Named_Integer,
      --  Named numbers created by a number declaration with an integer value

      E_Named_Real,
      --  Named numbers created by a number declaration with a real value

      -----------------------
      -- Enumeration Types --
      -----------------------

      E_Enumeration_Type,
      --  Enumeration types, created by an enumeration type declaration

      E_Enumeration_Subtype,
      --  Enumeration subtypes, created by an explicit or implicit subtype
      --  declaration applied to an enumeration type or subtype.

      -------------------
      -- Numeric Types --
      -------------------

      E_Signed_Integer_Type,
      --  Signed integer type, used for the anonymous base type of the
      --  integer subtype created by an integer type declaration.

      E_Signed_Integer_Subtype,
      --  Signed integer subtype, created by either an integer subtype or
      --  integer type declaration (in the latter case an integer type is
      --  created for the base type, and this is the first named subtype).

      E_Modular_Integer_Type,
      --  Modular integer type, used for the anonymous base type of the
      --  integer subtype created by a modular integer type declaration.

      E_Modular_Integer_Subtype,
      --  Modular integer subtype, created by either an modular subtype
      --  or modular type declaration (in the latter case a modular type
      --  is created for the base type, and this is the first named subtype).

      E_Ordinary_Fixed_Point_Type,
      --  Ordinary fixed type, used for the anonymous base type of the fixed
      --  subtype created by an ordinary fixed point type declaration.

      E_Ordinary_Fixed_Point_Subtype,
      --  Ordinary fixed point subtype, created by either an ordinary fixed
      --  point subtype or ordinary fixed point type declaration (in the
      --  latter case a fixed point type is created for the base type, and
      --  this is the first named subtype).

      E_Decimal_Fixed_Point_Type,
      --  Decimal fixed type, used for the anonymous base type of the decimal
      --  fixed subtype created by an ordinary fixed point type declaration.

      E_Decimal_Fixed_Point_Subtype,
      --  Decimal fixed point subtype, created by either a decimal fixed point
      --  subtype or decimal fixed point type declaration (in the latter case
      --  a fixed point type is created for the base type, and this is the
      --  first named subtype).

      E_Floating_Point_Type,
      --  Floating point type, used for the anonymous base type of the
      --  floating point subtype created by a floating point type declaration.

      E_Floating_Point_Subtype,

      --  Floating point subtype, created by either a floating point subtype
      --  or floating point type declaration (in the latter case a floating
      --  point type is created for the base type, and this is the first
      --  named subtype).

      ------------------
      -- Access Types --
      ------------------

      E_Access_Type,
      --  An access type created by an access type declaration with no all
      --  keyword present. Note that the predefined type Any_Access, which
      --  has E_Access_Type Ekind, is used to label NULL in the upwards pass
      --  of type analysis, to be replaced by the true access type in the
      --  downwards resolution pass.

      E_Access_Subtype,
      --  An access subtype created by a subtype declaration for any access
      --  type (whether or not it is a general access type).

      E_Access_Attribute_Type,
      --  An access type created for an access attribute (one of 'Access,
      --  'Unrestricted_Access, or Unchecked_Access).

      E_Allocator_Type,
      --  A special internal type used to label allocators and references to
      --  objects using 'Reference. This is needed because special resolution
      --  rules apply to these constructs. On the resolution pass, this type
      --  is almost always replaced by the actual access type, but if the
      --  context does not provide one, the backend will see Allocator_Type
      --  itself (which will already have been frozen).

      E_General_Access_Type,
      --  An access type created by an access type declaration with the all
      --  keyword present.

      E_Access_Subprogram_Type,
      --  An access-to-subprogram type, created by an access-to-subprogram
      --  declaration.

      E_Access_Protected_Subprogram_Type,
      --  An access to a protected subprogram, created by the corresponding
      --  declaration. Values of such a type denote both a protected object
      --  and a protected operation within, and have different compile-time
      --  and run-time properties than other access-to-subprogram values.

      E_Anonymous_Access_Protected_Subprogram_Type,
      --  An anonymous access-to-protected-subprogram type, created by an
      --  access-to-subprogram declaration.

      E_Anonymous_Access_Subprogram_Type,
      --  An anonymous access-to-subprogram type, created by an access-to-
      --  subprogram declaration, or generated for a current instance of
      --  a type name appearing within a component definition that has an
      --  anonymous access-to-subprogram type.

      E_Anonymous_Access_Type,
      --  An anonymous access type created by an access parameter or access
      --  discriminant.

      ---------------------
      -- Composite Types --
      ---------------------

      E_Array_Type,
      --  An array type created by an array type declaration. Includes all
      --  cases of arrays, except for string types.

      E_Array_Subtype,
      --  An array subtype, created by an explicit array subtype declaration,
      --  or the use of an anonymous array subtype.

      E_String_Literal_Subtype,
      --  A special string subtype, used only to describe the type of a string
      --  literal (will always be one dimensional, with literal bounds).

      E_Class_Wide_Type,
      --  A class wide type, created by any tagged type declaration (i.e. if
      --  a tagged type is declared, the corresponding class type is always
      --  created, using this Ekind value).

      E_Class_Wide_Subtype,
      --  A subtype of a class wide type, created by a subtype declaration
      --  used to declare a subtype of a class type.

      E_Record_Type,
      --  A record type, created by a record type declaration

      E_Record_Subtype,
      --  A record subtype, created by a record subtype declaration

      E_Record_Type_With_Private,
      --  Used for types defined by a private extension declaration,
      --  and for tagged private types. Includes the fields for both
      --  private types and for record types (with the sole exception of
      --  Corresponding_Concurrent_Type which is obviously not needed). This
      --  entity is considered to be both a record type and a private type.

      E_Record_Subtype_With_Private,
      --  A subtype of a type defined by a private extension declaration

      E_Private_Type,
      --  A private type, created by a private type declaration that has
      --  neither the keyword limited nor the keyword tagged.

      E_Private_Subtype,
      --  A subtype of a private type, created by a subtype declaration used
      --  to declare a subtype of a private type.

      E_Limited_Private_Type,
      --  A limited private type, created by a private type declaration that
      --  has the keyword limited, but not the keyword tagged.

      E_Limited_Private_Subtype,
      --  A subtype of a limited private type, created by a subtype declaration
      --  used to declare a subtype of a limited private type.

      E_Incomplete_Type,
      --  An incomplete type, created by an incomplete type declaration

      E_Incomplete_Subtype,
      --  An incomplete subtype, created by a subtype declaration where the
      --  subtype mark denotes an incomplete type.

      E_Task_Type,
      --  A task type, created by a task type declaration. An entity with this
      --  Ekind is also created to describe the anonymous type of a task that
      --  is created by a single task declaration.

      E_Task_Subtype,
      --  A subtype of a task type, created by a subtype declaration used to
      --  declare a subtype of a task type.

      E_Protected_Type,
      --  A protected type, created by a protected type declaration. An entity
      --  with this Ekind is also created to describe the anonymous type of
      --  a protected object created by a single protected declaration.

      E_Protected_Subtype,
      --  A subtype of a protected type, created by a subtype declaration used
      --  to declare a subtype of a protected type.

      -----------------
      -- Other Types --
      -----------------

      E_Exception_Type,
      --  The type of an exception created by an exception declaration

      E_Subprogram_Type,
      --  This is the designated type of an Access_To_Subprogram. Has type and
      --  signature like a subprogram entity, so can appear in calls, which
      --  are resolved like regular calls, except that such an entity is not
      --  overloadable.

      ---------------------------
      -- Overloadable Entities --
      ---------------------------

      E_Enumeration_Literal,
      --  An enumeration literal, created by the use of the literal in an
      --  enumeration type definition.

      E_Function,
      --  A function, created by a function declaration or a function body
      --  that acts as its own declaration.

      E_Operator,
      --  A predefined operator, appearing in Standard, or an implicitly
      --  defined concatenation operator created whenever an array is declared.
      --  We do not make normal derived operators explicit in the tree, but the
      --  concatenation operators are made explicit.

      E_Procedure,
      --  A procedure, created by a procedure declaration or a procedure
      --  body that acts as its own declaration.

      E_Abstract_State,
      --  A state abstraction. Used to designate entities introduced by aspect
      --  or pragma Abstract_State. The entity carries the various properties
      --  of the state.

      E_Entry,
      --  An entry, created by an entry declaration in a task or protected
      --  object.

      --------------------
      -- Other Entities --
      --------------------

      E_Entry_Family,
      --  An entry family, created by an entry family declaration in a
      --  task or protected type definition.

      E_Block,
      --  A block identifier, created by an explicit or implicit label on
      --  a block or declare statement.

      E_Entry_Index_Parameter,
      --  An entry index parameter created by an entry index specification
      --  for the body of a protected entry family.

      E_Exception,
      --  An exception created by an exception declaration. The exception
      --  itself uses E_Exception for the Ekind, the implicit type that is
      --  created to represent its type uses the Ekind E_Exception_Type.

      E_Generic_Function,
      --  A generic function. This is the entity for a generic function
      --  created by a generic subprogram declaration.

      E_Generic_Procedure,
      --  A generic function. This is the entity for a generic procedure
      --  created by a generic subprogram declaration.

      E_Generic_Package,
      --  A generic package, this is the entity for a generic package created
      --  by a generic package declaration.

      E_Label,
      --  The defining entity for a label. Note that this is created by the
      --  implicit label declaration, not the occurrence of the label itself,
      --  which is simply a direct name referring to the label.

      E_Loop,
      --  A loop identifier, created by an explicit or implicit label on a
      --  loop statement.

      E_Return_Statement,
      --  A dummy entity created for each return statement. Used to hold
      --  information about the return statement (what it applies to) and in
      --  rules checking. For example, a simple_return_statement that applies
      --  to an extended_return_statement cannot have an expression; this
      --  requires putting the E_Return_Statement entity for the
      --  extended_return_statement on the scope stack.

      E_Package,
      --  A package, created by a package declaration

      E_Package_Body,
      --  A package body. This entity serves only limited functions, since
      --  most semantic analysis uses the package entity (E_Package). However
      --  there are some attributes that are significant for the body entity.
      --  For example, collection of exception handlers.

      E_Protected_Object,
      --  A protected object, created by an object declaration that declares
      --  an object of a protected type.

      E_Protected_Body,
      --  A protected body. This entity serves almost no function, since all
      --  semantic analysis uses the protected entity (E_Protected_Type).

      E_Task_Body,
      --  A task body. This entity serves almost no function, since all
      --  semantic analysis uses the protected entity (E_Task_Type).

      E_Subprogram_Body
      --  A subprogram body. Used when a subprogram has a separate declaration
      --  to represent the entity for the body. This entity serves almost no
      --  function, since all semantic analysis uses the subprogram entity
      --  for the declaration (E_Function or E_Procedure).
   );

   for Entity_Kind'Size use 8;
   --  The data structures in Atree assume this

   --------------------------
   -- Subtype Declarations --
   --------------------------

   --  The above entities are arranged so that they can be conveniently grouped
   --  into subtype ranges. Note that for each of the xxx_Kind ranges defined
   --  below, there is a corresponding Is_xxx (or for types, Is_xxx_Type)
   --  predicate which is to be used in preference to direct range tests using
   --  the subtype name. However, the subtype names are available for direct
   --  use, e.g. as choices in case statements.

   subtype Access_Kind                 is Entity_Kind range
       E_Access_Type ..
   --  E_Access_Subtype
   --  E_Access_Attribute_Type
   --  E_Allocator_Type
   --  E_General_Access_Type
   --  E_Access_Subprogram_Type
   --  E_Access_Protected_Subprogram_Type
   --  E_Anonymous_Access_Protected_Subprogram_Type
   --  E_Anonymous_Access_Subprogram_Type
       E_Anonymous_Access_Type;

   subtype Access_Subprogram_Kind      is Entity_Kind range
       E_Access_Subprogram_Type ..
   --  E_Access_Protected_Subprogram_Type
   --  E_Anonymous_Access_Protected_Subprogram_Type
       E_Anonymous_Access_Subprogram_Type;

   subtype Access_Protected_Kind       is Entity_Kind range
      E_Access_Protected_Subprogram_Type ..
      E_Anonymous_Access_Protected_Subprogram_Type;

   subtype Aggregate_Kind              is Entity_Kind range
       E_Array_Type ..
   --  E_Array_Subtype
   --  E_String_Literal_Subtype
   --  E_Class_Wide_Type
   --  E_Class_Wide_Subtype
   --  E_Record_Type
       E_Record_Subtype;

   subtype Anonymous_Access_Kind       is Entity_Kind range
       E_Anonymous_Access_Protected_Subprogram_Type ..
   --  E_Anonymous_Subprogram_Type
       E_Anonymous_Access_Type;

   subtype Array_Kind                  is Entity_Kind range
       E_Array_Type ..
   --  E_Array_Subtype
       E_String_Literal_Subtype;

   subtype Assignable_Kind             is Entity_Kind range
       E_Variable ..
   --  E_Out_Parameter
       E_In_Out_Parameter;

   subtype Class_Wide_Kind             is Entity_Kind range
       E_Class_Wide_Type ..
       E_Class_Wide_Subtype;

   subtype Composite_Kind              is Entity_Kind range
       E_Array_Type ..
   --  E_Array_Subtype
   --  E_String_Literal_Subtype
   --  E_Class_Wide_Type
   --  E_Class_Wide_Subtype
   --  E_Record_Type
   --  E_Record_Subtype
   --  E_Record_Type_With_Private
   --  E_Record_Subtype_With_Private
   --  E_Private_Type
   --  E_Private_Subtype
   --  E_Limited_Private_Type
   --  E_Limited_Private_Subtype
   --  E_Incomplete_Type
   --  E_Incomplete_Subtype
   --  E_Task_Type
   --  E_Task_Subtype,
   --  E_Protected_Type,
       E_Protected_Subtype;

   subtype Concurrent_Kind             is Entity_Kind range
       E_Task_Type ..
   --  E_Task_Subtype,
   --  E_Protected_Type,
       E_Protected_Subtype;

   subtype Concurrent_Body_Kind        is Entity_Kind range
       E_Protected_Body ..
       E_Task_Body;

   subtype Decimal_Fixed_Point_Kind    is Entity_Kind range
       E_Decimal_Fixed_Point_Type ..
       E_Decimal_Fixed_Point_Subtype;

   subtype Digits_Kind                 is Entity_Kind range
       E_Decimal_Fixed_Point_Type ..
   --  E_Decimal_Fixed_Point_Subtype
   --  E_Floating_Point_Type
       E_Floating_Point_Subtype;

   subtype Discrete_Kind               is Entity_Kind range
       E_Enumeration_Type ..
   --  E_Enumeration_Subtype
   --  E_Signed_Integer_Type
   --  E_Signed_Integer_Subtype
   --  E_Modular_Integer_Type
       E_Modular_Integer_Subtype;

   subtype Discrete_Or_Fixed_Point_Kind is Entity_Kind range
       E_Enumeration_Type ..
   --  E_Enumeration_Subtype
   --  E_Signed_Integer_Type
   --  E_Signed_Integer_Subtype
   --  E_Modular_Integer_Type
   --  E_Modular_Integer_Subtype
   --  E_Ordinary_Fixed_Point_Type
   --  E_Ordinary_Fixed_Point_Subtype
   --  E_Decimal_Fixed_Point_Type
       E_Decimal_Fixed_Point_Subtype;

   subtype Elementary_Kind             is Entity_Kind range
       E_Enumeration_Type ..
   --  E_Enumeration_Subtype
   --  E_Signed_Integer_Type
   --  E_Signed_Integer_Subtype
   --  E_Modular_Integer_Type
   --  E_Modular_Integer_Subtype
   --  E_Ordinary_Fixed_Point_Type
   --  E_Ordinary_Fixed_Point_Subtype
   --  E_Decimal_Fixed_Point_Type
   --  E_Decimal_Fixed_Point_Subtype
   --  E_Floating_Point_Type
   --  E_Floating_Point_Subtype
   --  E_Access_Type
   --  E_Access_Subtype
   --  E_Access_Attribute_Type
   --  E_Allocator_Type
   --  E_General_Access_Type
   --  E_Access_Subprogram_Type
   --  E_Access_Protected_Subprogram_Type
   --  E_Anonymous_Access_Protected_Subprogram_Type
   --  E_Anonymous_Access_Subprogram_Type
       E_Anonymous_Access_Type;

   subtype Enumeration_Kind            is Entity_Kind range
       E_Enumeration_Type ..
       E_Enumeration_Subtype;

   subtype Entry_Kind                  is Entity_Kind range
       E_Entry ..
       E_Entry_Family;

   subtype Fixed_Point_Kind            is Entity_Kind range
       E_Ordinary_Fixed_Point_Type ..
   --  E_Ordinary_Fixed_Point_Subtype
   --  E_Decimal_Fixed_Point_Type
       E_Decimal_Fixed_Point_Subtype;

   subtype Float_Kind                  is Entity_Kind range
       E_Floating_Point_Type ..
       E_Floating_Point_Subtype;

   subtype Formal_Kind                 is Entity_Kind range
       E_Out_Parameter ..
   --  E_In_Out_Parameter
       E_In_Parameter;

   subtype Formal_Object_Kind          is Entity_Kind range
       E_Generic_In_Out_Parameter ..
       E_Generic_In_Parameter;

   subtype Generic_Subprogram_Kind     is Entity_Kind range
       E_Generic_Function ..
       E_Generic_Procedure;

   subtype Generic_Unit_Kind           is Entity_Kind range
       E_Generic_Function ..
   --  E_Generic_Procedure
       E_Generic_Package;

   subtype Incomplete_Kind             is Entity_Kind range
       E_Incomplete_Type ..
       E_Incomplete_Subtype;

   subtype Incomplete_Or_Private_Kind  is Entity_Kind range
       E_Record_Type_With_Private ..
   --  E_Record_Subtype_With_Private
   --  E_Private_Type
   --  E_Private_Subtype
   --  E_Limited_Private_Type
   --  E_Limited_Private_Subtype
   --  E_Incomplete_Type
       E_Incomplete_Subtype;

   subtype Integer_Kind                is Entity_Kind range
       E_Signed_Integer_Type ..
   --  E_Signed_Integer_Subtype
   --  E_Modular_Integer_Type
       E_Modular_Integer_Subtype;

   subtype Modular_Integer_Kind        is Entity_Kind range
       E_Modular_Integer_Type ..
       E_Modular_Integer_Subtype;

   subtype Named_Kind                  is Entity_Kind range
       E_Named_Integer ..
       E_Named_Real;

   subtype Numeric_Kind                is Entity_Kind range
       E_Signed_Integer_Type ..
   --  E_Signed_Integer_Subtype
   --  E_Modular_Integer_Type
   --  E_Modular_Integer_Subtype
   --  E_Ordinary_Fixed_Point_Type
   --  E_Ordinary_Fixed_Point_Subtype
   --  E_Decimal_Fixed_Point_Type
   --  E_Decimal_Fixed_Point_Subtype
   --  E_Floating_Point_Type
       E_Floating_Point_Subtype;

   subtype Object_Kind                 is Entity_Kind range
       E_Component ..
   --  E_Constant
   --  E_Discriminant
   --  E_Loop_Parameter
   --  E_Variable
   --  E_Out_Parameter
   --  E_In_Out_Parameter
   --  E_In_Parameter
   --  E_Generic_In_Out_Parameter
       E_Generic_In_Parameter;

   subtype Ordinary_Fixed_Point_Kind   is Entity_Kind range
       E_Ordinary_Fixed_Point_Type ..
       E_Ordinary_Fixed_Point_Subtype;

   subtype Overloadable_Kind           is Entity_Kind range
       E_Enumeration_Literal ..
   --  E_Function
   --  E_Operator
   --  E_Procedure
   --  E_Abstract_State
       E_Entry;

   subtype Private_Kind                is Entity_Kind range
       E_Record_Type_With_Private ..
   --  E_Record_Subtype_With_Private
   --  E_Private_Type
   --  E_Private_Subtype
   --  E_Limited_Private_Type
       E_Limited_Private_Subtype;

   subtype Protected_Kind              is Entity_Kind range
       E_Protected_Type ..
       E_Protected_Subtype;

   subtype Real_Kind                   is Entity_Kind range
       E_Ordinary_Fixed_Point_Type ..
   --  E_Ordinary_Fixed_Point_Subtype
   --  E_Decimal_Fixed_Point_Type
   --  E_Decimal_Fixed_Point_Subtype
   --  E_Floating_Point_Type
       E_Floating_Point_Subtype;

   subtype Record_Kind                 is Entity_Kind range
       E_Class_Wide_Type ..
   --  E_Class_Wide_Subtype
   --  E_Record_Type
   --  E_Record_Subtype
   --  E_Record_Type_With_Private
       E_Record_Subtype_With_Private;

   subtype Scalar_Kind                 is Entity_Kind range
       E_Enumeration_Type ..
   --  E_Enumeration_Subtype
   --  E_Signed_Integer_Type
   --  E_Signed_Integer_Subtype
   --  E_Modular_Integer_Type
   --  E_Modular_Integer_Subtype
   --  E_Ordinary_Fixed_Point_Type
   --  E_Ordinary_Fixed_Point_Subtype
   --  E_Decimal_Fixed_Point_Type
   --  E_Decimal_Fixed_Point_Subtype
   --  E_Floating_Point_Type
       E_Floating_Point_Subtype;

   subtype Subprogram_Kind             is Entity_Kind range
       E_Function ..
   --  E_Operator
       E_Procedure;

   subtype Signed_Integer_Kind         is Entity_Kind range
       E_Signed_Integer_Type ..
       E_Signed_Integer_Subtype;

   subtype Task_Kind                   is Entity_Kind range
       E_Task_Type ..
       E_Task_Subtype;

   subtype Type_Kind                   is Entity_Kind range
       E_Enumeration_Type ..
   --  E_Enumeration_Subtype
   --  E_Signed_Integer_Type
   --  E_Signed_Integer_Subtype
   --  E_Modular_Integer_Type
   --  E_Modular_Integer_Subtype
   --  E_Ordinary_Fixed_Point_Type
   --  E_Ordinary_Fixed_Point_Subtype
   --  E_Decimal_Fixed_Point_Type
   --  E_Decimal_Fixed_Point_Subtype
   --  E_Floating_Point_Type
   --  E_Floating_Point_Subtype
   --  E_Access_Type
   --  E_Access_Subtype
   --  E_Access_Attribute_Type
   --  E_Allocator_Type,
   --  E_General_Access_Type
   --  E_Access_Subprogram_Type,
   --  E_Access_Protected_Subprogram_Type
   --  E_Anonymous_Access_Protected_Subprogram_Type
   --  E_Anonymous_Access_Subprogram_Type
   --  E_Anonymous_Access_Type
   --  E_Array_Type
   --  E_Array_Subtype
   --  E_String_Literal_Subtype
   --  E_Class_Wide_Subtype
   --  E_Class_Wide_Type
   --  E_Record_Type
   --  E_Record_Subtype
   --  E_Record_Type_With_Private
   --  E_Record_Subtype_With_Private
   --  E_Private_Type
   --  E_Private_Subtype
   --  E_Limited_Private_Type
   --  E_Limited_Private_Subtype
   --  E_Incomplete_Type
   --  E_Incomplete_Subtype
   --  E_Task_Type
   --  E_Task_Subtype
   --  E_Protected_Type
   --  E_Protected_Subtype
   --  E_Exception_Type
       E_Subprogram_Type;

   --------------------------------------------------------
   -- Description of Defined Attributes for Entity_Kinds --
   --------------------------------------------------------

   --  For each enumeration value defined in Entity_Kind we list all the
   --  attributes defined in Einfo which can legally be applied to an entity
   --  of that kind. The implementation of the attribute functions (and for
   --  non-synthesized attributes, of the corresponding set procedures) are
   --  in the Einfo body.

   --  The following attributes are defined in all entities

   --    Ekind                               (Ekind)

   --    Chars                               (Name1)
   --    Next_Entity                         (Node2)
   --    Scope                               (Node3)
   --    Homonym                             (Node4)
   --    Etype                               (Node5)
   --    First_Rep_Item                      (Node6)
   --    Freeze_Node                         (Node7)
   --    Prev_Entity                         (Node36)
   --    Associated_Entity                   (Node37)

   --    Address_Taken                       (Flag104)
   --    Can_Never_Be_Null                   (Flag38)
   --    Checks_May_Be_Suppressed            (Flag31)
   --    Debug_Info_Off                      (Flag166)
   --    Has_Convention_Pragma               (Flag119)
   --    Has_Delayed_Aspects                 (Flag200)
   --    Has_Delayed_Freeze                  (Flag18)
   --    Has_Fully_Qualified_Name            (Flag173)
   --    Has_Gigi_Rep_Item                   (Flag82)
   --    Has_Homonym                         (Flag56)
   --    Has_Pragma_Elaborate_Body           (Flag150)
   --    Has_Pragma_Inline                   (Flag157)
   --    Has_Pragma_Inline_Always            (Flag230)
   --    Has_Pragma_No_Inline                (Flag201)
   --    Has_Pragma_Pure                     (Flag203)
   --    Has_Pragma_Pure_Function            (Flag179)
   --    Has_Pragma_Thread_Local_Storage     (Flag169)
   --    Has_Pragma_Unmodified               (Flag233)
   --    Has_Pragma_Unreferenced             (Flag180)
   --    Has_Pragma_Unused                   (Flag294)
   --    Has_Private_Declaration             (Flag155)
   --    Has_Qualified_Name                  (Flag161)
   --    Has_Stream_Size_Clause              (Flag184)
   --    Has_Unknown_Discriminants           (Flag72)
   --    Has_Xref_Entry                      (Flag182)
   --    In_Private_Part                     (Flag45)
   --    Is_Ada_2005_Only                    (Flag185)
   --    Is_Ada_2012_Only                    (Flag199)
   --    Is_Bit_Packed_Array                 (Flag122)  (base type only)
   --    Is_Aliased                          (Flag15)
   --    Is_Character_Type                   (Flag63)
   --    Is_Checked_Ghost_Entity             (Flag277)
   --    Is_Child_Unit                       (Flag73)
   --    Is_Compilation_Unit                 (Flag149)
   --    Is_Descendant_Of_Address            (Flag223)
   --    Is_Discrim_SO_Function              (Flag176)
   --    Is_Discriminant_Check_Function      (Flag264)
   --    Is_Dispatch_Table_Entity            (Flag234)
   --    Is_Dispatching_Operation            (Flag6)
   --    Is_Entry_Formal                     (Flag52)
   --    Is_Exported                         (Flag99)
   --    Is_First_Subtype                    (Flag70)
   --    Is_Formal_Subprogram                (Flag111)
   --    Is_Generic_Instance                 (Flag130)
   --    Is_Generic_Type                     (Flag13)
   --    Is_Hidden                           (Flag57)
   --    Is_Hidden_Open_Scope                (Flag171)
   --    Is_Ignored_Ghost_Entity             (Flag278)
   --    Is_Immediately_Visible              (Flag7)
   --    Is_Implementation_Defined           (Flag254)
   --    Is_Imported                         (Flag24)
   --    Is_Inlined                          (Flag11)
   --    Is_Internal                         (Flag17)
   --    Is_Itype                            (Flag91)
   --    Is_Known_Non_Null                   (Flag37)
   --    Is_Known_Null                       (Flag204)
   --    Is_Known_Valid                      (Flag170)
   --    Is_Limited_Composite                (Flag106)
   --    Is_Limited_Record                   (Flag25)
   --    Is_Loop_Parameter                   (Flag307)
   --    Is_Obsolescent                      (Flag153)
   --    Is_Package_Body_Entity              (Flag160)
   --    Is_Packed_Array_Impl_Type           (Flag138)
   --    Is_Potentially_Use_Visible          (Flag9)
   --    Is_Preelaborated                    (Flag59)
   --    Is_Primitive_Wrapper                (Flag195)
   --    Is_Public                           (Flag10)
   --    Is_Pure                             (Flag44)
   --    Is_Remote_Call_Interface            (Flag62)
   --    Is_Remote_Types                     (Flag61)
   --    Is_Renaming_Of_Object               (Flag112)
   --    Is_Shared_Passive                   (Flag60)
   --    Is_Statically_Allocated             (Flag28)
   --    Is_Static_Type                      (Flag281)
   --    Is_Tagged_Type                      (Flag55)
   --    Is_Thunk                            (Flag225)
   --    Is_Trivial_Subprogram               (Flag235)
   --    Is_Unchecked_Union                  (Flag117)
   --    Is_Unimplemented                    (Flag284)
   --    Is_Visible_Formal                   (Flag206)
   --    Kill_Elaboration_Checks             (Flag32)
   --    Kill_Range_Checks                   (Flag33)
   --    Low_Bound_Tested                    (Flag205)
   --    Materialize_Entity                  (Flag168)
   --    Needs_Debug_Info                    (Flag147)
   --    Never_Set_In_Source                 (Flag115)
   --    No_Return                           (Flag113)
   --    Overlays_Constant                   (Flag243)
   --    Referenced                          (Flag156)
   --    Referenced_As_LHS                   (Flag36)
   --    Referenced_As_Out_Parameter         (Flag227)
   --    Suppress_Elaboration_Warnings       (Flag303)
   --    Suppress_Style_Checks               (Flag165)
   --    Suppress_Value_Tracking_On_Call     (Flag217)
   --    Used_As_Generic_Actual              (Flag222)
   --    Warnings_Off                        (Flag96)
   --    Warnings_Off_Used                   (Flag236)
   --    Warnings_Off_Used_Unmodified        (Flag237)
   --    Warnings_Off_Used_Unreferenced      (Flag238)
   --    Was_Hidden                          (Flag196)

   --    Declaration_Node                    (synth)
   --    Has_Foreign_Convention              (synth)
   --    Is_Dynamic_Scope                    (synth)
   --    Is_Ghost_Entity                     (synth)
   --    Is_Standard_Character_Type          (synth)
   --    Is_Standard_String_Type             (synth)
   --    Underlying_Type                     (synth)
   --    all classification attributes       (synth)

   --  The following list of access functions applies to all entities for
   --  types and subtypes. References to this list appear subsequently as
   --  "(plus type attributes)" for each appropriate Entity_Kind.

   --    Associated_Node_For_Itype           (Node8)
   --    Class_Wide_Type                     (Node9)
   --    Full_View                           (Node11)
   --    Esize                               (Uint12)
   --    RM_Size                             (Uint13)
   --    Alignment                           (Uint14)
   --    Pending_Access_Types                (Elist15)
   --    Related_Expression                  (Node24)
   --    Current_Use_Clause                  (Node27)
   --    Subprograms_For_Type                (Elist29)
   --    Derived_Type_Link                   (Node31)
   --    No_Tagged_Streams_Pragma            (Node32)
   --    Linker_Section_Pragma               (Node33)
   --    SPARK_Pragma                        (Node40)

   --    Depends_On_Private                  (Flag14)
   --    Disable_Controlled                  (Flag253)
   --    Discard_Names                       (Flag88)
   --    Finalize_Storage_Only               (Flag158)  (base type only)
   --    From_Limited_With                   (Flag159)
   --    Has_Aliased_Components              (Flag135)  (base type only)
   --    Has_Alignment_Clause                (Flag46)
   --    Has_Atomic_Components               (Flag86)   (base type only)
   --    Has_Completion_In_Body              (Flag71)
   --    Has_Complex_Representation          (Flag140)  (base type only)
   --    Has_Constrained_Partial_View        (Flag187)
   --    Has_Controlled_Component            (Flag43)   (base type only)
   --    Has_Default_Aspect                  (Flag39)   (base type only)
   --    Has_Delayed_Rep_Aspects             (Flag261)
   --    Has_Discriminants                   (Flag5)
   --    Has_Dynamic_Predicate_Aspect        (Flag258)
   --    Has_Independent_Components          (Flag34)   (base type only)
   --    Has_Inheritable_Invariants          (Flag248)  (base type only)
   --    Has_Inherited_DIC                   (Flag133)  (base type only)
   --    Has_Inherited_Invariants            (Flag291)  (base type only)
   --    Has_Non_Standard_Rep                (Flag75)   (base type only)
   --    Has_Object_Size_Clause              (Flag172)
   --    Has_Own_DIC                         (Flag3)    (base type only)
   --    Has_Own_Invariants                  (Flag232)  (base type only)
   --    Has_Pragma_Preelab_Init             (Flag221)
   --    Has_Pragma_Unreferenced_Objects     (Flag212)
   --    Has_Predicates                      (Flag250)
   --    Has_Primitive_Operations            (Flag120)  (base type only)
   --    Has_Protected                       (Flag271)  (base type only)
   --    Has_Size_Clause                     (Flag29)
   --    Has_Specified_Layout                (Flag100)  (base type only)
   --    Has_Specified_Stream_Input          (Flag190)
   --    Has_Specified_Stream_Output         (Flag191)
   --    Has_Specified_Stream_Read           (Flag192)
   --    Has_Specified_Stream_Write          (Flag193)
   --    Has_Static_Predicate                (Flag269)
   --    Has_Static_Predicate_Aspect         (Flag259)
   --    Has_Task                            (Flag30)   (base type only)
   --    Has_Timing_Event                    (Flag289)  (base type only)
   --    Has_Unchecked_Union                 (Flag123)  (base type only)
   --    Has_Volatile_Components             (Flag87)   (base type only)
   --    In_Use                              (Flag8)
   --    Is_Abstract_Type                    (Flag146)
   --    Is_Asynchronous                     (Flag81)
   --    Is_Atomic                           (Flag85)
   --    Is_Constr_Subt_For_U_Nominal        (Flag80)
   --    Is_Constr_Subt_For_UN_Aliased       (Flag141)
   --    Is_Controlled_Active                (Flag42)   (base type only)
   --    Is_Eliminated                       (Flag124)
   --    Is_Frozen                           (Flag4)
   --    Is_Generic_Actual_Type              (Flag94)
   --    Is_Independent                      (Flag268)
   --    Is_Non_Static_Subtype               (Flag109)
   --    Is_Packed                           (Flag51)   (base type only)
   --    Is_Private_Composite                (Flag107)
   --    Is_RACW_Stub_Type                   (Flag244)
   --    Is_Unsigned_Type                    (Flag144)
   --    Is_Volatile                         (Flag16)
   --    Is_Volatile_Full_Access             (Flag285)
   --    Itype_Printed                       (Flag202)  (itypes only)
   --    Known_To_Have_Preelab_Init          (Flag207)
   --    May_Inherit_Delayed_Rep_Aspects     (Flag262)
   --    Must_Be_On_Byte_Boundary            (Flag183)
   --    Must_Have_Preelab_Init              (Flag208)
   --    Optimize_Alignment_Space            (Flag241)
   --    Optimize_Alignment_Time             (Flag242)
   --    Partial_View_Has_Unknown_Discr      (Flag280)
   --    Size_Depends_On_Discriminant        (Flag177)
   --    Size_Known_At_Compile_Time          (Flag92)
   --    SPARK_Pragma_Inherited              (Flag265)
   --    Strict_Alignment                    (Flag145)  (base type only)
   --    Suppress_Initialization             (Flag105)
   --    Treat_As_Volatile                   (Flag41)
   --    Universal_Aliasing                  (Flag216)  (impl base type only)

   --    Alignment_Clause                    (synth)
   --    Base_Type                           (synth)
   --    DIC_Procedure                       (synth)
   --    Has_DIC                             (synth)
   --    Has_Invariants                      (synth)
   --    Implementation_Base_Type            (synth)
   --    Invariant_Procedure                 (synth)
   --    Is_Access_Protected_Subprogram_Type (synth)
   --    Is_Atomic_Or_VFA                    (synth)
   --    Is_Controlled                       (synth)
   --    Object_Size_Clause                  (synth)
   --    Partial_Invariant_Procedure         (synth)
   --    Predicate_Function                  (synth)
   --    Predicate_Function_M                (synth)
   --    Root_Type                           (synth)
   --    Size_Clause                         (synth)

   ------------------------------------------
   -- Applicable attributes by entity kind --
   ------------------------------------------

   --  E_Abstract_State
   --    Refinement_Constituents             (Elist8)
   --    Part_Of_Constituents                (Elist10)
   --    Body_References                     (Elist16)
   --    Non_Limited_View                    (Node19)
   --    Encapsulating_State                 (Node32)
   --    SPARK_Pragma                        (Node40)
   --    From_Limited_With                   (Flag159)
   --    Has_Partial_Visible_Refinement      (Flag296)
   --    Has_Visible_Refinement              (Flag263)
   --    SPARK_Pragma_Inherited              (Flag265)
   --    Has_Non_Limited_View                (synth)
   --    Has_Non_Null_Visible_Refinement     (synth)
   --    Has_Null_Visible_Refinement         (synth)
   --    Is_External_State                   (synth)
   --    Is_Null_State                       (synth)
   --    Is_Synchronized_State               (synth)
   --    Partial_Refinement_Constituents     (synth)

   --  E_Access_Protected_Subprogram_Type
   --    Equivalent_Type                     (Node18)
   --    Directly_Designated_Type            (Node20)
   --    Needs_No_Actuals                    (Flag22)
   --    Can_Use_Internal_Rep                (Flag229)
   --    (plus type attributes)

   --  E_Access_Subprogram_Type
   --    Equivalent_Type                     (Node18)   (remote types only)
   --    Directly_Designated_Type            (Node20)
   --    Needs_No_Actuals                    (Flag22)
   --    Original_Access_Type                (Node28)
   --    Can_Use_Internal_Rep                (Flag229)
   --    Needs_Activation_Record             (Flag306)
   --    (plus type attributes)

   --  E_Access_Type
   --  E_Access_Subtype
   --    Master_Id                           (Node17)
   --    Directly_Designated_Type            (Node20)
   --    Associated_Storage_Pool             (Node22)   (base type only)
   --    Finalization_Master                 (Node23)   (base type only)
   --    Storage_Size_Variable               (Node26)   (base type only)
   --    Has_Pragma_Controlled               (Flag27)   (base type only)
   --    Has_Storage_Size_Clause             (Flag23)   (base type only)
   --    Is_Access_Constant                  (Flag69)
   --    Is_Local_Anonymous_Access           (Flag194)
   --    Is_Pure_Unit_Access_Type            (Flag189)
   --    No_Pool_Assigned                    (Flag131)  (base type only)
   --    No_Strict_Aliasing                  (Flag136)  (base type only)
   --    Is_Param_Block_Component_Type       (Flag215)  (base type only)
   --    (plus type attributes)

   --  E_Access_Attribute_Type
   --    Directly_Designated_Type            (Node20)
   --    (plus type attributes)

   --  E_Allocator_Type
   --    Directly_Designated_Type            (Node20)
   --    (plus type attributes)

   --  E_Anonymous_Access_Subprogram_Type
   --  E_Anonymous_Access_Protected_Subprogram_Type
   --    Directly_Designated_Type            (Node20)
   --    Storage_Size_Variable               (Node26)   ??? is this needed ???
   --    Can_Use_Internal_Rep                (Flag229)
   --    Needs_Activation_Record             (Flag306)
   --    (plus type attributes)

   --  E_Anonymous_Access_Type
   --    Directly_Designated_Type            (Node20)
   --    Finalization_Master                 (Node23)
   --    Storage_Size_Variable               (Node26)   ??? is this needed ???
   --    (plus type attributes)

   --  E_Array_Type
   --  E_Array_Subtype
   --    First_Index                         (Node17)
   --    Default_Aspect_Component_Value      (Node19)   (base type only)
   --    Component_Type                      (Node20)   (base type only)
   --    Original_Array_Type                 (Node21)
   --    Component_Size                      (Uint22)   (base type only)
   --    Packed_Array_Impl_Type              (Node23)
   --    Related_Array_Object                (Node25)
   --    Predicated_Parent                   (Node38)   (subtype only)
   --    Component_Alignment                 (special)  (base type only)
   --    Has_Component_Size_Clause           (Flag68)   (base type only)
   --    Has_Pragma_Pack                     (Flag121)  (impl base type only)
   --    Is_Constrained                      (Flag12)
   --    Reverse_Storage_Order               (Flag93)   (base type only)
   --    SSO_Set_High_By_Default             (Flag273)  (base type only)
   --    SSO_Set_Low_By_Default              (Flag272)  (base type only)
   --    Next_Index                          (synth)
   --    Number_Dimensions                   (synth)
   --    (plus type attributes)

   --  E_Block
   --    Block_Node                          (Node11)
   --    First_Entity                        (Node17)
   --    Last_Entity                         (Node20)
   --    Scope_Depth_Value                   (Uint22)
   --    Entry_Cancel_Parameter              (Node23)
   --    Contains_Ignored_Ghost_Code         (Flag279)
   --    Delay_Cleanups                      (Flag114)
   --    Discard_Names                       (Flag88)
   --    Has_Master_Entity                   (Flag21)
   --    Has_Nested_Block_With_Handler       (Flag101)
   --    Is_Exception_Handler                (Flag286)
   --    Sec_Stack_Needed_For_Return         (Flag167)
   --    Uses_Sec_Stack                      (Flag95)
   --    Scope_Depth                         (synth)

   --  E_Class_Wide_Type
   --  E_Class_Wide_Subtype
   --    Direct_Primitive_Operations         (Elist10)
   --    Cloned_Subtype                      (Node16)   (subtype case only)
   --    First_Entity                        (Node17)
   --    Equivalent_Type                     (Node18)   (always Empty for type)
   --    Non_Limited_View                    (Node19)
   --    Last_Entity                         (Node20)
   --    SSO_Set_High_By_Default             (Flag273)  (base type only)
   --    SSO_Set_Low_By_Default              (Flag272)  (base type only)
   --    First_Component                     (synth)
   --    First_Component_Or_Discriminant     (synth)
   --    Has_Non_Limited_View                (synth)
   --    (plus type attributes)

   --  E_Component
   --    Normalized_First_Bit                (Uint8)
   --    Current_Value                       (Node9)    (always Empty)
   --    Normalized_Position_Max             (Uint10)
   --    Component_Bit_Offset                (Uint11)
   --    Esize                               (Uint12)
   --    Component_Clause                    (Node13)
   --    Normalized_Position                 (Uint14)
   --    DT_Entry_Count                      (Uint15)
   --    Entry_Formal                        (Node16)
   --    Prival                              (Node17)
   --    Renamed_Object                      (Node18)   (always Empty)
   --    Discriminant_Checking_Func          (Node20)
   --    Corresponding_Record_Component      (Node21)
   --    Original_Record_Component           (Node22)
   --    DT_Offset_To_Top_Func               (Node25)
   --    Related_Type                        (Node27)
   --    Has_Biased_Representation           (Flag139)
   --    Has_Per_Object_Constraint           (Flag154)
   --    Is_Atomic                           (Flag85)
   --    Is_Independent                      (Flag268)
   --    Is_Return_Object                    (Flag209)
   --    Is_Tag                              (Flag78)
   --    Is_Volatile                         (Flag16)
   --    Is_Volatile_Full_Access             (Flag285)
   --    Treat_As_Volatile                   (Flag41)
   --    Is_Atomic_Or_VFA                    (synth)
   --    Next_Component                      (synth)
   --    Next_Component_Or_Discriminant      (synth)

   --  E_Constant
   --  E_Loop_Parameter
   --    Current_Value                       (Node9)    (always Empty)
   --    Discriminal_Link                    (Node10)
   --    Full_View                           (Node11)
   --    Esize                               (Uint12)
   --    Extra_Accessibility                 (Node13)   (constants only)
   --    Alignment                           (Uint14)
   --    Status_Flag_Or_Transient_Decl       (Node15)
   --    Actual_Subtype                      (Node17)
   --    Renamed_Object                      (Node18)
   --    Size_Check_Code                     (Node19)   (constants only)
   --    Prival_Link                         (Node20)   (privals only)
   --    Interface_Name                      (Node21)   (constants only)
   --    Related_Type                        (Node27)   (constants only)
   --    Initialization_Statements           (Node28)
   --    BIP_Initialization_Call             (Node29)
   --    Last_Aggregate_Assignment           (Node30)
   --    Activation_Record_Component         (Node31)
   --    Encapsulating_State                 (Node32)   (constants only)
   --    Linker_Section_Pragma               (Node33)
   --    Contract                            (Node34)   (constants only)
   --    SPARK_Pragma                        (Node40)   (constants only)
   --    Has_Alignment_Clause                (Flag46)
   --    Has_Atomic_Components               (Flag86)
   --    Has_Biased_Representation           (Flag139)
   --    Has_Completion                      (Flag26)   (constants only)
   --    Has_Independent_Components          (Flag34)
   --    Has_Size_Clause                     (Flag29)
   --    Has_Thunks                          (Flag228)  (constants only)
   --    Has_Volatile_Components             (Flag87)
   --    Is_Atomic                           (Flag85)
   --    Is_Elaboration_Checks_OK_Id         (Flag148)  (constants only)
   --    Is_Elaboration_Warnings_OK_Id       (Flag304)  (constants only)
   --    Is_Eliminated                       (Flag124)
   --    Is_Finalized_Transient              (Flag252)
   --    Is_Ignored_Transient                (Flag295)
   --    Is_Independent                      (Flag268)
   --    Is_Return_Object                    (Flag209)
   --    Is_True_Constant                    (Flag163)
   --    Is_Uplevel_Referenced_Entity        (Flag283)
   --    Is_Volatile                         (Flag16)
   --    Is_Volatile_Full_Access             (Flag285)
   --    Optimize_Alignment_Space            (Flag241)  (constants only)
   --    Optimize_Alignment_Time             (Flag242)  (constants only)
   --    SPARK_Pragma_Inherited              (Flag265)  (constants only)
   --    Stores_Attribute_Old_Prefix         (Flag270)  (constants only)
   --    Treat_As_Volatile                   (Flag41)
   --    Address_Clause                      (synth)
   --    Alignment_Clause                    (synth)
   --    Is_Atomic_Or_VFA                    (synth)
   --    Is_Elaboration_Target               (synth)
   --    Size_Clause                         (synth)

   --  E_Decimal_Fixed_Point_Type
   --  E_Decimal_Fixed_Subtype
   --    Scale_Value                         (Uint16)
   --    Digits_Value                        (Uint17)
   --    Scalar_Range                        (Node20)
   --    Delta_Value                         (Ureal18)
   --    Small_Value                         (Ureal21)
   --    Static_Real_Or_String_Predicate     (Node25)
   --    Has_Machine_Radix_Clause            (Flag83)
   --    Machine_Radix_10                    (Flag84)
   --    Aft_Value                           (synth)
   --    Type_Low_Bound                      (synth)
   --    Type_High_Bound                     (synth)
   --    (plus type attributes)

   --  E_Discriminant
   --    Normalized_First_Bit                (Uint8)
   --    Current_Value                       (Node9)    (always Empty)
   --    Normalized_Position_Max             (Uint10)
   --    Component_Bit_Offset                (Uint11)
   --    Esize                               (Uint12)
   --    Component_Clause                    (Node13)
   --    Normalized_Position                 (Uint14)
   --    Discriminant_Number                 (Uint15)
   --    Discriminal                         (Node17)
   --    Renamed_Object                      (Node18)   (always Empty)
   --    Corresponding_Discriminant          (Node19)
   --    Discriminant_Default_Value          (Node20)
   --    Corresponding_Record_Component      (Node21)
   --    Original_Record_Component           (Node22)
   --    CR_Discriminant                     (Node23)
   --    Is_Completely_Hidden                (Flag103)
   --    Is_Return_Object                    (Flag209)
   --    Next_Component_Or_Discriminant      (synth)
   --    Next_Discriminant                   (synth)
   --    Next_Stored_Discriminant            (synth)

   --  E_Entry
   --  E_Entry_Family
   --    Protected_Body_Subprogram           (Node11)
   --    Barrier_Function                    (Node12)
   --    Elaboration_Entity                  (Node13)
   --    Postconditions_Proc                 (Node14)
   --    Entry_Parameters_Type               (Node15)
   --    First_Entity                        (Node17)
   --    Alias                               (Node18)   (for entry only. Empty)
   --    Last_Entity                         (Node20)
   --    Accept_Address                      (Elist21)
   --    Scope_Depth_Value                   (Uint22)
   --    Protection_Object                   (Node23)   (protected kind)
   --    Contract_Wrapper                    (Node25)
   --    Extra_Formals                       (Node28)
   --    Contract                            (Node34)
   --    SPARK_Pragma                        (Node40)   (protected kind)
   --    Default_Expressions_Processed       (Flag108)
   --    Entry_Accepted                      (Flag152)
   --    Has_Expanded_Contract               (Flag240)
   --    Ignore_SPARK_Mode_Pragmas           (Flag301)
   --    Is_Elaboration_Checks_OK_Id         (Flag148)
   --    Is_Elaboration_Warnings_OK_Id       (Flag304)
   --    Is_Entry_Wrapper                    (Flag297)
   --    Needs_No_Actuals                    (Flag22)
   --    Sec_Stack_Needed_For_Return         (Flag167)
   --    SPARK_Pragma_Inherited              (Flag265)  (protected kind)
   --    Uses_Sec_Stack                      (Flag95)
   --    Address_Clause                      (synth)
   --    Entry_Index_Type                    (synth)
   --    First_Formal                        (synth)
   --    First_Formal_With_Extras            (synth)
   --    Is_Elaboration_Target               (synth)
   --    Last_Formal                         (synth)
   --    Number_Formals                      (synth)
   --    Scope_Depth                         (synth)

   --  E_Entry_Index_Parameter
   --    Entry_Index_Constant                (Node18)

   --  E_Enumeration_Literal
   --    Enumeration_Pos                     (Uint11)
   --    Enumeration_Rep                     (Uint12)
   --    Alias                               (Node18)
   --    Enumeration_Rep_Expr                (Node22)
   --    Next_Literal                        (synth)

   --  E_Enumeration_Type
   --  E_Enumeration_Subtype
   --    Lit_Strings                         (Node16)   (root type only)
   --    First_Literal                       (Node17)
   --    Lit_Indexes                         (Node18)   (root type only)
   --    Default_Aspect_Value                (Node19)   (base type only)
   --    Scalar_Range                        (Node20)
   --    Enum_Pos_To_Rep                     (Node23)   (type only)
   --    Static_Discrete_Predicate           (List25)
   --    Has_Biased_Representation           (Flag139)
   --    Has_Contiguous_Rep                  (Flag181)
   --    Has_Enumeration_Rep_Clause          (Flag66)
   --    Has_Pragma_Ordered                  (Flag198)  (base type only)
   --    Nonzero_Is_True                     (Flag162)  (base type only)
   --    No_Predicate_On_Actual              (Flag275)
   --    No_Dynamic_Predicate_On_Actual      (Flag276)
   --    Type_Low_Bound                      (synth)
   --    Type_High_Bound                     (synth)
   --    (plus type attributes)

   --  E_Exception
   --    Esize                               (Uint12)
   --    Alignment                           (Uint14)
   --    Renamed_Entity                      (Node18)
   --    Register_Exception_Call             (Node20)
   --    Interface_Name                      (Node21)
   --    Activation_Record_Component         (Node31)
   --    Discard_Names                       (Flag88)
   --    Is_Raised                           (Flag224)

   --  E_Exception_Type
   --    Equivalent_Type                     (Node18)
   --    (plus type attributes)

   --  E_Floating_Point_Type
   --  E_Floating_Point_Subtype
   --    Digits_Value                        (Uint17)
   --    Float_Rep                           (Uint10)   (Float_Rep_Kind)
   --    Default_Aspect_Value                (Node19)   (base type only)
   --    Scalar_Range                        (Node20)
   --    Static_Real_Or_String_Predicate     (Node25)
   --    Machine_Emax_Value                  (synth)
   --    Machine_Emin_Value                  (synth)
   --    Machine_Mantissa_Value              (synth)
   --    Machine_Radix_Value                 (synth)
   --    Model_Emin_Value                    (synth)
   --    Model_Epsilon_Value                 (synth)
   --    Model_Mantissa_Value                (synth)
   --    Model_Small_Value                   (synth)
   --    Safe_Emax_Value                     (synth)
   --    Safe_First_Value                    (synth)
   --    Safe_Last_Value                     (synth)
   --    Type_Low_Bound                      (synth)
   --    Type_High_Bound                     (synth)
   --    (plus type attributes)

   --  E_Function
   --  E_Generic_Function
   --    Mechanism                           (Uint8)    (Mechanism_Type)
   --    Renaming_Map                        (Uint9)
   --    Handler_Records                     (List10)   (non-generic case only)
   --    Protected_Body_Subprogram           (Node11)
   --    Next_Inlined_Subprogram             (Node12)
   --    Elaboration_Entity                  (Node13)   (not implicit /=)
   --    Postconditions_Proc                 (Node14)   (non-generic case only)
   --    DT_Position                         (Uint15)
   --    DTC_Entity                          (Node16)
   --    First_Entity                        (Node17)
   --    Alias                               (Node18)   (non-generic case only)
   --    Renamed_Entity                      (Node18)
   --    Extra_Accessibility_Of_Result       (Node19)   (non-generic case only)
   --    Last_Entity                         (Node20)
   --    Interface_Name                      (Node21)
   --    Scope_Depth_Value                   (Uint22)
   --    Generic_Renamings                   (Elist23)  (for an instance)
   --    Inner_Instances                     (Elist23)  (generic case only)
   --    Protection_Object                   (Node23)   (for concurrent kind)
   --    Subps_Index                         (Uint24)   (non-generic case only)
   --    Interface_Alias                     (Node25)
   --    Overridden_Operation                (Node26)
   --    Wrapped_Entity                      (Node27)   (non-generic case only)
   --    Extra_Formals                       (Node28)
   --    Anonymous_Masters                   (Elist29)  (non-generic case only)
   --    Corresponding_Equality              (Node30)   (implicit /= only)
   --    Thunk_Entity                        (Node31)   (thunk case only)
   --    Corresponding_Procedure             (Node32)   (generate C code only)
   --    Linker_Section_Pragma               (Node33)
   --    Contract                            (Node34)
   --    Import_Pragma                       (Node35)   (non-generic case only)
   --    Class_Wide_Clone                    (Node38)
   --    Protected_Subprogram                (Node39)   (non-generic case only)
   --    SPARK_Pragma                        (Node40)
   --    Original_Protected_Subprogram       (Node41)
   --    Body_Needed_For_SAL                 (Flag40)
   --    Contains_Ignored_Ghost_Code         (Flag279)
   --    Default_Expressions_Processed       (Flag108)
   --    Delay_Cleanups                      (Flag114)
   --    Delay_Subprogram_Descriptors        (Flag50)
   --    Discard_Names                       (Flag88)
   --    Elaboration_Entity_Required         (Flag174)
   --    Has_Completion                      (Flag26)
   --    Has_Controlling_Result              (Flag98)
   --    Has_Expanded_Contract               (Flag240)  (non-generic case only)
   --    Has_Master_Entity                   (Flag21)
   --    Has_Missing_Return                  (Flag142)
   --    Has_Nested_Block_With_Handler       (Flag101)
   --    Has_Nested_Subprogram               (Flag282)
   --    Has_Out_Or_In_Out_Parameter         (Flag110)
   --    Has_Recursive_Call                  (Flag143)
   --    Ignore_SPARK_Mode_Pragmas           (Flag301)
   --    Is_Abstract_Subprogram              (Flag19)   (non-generic case only)
   --    Is_Called                           (Flag102)  (non-generic case only)
   --    Is_Constructor                      (Flag76)
   --    Is_DIC_Procedure                    (Flag132)  (non-generic case only)
   --    Is_Discrim_SO_Function              (Flag176)
   --    Is_Discriminant_Check_Function      (Flag264)
   --    Is_Elaboration_Checks_OK_Id         (Flag148)
   --    Is_Elaboration_Warnings_OK_Id       (Flag304)
   --    Is_Eliminated                       (Flag124)
   --    Is_Generic_Actual_Subprogram        (Flag274)  (non-generic case only)
   --    Is_Hidden_Non_Overridden_Subpgm     (Flag2)    (non-generic case only)
   --    Is_Initial_Condition_Procedure      (Flag302)  (non-generic case only)
   --    Is_Inlined_Always                   (Flag1)    (non-generic case only)
   --    Is_Instantiated                     (Flag126)  (generic case only)
   --    Is_Intrinsic_Subprogram             (Flag64)
   --    Is_Invariant_Procedure              (Flag257)  (non-generic case only)
   --    Is_Machine_Code_Subprogram          (Flag137)  (non-generic case only)
   --    Is_Partial_Invariant_Procedure      (Flag292)  (non-generic case only)
   --    Is_Predicate_Function               (Flag255)  (non-generic case only)
   --    Is_Predicate_Function_M             (Flag256)  (non-generic case only)
   --    Is_Primitive                        (Flag218)
   --    Is_Primitive_Wrapper                (Flag195)  (non-generic case only)
   --    Is_Private_Descendant               (Flag53)
   --    Is_Private_Primitive                (Flag245)  (non-generic case only)
   --    Is_Pure                             (Flag44)
   --    Is_Visible_Lib_Unit                 (Flag116)
   --    Needs_No_Actuals                    (Flag22)
   --    Requires_Overriding                 (Flag213)  (non-generic case only)
   --    Return_Present                      (Flag54)
   --    Returns_By_Ref                      (Flag90)
   --    Rewritten_For_C                     (Flag287)  (generate C code only)
   --    Sec_Stack_Needed_For_Return         (Flag167)
   --    SPARK_Pragma_Inherited              (Flag265)
   --    Uses_Sec_Stack                      (Flag95)
   --    Address_Clause                      (synth)
   --    First_Formal                        (synth)
   --    First_Formal_With_Extras            (synth)
   --    Is_Elaboration_Target               (synth)
   --    Last_Formal                         (synth)
   --    Number_Formals                      (synth)
   --    Scope_Depth                         (synth)

   --  E_General_Access_Type
   --    Master_Id                           (Node17)
   --    Directly_Designated_Type            (Node20)
   --    Associated_Storage_Pool             (Node22)   (root type only)
   --    Finalization_Master                 (Node23)   (root type only)
   --    Storage_Size_Variable               (Node26)   (base type only)
   --    (plus type attributes)

   --  E_Generic_In_Parameter
   --  E_Generic_In_Out_Parameter
   --    Current_Value                       (Node9)    (always Empty)
   --    Entry_Component                     (Node11)
   --    Actual_Subtype                      (Node17)
   --    Renamed_Object                      (Node18)   (always Empty)
   --    Default_Value                       (Node20)
   --    Protected_Formal                    (Node22)
   --    Is_Controlling_Formal               (Flag97)
   --    Is_Return_Object                    (Flag209)
   --    Parameter_Mode                      (synth)

   --  E_Incomplete_Type
   --  E_Incomplete_Subtype
   --    Direct_Primitive_Operations         (Elist10)
   --    Non_Limited_View                    (Node19)
   --    Private_Dependents                  (Elist18)
   --    Discriminant_Constraint             (Elist21)
   --    Stored_Constraint                   (Elist23)
   --    Has_Non_Limited_View                (synth)
   --    (plus type attributes)

   --  E_In_Parameter
   --  E_In_Out_Parameter
   --  E_Out_Parameter
   --    Mechanism                           (Uint8)    (Mechanism_Type)
   --    Current_Value                       (Node9)
   --    Discriminal_Link                    (Node10)   (discriminals only)
   --    Entry_Component                     (Node11)
   --    Esize                               (Uint12)
   --    Extra_Accessibility                 (Node13)
   --    Alignment                           (Uint14)
   --    Extra_Formal                        (Node15)
   --    Unset_Reference                     (Node16)
   --    Actual_Subtype                      (Node17)
   --    Renamed_Object                      (Node18)
   --    Spec_Entity                         (Node19)
   --    Default_Value                       (Node20)
   --    Default_Expr_Function               (Node21)
   --    Protected_Formal                    (Node22)
   --    Extra_Constrained                   (Node23)
   --    Minimum_Accessibility               (Node24)
   --    Last_Assignment                     (Node26)   (OUT, IN-OUT only)
   --    Activation_Record_Component         (Node31)
   --    Has_Initial_Value                   (Flag219)
   --    Is_Controlling_Formal               (Flag97)
   --    Is_Only_Out_Parameter               (Flag226)
   --    Low_Bound_Tested                    (Flag205)
   --    Is_Return_Object                    (Flag209)
   --    Is_Activation_Record                (Flag305)
   --    Parameter_Mode                      (synth)

   --  E_Label
   --    Enclosing_Scope                     (Node18)
   --    Reachable                           (Flag49)

   --  E_Limited_Private_Type
   --  E_Limited_Private_Subtype
   --    First_Entity                        (Node17)
   --    Private_Dependents                  (Elist18)
   --    Underlying_Full_View                (Node19)
   --    Last_Entity                         (Node20)
   --    Discriminant_Constraint             (Elist21)
   --    Stored_Constraint                   (Elist23)
   --    Has_Completion                      (Flag26)
   --    (plus type attributes)

   --  E_Loop
   --    First_Exit_Statement                (Node8)
   --    Has_Exit                            (Flag47)
   --    Has_Loop_Entry_Attributes           (Flag260)
   --    Has_Master_Entity                   (Flag21)
   --    Has_Nested_Block_With_Handler       (Flag101)
   --    Uses_Sec_Stack                      (Flag95)

   --  E_Modular_Integer_Type
   --  E_Modular_Integer_Subtype
   --    Modulus                             (Uint17)   (base type only)
   --    Default_Aspect_Value                (Node19)   (base type only)
   --    Original_Array_Type                 (Node21)
   --    Scalar_Range                        (Node20)
   --    Static_Discrete_Predicate           (List25)
   --    Non_Binary_Modulus                  (Flag58)   (base type only)
   --    Has_Biased_Representation           (Flag139)
   --    Has_Shift_Operator                  (Flag267)  (base type only)
   --    No_Predicate_On_Actual              (Flag275)
   --    No_Dynamic_Predicate_On_Actual      (Flag276)
   --    Type_Low_Bound                      (synth)
   --    Type_High_Bound                     (synth)
   --    (plus type attributes)

   --  E_Named_Integer

   --  E_Named_Real

   --  E_Operator
   --    First_Entity                        (Node17)
   --    Alias                               (Node18)
   --    Extra_Accessibility_Of_Result       (Node19)
   --    Last_Entity                         (Node20)
   --    Subps_Index                         (Uint24)
   --    Overridden_Operation                (Node26)
   --    Linker_Section_Pragma               (Node33)
   --    Contract                            (Node34)
   --    Import_Pragma                       (Node35)
   --    SPARK_Pragma                        (Node40)
   --    Default_Expressions_Processed       (Flag108)
   --    Has_Nested_Subprogram               (Flag282)
   --    Ignore_SPARK_Mode_Pragmas           (Flag301)
   --    Is_Elaboration_Checks_OK_Id         (Flag148)
   --    Is_Elaboration_Warnings_OK_Id       (Flag304)
   --    Is_Intrinsic_Subprogram             (Flag64)
   --    Is_Machine_Code_Subprogram          (Flag137)
   --    Is_Primitive                        (Flag218)
   --    Is_Pure                             (Flag44)
   --    SPARK_Pragma_Inherited              (Flag265)
   --    Is_Elaboration_Target               (synth)
   --    Aren't there more flags and fields? seems like this list should be
   --    more similar to the E_Function list, which is much longer ???

   --  E_Ordinary_Fixed_Point_Type
   --  E_Ordinary_Fixed_Point_Subtype
   --    Delta_Value                         (Ureal18)
   --    Default_Aspect_Value                (Node19)   (base type only)
   --    Scalar_Range                        (Node20)
   --    Static_Real_Or_String_Predicate     (Node25)
   --    Small_Value                         (Ureal21)
   --    Has_Small_Clause                    (Flag67)
   --    Aft_Value                           (synth)
   --    Type_Low_Bound                      (synth)
   --    Type_High_Bound                     (synth)
   --    (plus type attributes)

   --  E_Package
   --  E_Generic_Package
   --    Dependent_Instances                 (Elist8)   (for an instance)
   --    Renaming_Map                        (Uint9)
   --    Handler_Records                     (List10)   (non-generic case only)
   --    Generic_Homonym                     (Node11)   (generic case only)
   --    Associated_Formal_Package           (Node12)
   --    Elaboration_Entity                  (Node13)
   --    Related_Instance                    (Node15)   (non-generic case only)
   --    First_Private_Entity                (Node16)
   --    First_Entity                        (Node17)
   --    Renamed_Entity                      (Node18)
   --    Body_Entity                         (Node19)
   --    Last_Entity                         (Node20)
   --    Interface_Name                      (Node21)
   --    Scope_Depth_Value                   (Uint22)
   --    Generic_Renamings                   (Elist23)  (for an instance)
   --    Inner_Instances                     (Elist23)  (generic case only)
   --    Limited_View                        (Node23)   (non-generic/instance)
   --    Incomplete_Actuals                  (Elist24)  (for an instance)
   --    Abstract_States                     (Elist25)
   --    Package_Instantiation               (Node26)
   --    Current_Use_Clause                  (Node27)
   --    Finalizer                           (Node28)   (non-generic case only)
   --    Anonymous_Masters                   (Elist29)  (non-generic case only)
   --    Contract                            (Node34)
   --    SPARK_Pragma                        (Node40)
   --    SPARK_Aux_Pragma                    (Node41)
   --    Body_Needed_For_Inlining            (Flag299)
   --    Body_Needed_For_SAL                 (Flag40)
   --    Contains_Ignored_Ghost_Code         (Flag279)
   --    Delay_Subprogram_Descriptors        (Flag50)
   --    Discard_Names                       (Flag88)
   --    Elaborate_Body_Desirable            (Flag210)  (non-generic case only)
   --    Elaboration_Entity_Required         (Flag174)
   --    From_Limited_With                   (Flag159)
   --    Has_All_Calls_Remote                (Flag79)
   --    Has_Completion                      (Flag26)
   --    Has_Forward_Instantiation           (Flag175)
   --    Has_Master_Entity                   (Flag21)
   --    Has_RACW                            (Flag214)  (non-generic case only)
   --    Ignore_SPARK_Mode_Pragmas           (Flag301)
   --    Is_Called                           (Flag102)  (non-generic case only)
   --    Is_Elaboration_Checks_OK_Id         (Flag148)
   --    Is_Elaboration_Warnings_OK_Id       (Flag304)
   --    Is_Instantiated                     (Flag126)
   --    In_Package_Body                     (Flag48)
   --    Is_Private_Descendant               (Flag53)
   --    In_Use                              (Flag8)
   --    Is_Visible_Lib_Unit                 (Flag116)
   --    Renamed_In_Spec                     (Flag231)  (non-generic case only)
   --    SPARK_Aux_Pragma_Inherited          (Flag266)
   --    SPARK_Pragma_Inherited              (Flag265)
   --    Static_Elaboration_Desired          (Flag77)   (non-generic case only)
   --    Has_Non_Null_Abstract_State         (synth)
   --    Has_Null_Abstract_State             (synth)
   --    Is_Elaboration_Target               (synth)
   --    Is_Wrapper_Package                  (synth)    (non-generic case only)
   --    Scope_Depth                         (synth)

   --  E_Package_Body
   --    Handler_Records                     (List10)   (non-generic case only)
   --    Related_Instance                    (Node15)   (non-generic case only)
   --    First_Entity                        (Node17)
   --    Spec_Entity                         (Node19)
   --    Last_Entity                         (Node20)
   --    Scope_Depth_Value                   (Uint22)
   --    Finalizer                           (Node28)   (non-generic case only)
   --    Contract                            (Node34)
   --    SPARK_Pragma                        (Node40)
   --    SPARK_Aux_Pragma                    (Node41)
   --    Contains_Ignored_Ghost_Code         (Flag279)
   --    Delay_Subprogram_Descriptors        (Flag50)
   --    Ignore_SPARK_Mode_Pragmas           (Flag301)
   --    SPARK_Aux_Pragma_Inherited          (Flag266)
   --    SPARK_Pragma_Inherited              (Flag265)
   --    Scope_Depth                         (synth)

   --  E_Private_Type
   --  E_Private_Subtype
   --    Direct_Primitive_Operations         (Elist10)
   --    First_Entity                        (Node17)
   --    Private_Dependents                  (Elist18)
   --    Underlying_Full_View                (Node19)
   --    Last_Entity                         (Node20)
   --    Discriminant_Constraint             (Elist21)
   --    Stored_Constraint                   (Elist23)
   --    Has_Completion                      (Flag26)
   --    Is_Controlled_Active                (Flag42)   (base type only)
   --    (plus type attributes)

   --  E_Procedure
   --  E_Generic_Procedure
   --    Renaming_Map                        (Uint9)
   --    Handler_Records                     (List10)   (non-generic case only)
   --    Protected_Body_Subprogram           (Node11)
   --    Next_Inlined_Subprogram             (Node12)
   --    Elaboration_Entity                  (Node13)
   --    Postconditions_Proc                 (Node14)   (non-generic case only)
   --    DT_Position                         (Uint15)
   --    DTC_Entity                          (Node16)
   --    First_Entity                        (Node17)
   --    Alias                               (Node18)   (non-generic case only)
   --    Renamed_Entity                      (Node18)
   --    Receiving_Entry                     (Node19)   (non-generic case only)
   --    Last_Entity                         (Node20)
   --    Interface_Name                      (Node21)
   --    Scope_Depth_Value                   (Uint22)
   --    Generic_Renamings                   (Elist23)  (for an instance)
   --    Inner_Instances                     (Elist23)  (generic case only)
   --    Protection_Object                   (Node23)   (for concurrent kind)
   --    Subps_Index                         (Uint24)   (non-generic case only)
   --    Interface_Alias                     (Node25)
   --    Overridden_Operation                (Node26)   (never for init proc)
   --    Wrapped_Entity                      (Node27)   (non-generic case only)
   --    Extra_Formals                       (Node28)
   --    Anonymous_Masters                   (Elist29)  (non-generic case only)
   --    Static_Initialization               (Node30)   (init_proc only)
   --    Thunk_Entity                        (Node31)   (thunk case only)
   --    Corresponding_Function              (Node32)   (generate C code only)
   --    Linker_Section_Pragma               (Node33)
   --    Contract                            (Node34)
   --    Import_Pragma                       (Node35)   (non-generic case only)
   --    Class_Wide_Clone                    (Node38)
   --    Protected_Subprogram                (Node39)   (non-generic case only)
   --    SPARK_Pragma                        (Node40)
   --    Original_Protected_Subprogram       (Node41)
   --    Body_Needed_For_SAL                 (Flag40)
   --    Contains_Ignored_Ghost_Code         (Flag279)
   --    Delay_Cleanups                      (Flag114)
   --    Discard_Names                       (Flag88)
   --    Elaboration_Entity_Required         (Flag174)
   --    Default_Expressions_Processed       (Flag108)
   --    Delay_Cleanups                      (Flag114)
   --    Delay_Subprogram_Descriptors        (Flag50)
   --    Discard_Names                       (Flag88)
   --    Has_Completion                      (Flag26)
   --    Has_Expanded_Contract               (Flag240)  (non-generic case only)
   --    Has_Master_Entity                   (Flag21)
   --    Has_Nested_Block_With_Handler       (Flag101)
   --    Has_Nested_Subprogram               (Flag282)
   --    Ignore_SPARK_Mode_Pragmas           (Flag301)
   --    Is_Abstract_Subprogram              (Flag19)   (non-generic case only)
   --    Is_Asynchronous                     (Flag81)
   --    Is_Called                           (Flag102)  (non-generic case only)
   --    Is_Constructor                      (Flag76)
   --    Is_DIC_Procedure                    (Flag132)  (non-generic case only)
   --    Is_Elaboration_Checks_OK_Id         (Flag148)
   --    Is_Elaboration_Warnings_OK_Id       (Flag304)
   --    Is_Eliminated                       (Flag124)
   --    Is_Generic_Actual_Subprogram        (Flag274)  (non-generic case only)
   --    Is_Hidden_Non_Overridden_Subpgm     (Flag2)    (non-generic case only)
   --    Is_Initial_Condition_Procedure      (Flag302)  (non-generic case only)
   --    Is_Inlined_Always                   (Flag1)    (non-generic case only)
   --    Is_Instantiated                     (Flag126)  (generic case only)
   --    Is_Interrupt_Handler                (Flag89)
   --    Is_Intrinsic_Subprogram             (Flag64)
   --    Is_Invariant_Procedure              (Flag257)  (non-generic case only)
   --    Is_Machine_Code_Subprogram          (Flag137)  (non-generic case only)
   --    Is_Null_Init_Proc                   (Flag178)
   --    Is_Partial_Invariant_Procedure      (Flag292)  (non-generic case only)
   --    Is_Predicate_Function               (Flag255)  (non-generic case only)
   --    Is_Predicate_Function_M             (Flag256)  (non-generic case only)
   --    Is_Primitive                        (Flag218)
   --    Is_Primitive_Wrapper                (Flag195)  (non-generic case only)
   --    Is_Private_Descendant               (Flag53)
   --    Is_Private_Primitive                (Flag245)  (non-generic case only)
   --    Is_Pure                             (Flag44)
   --    Is_Valued_Procedure                 (Flag127)
   --    Is_Visible_Lib_Unit                 (Flag116)
   --    Needs_No_Actuals                    (Flag22)
   --    No_Return                           (Flag113)
   --    Requires_Overriding                 (Flag213)  (non-generic case only)
   --    Sec_Stack_Needed_For_Return         (Flag167)
   --    SPARK_Pragma_Inherited              (Flag265)
   --    Address_Clause                      (synth)
   --    First_Formal                        (synth)
   --    First_Formal_With_Extras            (synth)
   --    Is_Elaboration_Target               (synth)
   --    Is_Finalizer                        (synth)
   --    Last_Formal                         (synth)
   --    Number_Formals                      (synth)

   --  E_Protected_Body
   --    SPARK_Pragma                        (Node40)
   --    Ignore_SPARK_Mode_Pragmas           (Flag301)
   --    SPARK_Pragma_Inherited              (Flag265)
   --    (any others??? First/Last Entity, Scope_Depth???)

   --  E_Protected_Object

   --  E_Protected_Type
   --  E_Protected_Subtype
   --    Direct_Primitive_Operations         (Elist10)
   --    First_Private_Entity                (Node16)
   --    First_Entity                        (Node17)
   --    Corresponding_Record_Type           (Node18)
   --    Entry_Bodies_Array                  (Node19)
   --    Last_Entity                         (Node20)
   --    Discriminant_Constraint             (Elist21)
   --    Scope_Depth_Value                   (Uint22)
   --    Stored_Constraint                   (Elist23)
   --    Anonymous_Object                    (Node30)
   --    Contract                            (Node34)
   --    Entry_Max_Queue_Lengths_Array       (Node35)
   --    SPARK_Aux_Pragma                    (Node41)
   --    Ignore_SPARK_Mode_Pragmas           (Flag301)
   --    SPARK_Aux_Pragma_Inherited          (Flag266)
   --    Uses_Lock_Free                      (Flag188)
   --    First_Component                     (synth)
   --    First_Component_Or_Discriminant     (synth)
   --    Has_Entries                         (synth)
   --    Has_Interrupt_Handler               (synth)
   --    Number_Entries                      (synth)
   --    Scope_Depth                         (synth)
   --    (plus type attributes)

   --  E_Record_Type
   --  E_Record_Subtype
   --    Direct_Primitive_Operations         (Elist10)
   --    Access_Disp_Table                   (Elist16)  (base type only)
   --    Cloned_Subtype                      (Node16)   (subtype case only)
   --    First_Entity                        (Node17)
   --    Corresponding_Concurrent_Type       (Node18)
   --    Parent_Subtype                      (Node19)   (base type only)
   --    Last_Entity                         (Node20)
   --    Discriminant_Constraint             (Elist21)
   --    Corresponding_Remote_Type           (Node22)
   --    Stored_Constraint                   (Elist23)
   --    Interfaces                          (Elist25)
   --    Dispatch_Table_Wrappers             (Elist26)  (base type only)
   --    Underlying_Record_View              (Node28)   (base type only)
   --    Access_Disp_Table_Elab_Flag         (Node30)   (base type only)
   --    Predicated_Parent                   (Node38)   (subtype only)
   --    Component_Alignment                 (special)  (base type only)
   --    C_Pass_By_Copy                      (Flag125)  (base type only)
   --    Has_Dispatch_Table                  (Flag220)  (base tagged type only)
   --    Has_Pragma_Pack                     (Flag121)  (impl base type only)
   --    Has_Private_Ancestor                (Flag151)
   --    Has_Private_Extension               (Flag300)
   --    Has_Record_Rep_Clause               (Flag65)   (base type only)
   --    Has_Static_Discriminants            (Flag211)  (subtype only)
   --    Is_Class_Wide_Equivalent_Type       (Flag35)
   --    Is_Concurrent_Record_Type           (Flag20)
   --    Is_Constrained                      (Flag12)
   --    Is_Controlled_Active                (Flag42)   (base type only)
   --    Is_Interface                        (Flag186)
   --    Is_Limited_Interface                (Flag197)
   --    No_Reordering                       (Flag239)  (base type only)
   --    Reverse_Bit_Order                   (Flag164)  (base type only)
   --    Reverse_Storage_Order               (Flag93)   (base type only)
   --    SSO_Set_High_By_Default             (Flag273)  (base type only)
   --    SSO_Set_Low_By_Default              (Flag272)  (base type only)
   --    First_Component                     (synth)
   --    First_Component_Or_Discriminant     (synth)
   --    (plus type attributes)

   --  E_Record_Type_With_Private
   --  E_Record_Subtype_With_Private
   --    Direct_Primitive_Operations         (Elist10)
   --    First_Entity                        (Node17)
   --    Private_Dependents                  (Elist18)
   --    Underlying_Full_View                (Node19)
   --    Last_Entity                         (Node20)
   --    Discriminant_Constraint             (Elist21)
   --    Stored_Constraint                   (Elist23)
   --    Interfaces                          (Elist25)
   --    Predicated_Parent                   (Node38)   (subtype only)
   --    Has_Completion                      (Flag26)
   --    Has_Private_Ancestor                (Flag151)
   --    Has_Private_Extension               (Flag300)
   --    Has_Record_Rep_Clause               (Flag65)   (base type only)
   --    Is_Concurrent_Record_Type           (Flag20)
   --    Is_Constrained                      (Flag12)
   --    Is_Controlled_Active                (Flag42)   (base type only)
   --    Is_Interface                        (Flag186)
   --    Is_Limited_Interface                (Flag197)
   --    No_Reordering                       (Flag239)  (base type only)
   --    Reverse_Bit_Order                   (Flag164)  (base type only)
   --    Reverse_Storage_Order               (Flag93)   (base type only)
   --    SSO_Set_High_By_Default             (Flag273)  (base type only)
   --    SSO_Set_Low_By_Default              (Flag272)  (base type only)
   --    First_Component                     (synth)
   --    First_Component_Or_Discriminant     (synth)
   --    (plus type attributes)

   --  E_Return_Statement
   --    Return_Applies_To                   (Node8)

   --  E_Signed_Integer_Type
   --  E_Signed_Integer_Subtype
   --    Default_Aspect_Value                (Node19)   (base type only)
   --    Scalar_Range                        (Node20)
   --    Static_Discrete_Predicate           (List25)
   --    Has_Biased_Representation           (Flag139)
   --    Has_Shift_Operator                  (Flag267)  (base type only)
   --    No_Predicate_On_Actual              (Flag275)
   --    No_Dynamic_Predicate_On_Actual      (Flag276)
   --    Type_Low_Bound                      (synth)
   --    Type_High_Bound                     (synth)
   --    (plus type attributes)

   --  E_String_Literal_Subtype
   --    String_Literal_Length               (Uint16)
   --    First_Index                         (Node17)   (always Empty)
   --    String_Literal_Low_Bound            (Node18)
   --    Packed_Array_Impl_Type              (Node23)
   --    (plus type attributes)

   --  E_Subprogram_Body
   --    Mechanism                           (Uint8)
   --    First_Entity                        (Node17)
   --    Corresponding_Protected_Entry       (Node18)
   --    Last_Entity                         (Node20)
   --    Scope_Depth_Value                   (Uint22)
   --    Extra_Formals                       (Node28)
   --    Anonymous_Masters                   (Elist29)
   --    Contract                            (Node34)
   --    SPARK_Pragma                        (Node40)
   --    Contains_Ignored_Ghost_Code         (Flag279)
   --    SPARK_Pragma_Inherited              (Flag265)
   --    Scope_Depth                         (synth)

   --  E_Subprogram_Type
   --    Extra_Accessibility_Of_Result       (Node19)
   --    Directly_Designated_Type            (Node20)
   --    Extra_Formals                       (Node28)
   --    First_Formal                        (synth)
   --    First_Formal_With_Extras            (synth)
   --    Last_Formal                         (synth)
   --    Number_Formals                      (synth)
   --    (plus type attributes)

   --  E_Task_Body
   --    Contract                            (Node34)
   --    SPARK_Pragma                        (Node40)
   --    Ignore_SPARK_Mode_Pragmas           (Flag301)
   --    SPARK_Pragma_Inherited              (Flag265)
   --    (any others??? First/Last Entity, Scope_Depth???)

   --  E_Task_Type
   --  E_Task_Subtype
   --    Direct_Primitive_Operations         (Elist10)
   --    First_Private_Entity                (Node16)
   --    First_Entity                        (Node17)
   --    Corresponding_Record_Type           (Node18)
   --    Last_Entity                         (Node20)
   --    Discriminant_Constraint             (Elist21)
   --    Scope_Depth_Value                   (Uint22)
   --    Stored_Constraint                   (Elist23)
   --    Task_Body_Procedure                 (Node25)
   --    Storage_Size_Variable               (Node26)   (base type only)
   --    Relative_Deadline_Variable          (Node28)   (base type only)
   --    Anonymous_Object                    (Node30)
   --    Contract                            (Node34)
   --    SPARK_Aux_Pragma                    (Node41)
   --    Delay_Cleanups                      (Flag114)
   --    Has_Master_Entity                   (Flag21)
   --    Has_Storage_Size_Clause             (Flag23)   (base type only)
   --    Ignore_SPARK_Mode_Pragmas           (Flag301)
   --    Is_Elaboration_Checks_OK_Id         (Flag148)
   --    Is_Elaboration_Warnings_OK_Id       (Flag304)
   --    SPARK_Aux_Pragma_Inherited          (Flag266)
   --    First_Component                     (synth)
   --    First_Component_Or_Discriminant     (synth)
   --    Has_Entries                         (synth)
   --    Is_Elaboration_Target               (synth)
   --    Number_Entries                      (synth)
   --    Scope_Depth                         (synth)
   --    (plus type attributes)

   --  E_Variable
   --    Hiding_Loop_Variable                (Node8)
   --    Current_Value                       (Node9)
   --    Part_Of_Constituents                (Elist10)
   --    Part_Of_References                  (Elist11)
   --    Esize                               (Uint12)
   --    Extra_Accessibility                 (Node13)
   --    Alignment                           (Uint14)
   --    Status_Flag_Or_Transient_Decl       (Node15)   (transient object only)
   --    Unset_Reference                     (Node16)
   --    Actual_Subtype                      (Node17)
   --    Renamed_Object                      (Node18)
   --    Size_Check_Code                     (Node19)
   --    Prival_Link                         (Node20)
   --    Interface_Name                      (Node21)
   --    Shared_Var_Procs_Instance           (Node22)
   --    Extra_Constrained                   (Node23)
   --    Related_Expression                  (Node24)
   --    Debug_Renaming_Link                 (Node25)
   --    Last_Assignment                     (Node26)
   --    Related_Type                        (Node27)
   --    Initialization_Statements           (Node28)
   --    BIP_Initialization_Call             (Node29)
   --    Last_Aggregate_Assignment           (Node30)
   --    Activation_Record_Component         (Node31)
   --    Encapsulating_State                 (Node32)
   --    Linker_Section_Pragma               (Node33)
   --    Contract                            (Node34)
   --    Anonymous_Designated_Type           (Node35)
   --    Validated_Object                    (Node38)
   --    SPARK_Pragma                        (Node40)
   --    Has_Alignment_Clause                (Flag46)
   --    Has_Atomic_Components               (Flag86)
   --    Has_Biased_Representation           (Flag139)
   --    Has_Independent_Components          (Flag34)
   --    Has_Initial_Value                   (Flag219)
   --    Has_Size_Clause                     (Flag29)
   --    Has_Volatile_Components             (Flag87)
   --    Is_Atomic                           (Flag85)
   --    Is_Elaboration_Checks_OK_Id         (Flag148)
   --    Is_Elaboration_Warnings_OK_Id       (Flag304)
   --    Is_Eliminated                       (Flag124)
   --    Is_Finalized_Transient              (Flag252)
   --    Is_Ignored_Transient                (Flag295)
   --    Is_Independent                      (Flag268)
   --    Is_Return_Object                    (Flag209)
   --    Is_Safe_To_Reevaluate               (Flag249)
   --    Is_Shared_Passive                   (Flag60)
   --    Is_True_Constant                    (Flag163)
   --    Is_Uplevel_Referenced_Entity        (Flag283)
   --    Is_Volatile                         (Flag16)
   --    Is_Volatile_Full_Access             (Flag285)
   --    OK_To_Rename                        (Flag247)
   --    Optimize_Alignment_Space            (Flag241)
   --    Optimize_Alignment_Time             (Flag242)
   --    SPARK_Pragma_Inherited              (Flag265)
   --    Suppress_Initialization             (Flag105)
   --    Treat_As_Volatile                   (Flag41)
   --    Address_Clause                      (synth)
   --    Alignment_Clause                    (synth)
   --    Is_Atomic_Or_VFA                    (synth)
   --    Is_Elaboration_Target               (synth)
   --    Size_Clause                         (synth)

   --  E_Void
   --    Since E_Void is the initial Ekind value of an entity when it is first
   --    created, one might expect that no attributes would be defined on such
   --    an entity until its Ekind field is set. However, in practice, there
   --    are many instances in which fields of an E_Void entity are set in the
   --    code prior to setting the Ekind field. This is not well documented or
   --    well controlled, and needs cleaning up later. Meanwhile, the access
   --    procedures in the body of Einfo permit many, but not all, attributes
   --    to be applied to an E_Void entity, precisely so that this kind of
   --    pre-setting of attributes works. This is really a hole in the dynamic
   --    type checking, since there is no assurance that the eventual Ekind
   --    value will be appropriate for the attributes set, and the consequence
   --    is that the dynamic type checking in the Einfo body is unnecessarily
   --    weak. To be looked at systematically some time ???

   ---------------------------------
   -- Component_Alignment Control --
   ---------------------------------

   --  There are four types of alignment possible for array and record
   --  types, and a field in the type entities contains a value of the
   --  following type indicating which alignment choice applies. For full
   --  details of the meaning of these alignment types, see description
   --  of the Component_Alignment pragma.

   type Component_Alignment_Kind is (
      Calign_Default,          -- default alignment
      Calign_Component_Size,   -- natural alignment for component size
      Calign_Component_Size_4, -- natural for size <= 4, 4 for size >= 4
      Calign_Storage_Unit);    -- all components byte aligned

   -----------------------------------
   -- Floating Point Representation --
   -----------------------------------

   type Float_Rep_Kind is (
      IEEE_Binary,  -- IEEE 754p conforming binary format
      AAMP);        -- AAMP format

   ---------------
   -- Iterators --
   ---------------

   --  In addition to attributes that are stored as plain data, other
   --  attributes are procedural, and require some small amount of
   --  computation. Of course, from the point of view of a user of this
   --  package, the distinction is not visible (even the field information
   --  provided below should be disregarded, as it is subject to change
   --  without notice). A number of attributes appear as lists: lists of
   --  formals, lists of actuals, of discriminants, etc. For these, pairs
   --  of functions are defined, which take the form:

   --      function First_Thing (E : Enclosing_Construct) return Thing;
   --      function Next_Thing (T : Thing) return Thing;

   --  The end of iteration is always signaled by a value of Empty, so that
   --  loops over these chains invariably have the form:

   --      This : Thing;
   --      ...
   --      This := First_Thing (E);

   --      while Present (This) loop
   --         Do_Something_With (This);
   --        ...
   --        This := Next_Thing (This);
   --      end loop;

   -----------------------------------
   -- Handling of Check Suppression --
   -----------------------------------

   --  There are three ways that checks can be suppressed:

   --    1.  At the command line level
   --    2.  At the scope level.
   --    3.  At the entity level.

   --  See spec of Sem in sem.ads for details of the data structures used
   --  to keep track of these various methods for suppressing checks.

   -------------------------------
   -- Handling of Discriminants --
   -------------------------------

   --  During semantic processing, discriminants are separate entities which
   --  reflect the semantic properties and allowed usage of discriminants in
   --  the language.

   --  In the case of discriminants used as bounds, the references are handled
   --  directly, since special processing is needed in any case. However, there
   --  are two circumstances in which discriminants are referenced in a quite
   --  general manner, like any other variables:

   --     In initialization expressions for records. Note that the expressions
   --     used in Priority, Storage_Size, Task_Info and Relative_Deadline
   --     pragmas are effectively in this category, since these pragmas are
   --     converted to initialized record fields in the Corresponding_Record_
   --     Type.

   --     In task and protected bodies, where the discriminant values may be
   --     referenced freely within these bodies. Discriminants can also appear
   --     in bounds of entry families and in defaults of operations.

   --  In both these cases, the discriminants must be treated essentially as
   --  objects. The following approach is used to simplify and minimize the
   --  special processing that is required.

   --  When a record type with discriminants is analyzed, semantic processing
   --  creates the entities for the discriminants. It also creates additional
   --  sets of entities called discriminals, one for each of the discriminants,
   --  and the Discriminal field of the discriminant entity points to this
   --  additional entity, which is initially created as an uninitialized
   --  (E_Void) entity.

   --  During expansion of expressions, any discriminant reference is replaced
   --  by a reference to the corresponding discriminal. When the initialization
   --  procedure for the record is created (there will always be one, since
   --  discriminants are present, see Exp_Ch3 for further details), the
   --  discriminals are used as the entities for the formal parameters of
   --  this initialization procedure. The references to these discriminants
   --  have already been replaced by references to these discriminals, which
   --  are now the formal parameters corresponding to the required objects.

   --  In the case of a task or protected body, the semantics similarly creates
   --  a set of discriminals for the discriminants of the task or protected
   --  type. When the procedure is created for the task body, the parameter
   --  passed in is a reference to the task value type, which contains the
   --  required discriminant values. The expander creates a set of declarations
   --  of the form:

   --      discr_nameD : constant discr_type renames _task.discr_name;

   --  where discr_nameD is the discriminal entity referenced by the task
   --  discriminant, and _task is the task value passed in as the parameter.
   --  Again, any references to discriminants in the task body have been
   --  replaced by the discriminal reference, which is now an object that
   --  contains the required value.

   --  This approach for tasks means that two sets of discriminals are needed
   --  for a task type, one for the initialization procedure, and one for the
   --  task body. This works out nicely, since the semantics allocates one set
   --  for the task itself, and one set for the corresponding record.

   --  The one bit of trickiness arises in making sure that the right set of
   --  discriminals is used at the right time. First the task definition is
   --  processed. Any references to discriminants here are replaced by the
   --  corresponding *task* discriminals (the record type doesn't even exist
   --  yet, since it is constructed as part of the expansion of the task
   --  declaration, which happens after the semantic processing of the task
   --  definition). The discriminants to be used for the corresponding record
   --  are created at the same time as the other discriminals, and held in the
   --  CR_Discriminant field of the discriminant. A use of the discriminant in
   --  a bound for an entry family is replaced with the CR_Discriminant because
   --  it controls the bound of the entry queue array which is a component of
   --  the corresponding record.

   --  Just before the record initialization routine is constructed, the
   --  expander exchanges the task and record discriminals. This has two
   --  effects. First the generation of the record initialization routine
   --  uses the discriminals that are now on the record, which is the set
   --  that used to be on the task, which is what we want.

   --  Second, a new set of (so far unused) discriminals is now on the task
   --  discriminants, and it is this set that will be used for expanding the
   --  task body, and also for the discriminal declarations at the start of
   --  the task body.

   ---------------------------------------------------
   -- Handling of private data in protected objects --
   ---------------------------------------------------

   --  Private components in protected types pose problems similar to those
   --  of discriminants. Private data is visible and can be directly referenced
   --  from protected bodies. However, when protected entries and subprograms
   --  are expanded into corresponding bodies and barrier functions, private
   --  components lose their original context and visibility.

   --  To remedy this side effect of expansion, private components are expanded
   --  into renamings called "privals", by analogy with "discriminals".

   --     private_comp : comp_type renames _object.private_comp;

   --  Prival declarations are inserted during the analysis of subprogram and
   --  entry bodies to ensure proper visibility for any subsequent expansion.
   --  _Object is the formal parameter of the generated corresponding body or
   --  a local renaming which denotes the protected object obtained from entry
   --  parameter _O. Privals receive minimal decoration upon creation and are
   --  categorized as either E_Variable for the general case or E_Constant when
   --  they appear in functions.

   --  Along with the local declarations, each private component carries a
   --  placeholder which references the prival entity in the current body. This
   --  form of indirection is used to resolve name clashes of privals and other
   --  locally visible entities such as parameters, local objects, entry family
   --  indexes or identifiers used in the barrier condition.

   --  When analyzing the statements of a protected subprogram or entry, any
   --  reference to a private component must resolve to the locally declared
   --  prival through normal visibility. In case of name conflicts (the cases
   --  above), the prival is marked as hidden and acts as a weakly declared
   --  entity. As a result, the reference points to the correct entity. When a
   --  private component is denoted by an expanded name (prot_type.comp for
   --  example), the expansion mechanism uses the placeholder of the component
   --  to correct the Entity and Etype of the reference.

   -------------------
   -- Type Synonyms --
   -------------------

   --  The following type synonyms are used to tidy up the function and
   --  procedure declarations that follow, and also to make it possible to meet
   --  the requirement for the XEINFO utility that all function specs must fit
   --  on a single source line.

   subtype B is Boolean;
   subtype C is Component_Alignment_Kind;
   subtype E is Entity_Id;
   subtype F is Float_Rep_Kind;
   subtype M is Mechanism_Type;
   subtype N is Node_Id;
   subtype U is Uint;
   subtype R is Ureal;
   subtype L is Elist_Id;
   subtype S is List_Id;

   --------------------------------
   -- Attribute Access Functions --
   --------------------------------

   --  All attributes are manipulated through a procedural interface. This
   --  section contains the functions used to obtain attribute values which
   --  correspond to values in fields or flags in the entity itself.

   function Abstract_States                     (Id : E) return L;
   function Accept_Address                      (Id : E) return L;
   function Access_Disp_Table                   (Id : E) return L;
   function Access_Disp_Table_Elab_Flag         (Id : E) return E;
   function Activation_Record_Component         (Id : E) return E;
   function Actual_Subtype                      (Id : E) return E;
   function Address_Taken                       (Id : E) return B;
   function Alias                               (Id : E) return E;
   function Alignment                           (Id : E) return U;
   function Anonymous_Designated_Type           (Id : E) return E;
   function Anonymous_Masters                   (Id : E) return L;
   function Anonymous_Object                    (Id : E) return E;
   function Associated_Entity                   (Id : E) return E;
   function Associated_Formal_Package           (Id : E) return E;
   function Associated_Node_For_Itype           (Id : E) return N;
   function Associated_Storage_Pool             (Id : E) return E;
   function Barrier_Function                    (Id : E) return N;
   function BIP_Initialization_Call             (Id : E) return N;
   function Block_Node                          (Id : E) return N;
   function Body_Entity                         (Id : E) return E;
   function Body_Needed_For_SAL                 (Id : E) return B;
   function Body_Needed_For_Inlining            (Id : E) return B;
   function Body_References                     (Id : E) return L;
   function C_Pass_By_Copy                      (Id : E) return B;
   function Can_Never_Be_Null                   (Id : E) return B;
   function Can_Use_Internal_Rep                (Id : E) return B;
   function Checks_May_Be_Suppressed            (Id : E) return B;
   function Class_Wide_Clone                    (Id : E) return E;
   function Class_Wide_Type                     (Id : E) return E;
   function Cloned_Subtype                      (Id : E) return E;
   function Component_Alignment                 (Id : E) return C;
   function Component_Bit_Offset                (Id : E) return U;
   function Component_Clause                    (Id : E) return N;
   function Component_Size                      (Id : E) return U;
   function Component_Type                      (Id : E) return E;
   function Contains_Ignored_Ghost_Code         (Id : E) return B;
   function Contract                            (Id : E) return N;
   function Contract_Wrapper                    (Id : E) return E;
   function Corresponding_Concurrent_Type       (Id : E) return E;
   function Corresponding_Discriminant          (Id : E) return E;
   function Corresponding_Equality              (Id : E) return E;
   function Corresponding_Function              (Id : E) return E;
   function Corresponding_Procedure             (Id : E) return E;
   function Corresponding_Protected_Entry       (Id : E) return E;
   function Corresponding_Record_Component      (Id : E) return E;
   function Corresponding_Record_Type           (Id : E) return E;
   function Corresponding_Remote_Type           (Id : E) return E;
   function CR_Discriminant                     (Id : E) return E;
   function Current_Use_Clause                  (Id : E) return E;
   function Current_Value                       (Id : E) return N;
   function Debug_Info_Off                      (Id : E) return B;
   function Debug_Renaming_Link                 (Id : E) return E;
   function Default_Aspect_Component_Value      (Id : E) return N;
   function Default_Aspect_Value                (Id : E) return N;
   function Default_Expr_Function               (Id : E) return E;
   function Default_Expressions_Processed       (Id : E) return B;
   function Default_Value                       (Id : E) return N;
   function Delay_Cleanups                      (Id : E) return B;
   function Delay_Subprogram_Descriptors        (Id : E) return B;
   function Delta_Value                         (Id : E) return R;
   function Dependent_Instances                 (Id : E) return L;
   function Depends_On_Private                  (Id : E) return B;
   function Derived_Type_Link                   (Id : E) return E;
   function Digits_Value                        (Id : E) return U;
   function Direct_Primitive_Operations         (Id : E) return L;
   function Directly_Designated_Type            (Id : E) return E;
   function Disable_Controlled                  (Id : E) return B;
   function Discard_Names                       (Id : E) return B;
   function Discriminal                         (Id : E) return E;
   function Discriminal_Link                    (Id : E) return E;
   function Discriminant_Checking_Func          (Id : E) return E;
   function Discriminant_Constraint             (Id : E) return L;
   function Discriminant_Default_Value          (Id : E) return N;
   function Discriminant_Number                 (Id : E) return U;
   function Dispatch_Table_Wrappers             (Id : E) return L;
   function DT_Entry_Count                      (Id : E) return U;
   function DT_Offset_To_Top_Func               (Id : E) return E;
   function DT_Position                         (Id : E) return U;
   function DTC_Entity                          (Id : E) return E;
   function Elaborate_Body_Desirable            (Id : E) return B;
   function Elaboration_Entity                  (Id : E) return E;
   function Elaboration_Entity_Required         (Id : E) return B;
   function Encapsulating_State                 (Id : E) return E;
   function Enclosing_Scope                     (Id : E) return E;
   function Entry_Accepted                      (Id : E) return B;
   function Entry_Bodies_Array                  (Id : E) return E;
   function Entry_Cancel_Parameter              (Id : E) return E;
   function Entry_Component                     (Id : E) return E;
   function Entry_Formal                        (Id : E) return E;
   function Entry_Index_Constant                (Id : E) return E;
   function Entry_Index_Type                    (Id : E) return E;
   function Entry_Max_Queue_Lengths_Array       (Id : E) return E;
   function Entry_Parameters_Type               (Id : E) return E;
   function Enum_Pos_To_Rep                     (Id : E) return E;
   function Enumeration_Pos                     (Id : E) return U;
   function Enumeration_Rep                     (Id : E) return U;
   function Enumeration_Rep_Expr                (Id : E) return N;
   function Equivalent_Type                     (Id : E) return E;
   function Esize                               (Id : E) return U;
   function Extra_Accessibility                 (Id : E) return E;
   function Extra_Accessibility_Of_Result       (Id : E) return E;
   function Extra_Constrained                   (Id : E) return E;
   function Extra_Formal                        (Id : E) return E;
   function Extra_Formals                       (Id : E) return E;
   function Finalization_Master                 (Id : E) return E;
   function Finalize_Storage_Only               (Id : E) return B;
   function Finalizer                           (Id : E) return E;
   function First_Entity                        (Id : E) return E;
   function First_Exit_Statement                (Id : E) return N;
   function First_Index                         (Id : E) return N;
   function First_Literal                       (Id : E) return E;
   function First_Private_Entity                (Id : E) return E;
   function First_Rep_Item                      (Id : E) return N;
   function Float_Rep                           (Id : E) return F;
   function Freeze_Node                         (Id : E) return N;
   function From_Limited_With                   (Id : E) return B;
   function Full_View                           (Id : E) return E;
   function Generic_Homonym                     (Id : E) return E;
   function Generic_Renamings                   (Id : E) return L;
   function Handler_Records                     (Id : E) return S;
   function Has_Aliased_Components              (Id : E) return B;
   function Has_Alignment_Clause                (Id : E) return B;
   function Has_All_Calls_Remote                (Id : E) return B;
   function Has_Atomic_Components               (Id : E) return B;
   function Has_Biased_Representation           (Id : E) return B;
   function Has_Completion                      (Id : E) return B;
   function Has_Completion_In_Body              (Id : E) return B;
   function Has_Complex_Representation          (Id : E) return B;
   function Has_Component_Size_Clause           (Id : E) return B;
   function Has_Constrained_Partial_View        (Id : E) return B;
   function Has_Contiguous_Rep                  (Id : E) return B;
   function Has_Controlled_Component            (Id : E) return B;
   function Has_Controlling_Result              (Id : E) return B;
   function Has_Convention_Pragma               (Id : E) return B;
   function Has_Default_Aspect                  (Id : E) return B;
   function Has_Delayed_Aspects                 (Id : E) return B;
   function Has_Delayed_Freeze                  (Id : E) return B;
   function Has_Delayed_Rep_Aspects             (Id : E) return B;
   function Has_DIC                             (Id : E) return B;
   function Has_Discriminants                   (Id : E) return B;
   function Has_Dispatch_Table                  (Id : E) return B;
   function Has_Dynamic_Predicate_Aspect        (Id : E) return B;
   function Has_Enumeration_Rep_Clause          (Id : E) return B;
   function Has_Exit                            (Id : E) return B;
   function Has_Expanded_Contract               (Id : E) return B;
   function Has_Forward_Instantiation           (Id : E) return B;
   function Has_Fully_Qualified_Name            (Id : E) return B;
   function Has_Gigi_Rep_Item                   (Id : E) return B;
   function Has_Homonym                         (Id : E) return B;
   function Has_Implicit_Dereference            (Id : E) return B;
   function Has_Independent_Components          (Id : E) return B;
   function Has_Inheritable_Invariants          (Id : E) return B;
   function Has_Inherited_DIC                   (Id : E) return B;
   function Has_Inherited_Invariants            (Id : E) return B;
   function Has_Initial_Value                   (Id : E) return B;
   function Has_Interrupt_Handler               (Id : E) return B;
   function Has_Invariants                      (Id : E) return B;
   function Has_Loop_Entry_Attributes           (Id : E) return B;
   function Has_Machine_Radix_Clause            (Id : E) return B;
   function Has_Master_Entity                   (Id : E) return B;
   function Has_Missing_Return                  (Id : E) return B;
   function Has_Nested_Block_With_Handler       (Id : E) return B;
   function Has_Nested_Subprogram               (Id : E) return B;
   function Has_Non_Standard_Rep                (Id : E) return B;
   function Has_Object_Size_Clause              (Id : E) return B;
   function Has_Out_Or_In_Out_Parameter         (Id : E) return B;
   function Has_Own_DIC                         (Id : E) return B;
   function Has_Own_Invariants                  (Id : E) return B;
   function Has_Partial_Visible_Refinement      (Id : E) return B;
   function Has_Per_Object_Constraint           (Id : E) return B;
   function Has_Pragma_Controlled               (Id : E) return B;
   function Has_Pragma_Elaborate_Body           (Id : E) return B;
   function Has_Pragma_Inline                   (Id : E) return B;
   function Has_Pragma_Inline_Always            (Id : E) return B;
   function Has_Pragma_No_Inline                (Id : E) return B;
   function Has_Pragma_Ordered                  (Id : E) return B;
   function Has_Pragma_Pack                     (Id : E) return B;
   function Has_Pragma_Preelab_Init             (Id : E) return B;
   function Has_Pragma_Pure                     (Id : E) return B;
   function Has_Pragma_Pure_Function            (Id : E) return B;
   function Has_Pragma_Thread_Local_Storage     (Id : E) return B;
   function Has_Pragma_Unmodified               (Id : E) return B;
   function Has_Pragma_Unreferenced             (Id : E) return B;
   function Has_Pragma_Unreferenced_Objects     (Id : E) return B;
   function Has_Pragma_Unused                   (Id : E) return B;
   function Has_Predicates                      (Id : E) return B;
   function Has_Primitive_Operations            (Id : E) return B;
   function Has_Private_Ancestor                (Id : E) return B;
   function Has_Private_Declaration             (Id : E) return B;
   function Has_Private_Extension               (Id : E) return B;
   function Has_Protected                       (Id : E) return B;
   function Has_Qualified_Name                  (Id : E) return B;
   function Has_RACW                            (Id : E) return B;
   function Has_Record_Rep_Clause               (Id : E) return B;
   function Has_Recursive_Call                  (Id : E) return B;
   function Has_Shift_Operator                  (Id : E) return B;
   function Has_Size_Clause                     (Id : E) return B;
   function Has_Small_Clause                    (Id : E) return B;
   function Has_Specified_Layout                (Id : E) return B;
   function Has_Specified_Stream_Input          (Id : E) return B;
   function Has_Specified_Stream_Output         (Id : E) return B;
   function Has_Specified_Stream_Read           (Id : E) return B;
   function Has_Specified_Stream_Write          (Id : E) return B;
   function Has_Static_Discriminants            (Id : E) return B;
   function Has_Static_Predicate                (Id : E) return B;
   function Has_Static_Predicate_Aspect         (Id : E) return B;
   function Has_Storage_Size_Clause             (Id : E) return B;
   function Has_Stream_Size_Clause              (Id : E) return B;
   function Has_Task                            (Id : E) return B;
   function Has_Timing_Event                    (Id : E) return B;
   function Has_Thunks                          (Id : E) return B;
   function Has_Unchecked_Union                 (Id : E) return B;
   function Has_Unknown_Discriminants           (Id : E) return B;
   function Has_Visible_Refinement              (Id : E) return B;
   function Has_Volatile_Components             (Id : E) return B;
   function Has_Xref_Entry                      (Id : E) return B;
   function Hiding_Loop_Variable                (Id : E) return E;
   function Hidden_In_Formal_Instance           (Id : E) return L;
   function Homonym                             (Id : E) return E;
   function Ignore_SPARK_Mode_Pragmas           (Id : E) return B;
   function Import_Pragma                       (Id : E) return E;
   function Incomplete_Actuals                  (Id : E) return L;
   function In_Package_Body                     (Id : E) return B;
   function In_Private_Part                     (Id : E) return B;
   function In_Use                              (Id : E) return B;
   function Initialization_Statements           (Id : E) return N;
   function Inner_Instances                     (Id : E) return L;
   function Interface_Alias                     (Id : E) return E;
   function Interface_Name                      (Id : E) return N;
   function Interfaces                          (Id : E) return L;
   function Invariants_Ignored                  (Id : E) return B;
   function Is_Abstract_Subprogram              (Id : E) return B;
   function Is_Abstract_Type                    (Id : E) return B;
   function Is_Access_Constant                  (Id : E) return B;
   function Is_Activation_Record                (Id : E) return B;
   function Is_Actual_Subtype                   (Id : E) return B;
   function Is_Ada_2005_Only                    (Id : E) return B;
   function Is_Ada_2012_Only                    (Id : E) return B;
   function Is_Aliased                          (Id : E) return B;
   function Is_Asynchronous                     (Id : E) return B;
   function Is_Atomic                           (Id : E) return B;
   function Is_Atomic_Or_VFA                    (Id : E) return B;
   function Is_Bit_Packed_Array                 (Id : E) return B;
   function Is_Called                           (Id : E) return B;
   function Is_Character_Type                   (Id : E) return B;
   function Is_Checked_Ghost_Entity             (Id : E) return B;
   function Is_Child_Unit                       (Id : E) return B;
   function Is_Class_Wide_Clone                 (Id : E) return B;
   function Is_Class_Wide_Equivalent_Type       (Id : E) return B;
   function Is_Compilation_Unit                 (Id : E) return B;
   function Is_Completely_Hidden                (Id : E) return B;
   function Is_Constr_Subt_For_U_Nominal        (Id : E) return B;
   function Is_Constr_Subt_For_UN_Aliased       (Id : E) return B;
   function Is_Constrained                      (Id : E) return B;
   function Is_Constructor                      (Id : E) return B;
   function Is_Controlled_Active                (Id : E) return B;
   function Is_Controlling_Formal               (Id : E) return B;
   function Is_CPP_Class                        (Id : E) return B;
   function Is_Descendant_Of_Address            (Id : E) return B;
   function Is_DIC_Procedure                    (Id : E) return B;
   function Is_Discrim_SO_Function              (Id : E) return B;
   function Is_Discriminant_Check_Function      (Id : E) return B;
   function Is_Dispatch_Table_Entity            (Id : E) return B;
   function Is_Dispatching_Operation            (Id : E) return B;
   function Is_Elaboration_Checks_OK_Id         (Id : E) return B;
   function Is_Elaboration_Warnings_OK_Id       (Id : E) return B;
   function Is_Eliminated                       (Id : E) return B;
   function Is_Entry_Formal                     (Id : E) return B;
   function Is_Entry_Wrapper                    (Id : E) return B;
   function Is_Exception_Handler                (Id : E) return B;
   function Is_Exported                         (Id : E) return B;
   function Is_Finalized_Transient              (Id : E) return B;
   function Is_First_Subtype                    (Id : E) return B;
   function Is_Frozen                           (Id : E) return B;
   function Is_Generic_Instance                 (Id : E) return B;
   function Is_Hidden                           (Id : E) return B;
   function Is_Hidden_Non_Overridden_Subpgm     (Id : E) return B;
   function Is_Hidden_Open_Scope                (Id : E) return B;
   function Is_Ignored_Ghost_Entity             (Id : E) return B;
   function Is_Ignored_Transient                (Id : E) return B;
   function Is_Immediately_Visible              (Id : E) return B;
   function Is_Implementation_Defined           (Id : E) return B;
   function Is_Imported                         (Id : E) return B;
   function Is_Independent                      (Id : E) return B;
   function Is_Initial_Condition_Procedure      (Id : E) return B;
   function Is_Inlined                          (Id : E) return B;
   function Is_Inlined_Always                   (Id : E) return B;
   function Is_Instantiated                     (Id : E) return B;
   function Is_Interface                        (Id : E) return B;
   function Is_Internal                         (Id : E) return B;
   function Is_Interrupt_Handler                (Id : E) return B;
   function Is_Intrinsic_Subprogram             (Id : E) return B;
   function Is_Invariant_Procedure              (Id : E) return B;
   function Is_Itype                            (Id : E) return B;
   function Is_Known_Non_Null                   (Id : E) return B;
   function Is_Known_Null                       (Id : E) return B;
   function Is_Known_Valid                      (Id : E) return B;
   function Is_Limited_Composite                (Id : E) return B;
   function Is_Limited_Interface                (Id : E) return B;
   function Is_Local_Anonymous_Access           (Id : E) return B;
   function Is_Loop_Parameter                   (Id : E) return B;
   function Is_Machine_Code_Subprogram          (Id : E) return B;
   function Is_Non_Static_Subtype               (Id : E) return B;
   function Is_Null_Init_Proc                   (Id : E) return B;
   function Is_Obsolescent                      (Id : E) return B;
   function Is_Only_Out_Parameter               (Id : E) return B;
   function Is_Package_Body_Entity              (Id : E) return B;
   function Is_Packed                           (Id : E) return B;
   function Is_Packed_Array_Impl_Type           (Id : E) return B;
   function Is_Potentially_Use_Visible          (Id : E) return B;
   function Is_Param_Block_Component_Type       (Id : E) return B;
   function Is_Partial_Invariant_Procedure      (Id : E) return B;
   function Is_Predicate_Function               (Id : E) return B;
   function Is_Predicate_Function_M             (Id : E) return B;
   function Is_Preelaborated                    (Id : E) return B;
   function Is_Primitive                        (Id : E) return B;
   function Is_Primitive_Wrapper                (Id : E) return B;
   function Is_Private_Composite                (Id : E) return B;
   function Is_Private_Descendant               (Id : E) return B;
   function Is_Private_Primitive                (Id : E) return B;
   function Is_Public                           (Id : E) return B;
   function Is_Pure                             (Id : E) return B;
   function Is_Pure_Unit_Access_Type            (Id : E) return B;
   function Is_RACW_Stub_Type                   (Id : E) return B;
   function Is_Raised                           (Id : E) return B;
   function Is_Remote_Call_Interface            (Id : E) return B;
   function Is_Remote_Types                     (Id : E) return B;
   function Is_Renaming_Of_Object               (Id : E) return B;
   function Is_Return_Object                    (Id : E) return B;
   function Is_Safe_To_Reevaluate               (Id : E) return B;
   function Is_Shared_Passive                   (Id : E) return B;
   function Is_Static_Type                      (Id : E) return B;
   function Is_Statically_Allocated             (Id : E) return B;
   function Is_Tag                              (Id : E) return B;
   function Is_Tagged_Type                      (Id : E) return B;
   function Is_Thunk                            (Id : E) return B;
   function Is_Trivial_Subprogram               (Id : E) return B;
   function Is_True_Constant                    (Id : E) return B;
   function Is_Unchecked_Union                  (Id : E) return B;
   function Is_Underlying_Full_View             (Id : E) return B;
   function Is_Underlying_Record_View           (Id : E) return B;
   function Is_Unimplemented                    (Id : E) return B;
   function Is_Unsigned_Type                    (Id : E) return B;
   function Is_Uplevel_Referenced_Entity        (Id : E) return B;
   function Is_Valued_Procedure                 (Id : E) return B;
   function Is_Visible_Formal                   (Id : E) return B;
   function Is_Visible_Lib_Unit                 (Id : E) return B;
   function Is_Volatile                         (Id : E) return B;
   function Is_Volatile_Full_Access             (Id : E) return B;
   function Itype_Printed                       (Id : E) return B;
   function Kill_Elaboration_Checks             (Id : E) return B;
   function Kill_Range_Checks                   (Id : E) return B;
   function Known_To_Have_Preelab_Init          (Id : E) return B;
   function Last_Aggregate_Assignment           (Id : E) return N;
   function Last_Assignment                     (Id : E) return N;
   function Last_Entity                         (Id : E) return E;
   function Limited_View                        (Id : E) return E;
   function Linker_Section_Pragma               (Id : E) return N;
   function Lit_Indexes                         (Id : E) return E;
   function Lit_Strings                         (Id : E) return E;
   function Low_Bound_Tested                    (Id : E) return B;
   function Machine_Radix_10                    (Id : E) return B;
   function Master_Id                           (Id : E) return E;
   function Materialize_Entity                  (Id : E) return B;
   function May_Inherit_Delayed_Rep_Aspects     (Id : E) return B;
   function Mechanism                           (Id : E) return M;
   function Minimum_Accessibility               (Id : E) return E;
   function Modulus                             (Id : E) return U;
   function Must_Be_On_Byte_Boundary            (Id : E) return B;
   function Must_Have_Preelab_Init              (Id : E) return B;
   function Needs_Activation_Record             (Id : E) return B;
   function Needs_Debug_Info                    (Id : E) return B;
   function Needs_No_Actuals                    (Id : E) return B;
   function Never_Set_In_Source                 (Id : E) return B;
   function Next_Inlined_Subprogram             (Id : E) return E;
   function No_Dynamic_Predicate_On_Actual      (Id : E) return B;
   function No_Pool_Assigned                    (Id : E) return B;
   function No_Predicate_On_Actual              (Id : E) return B;
   function No_Reordering                       (Id : E) return B;
   function No_Return                           (Id : E) return B;
   function No_Strict_Aliasing                  (Id : E) return B;
   function No_Tagged_Streams_Pragma            (Id : E) return N;
   function Non_Binary_Modulus                  (Id : E) return B;
   function Non_Limited_View                    (Id : E) return E;
   function Nonzero_Is_True                     (Id : E) return B;
   function Normalized_First_Bit                (Id : E) return U;
   function Normalized_Position                 (Id : E) return U;
   function Normalized_Position_Max             (Id : E) return U;
   function OK_To_Rename                        (Id : E) return B;
   function Optimize_Alignment_Space            (Id : E) return B;
   function Optimize_Alignment_Time             (Id : E) return B;
   function Original_Access_Type                (Id : E) return E;
   function Original_Array_Type                 (Id : E) return E;
   function Original_Protected_Subprogram       (Id : E) return N;
   function Original_Record_Component           (Id : E) return E;
   function Overlays_Constant                   (Id : E) return B;
   function Overridden_Operation                (Id : E) return E;
   function Package_Instantiation               (Id : E) return N;
   function Packed_Array_Impl_Type              (Id : E) return E;
   function Parent_Subtype                      (Id : E) return E;
   function Part_Of_Constituents                (Id : E) return L;
   function Part_Of_References                  (Id : E) return L;
   function Partial_View_Has_Unknown_Discr      (Id : E) return B;
   function Pending_Access_Types                (Id : E) return L;
   function Postconditions_Proc                 (Id : E) return E;
   function Predicated_Parent                   (Id : E) return E;
   function Predicates_Ignored                  (Id : E) return B;
   function Prev_Entity                         (Id : E) return E;
   function Prival                              (Id : E) return E;
   function Prival_Link                         (Id : E) return E;
   function Private_Dependents                  (Id : E) return L;
   function Protected_Body_Subprogram           (Id : E) return E;
   function Protected_Formal                    (Id : E) return E;
   function Protected_Subprogram                (Id : E) return N;
   function Protection_Object                   (Id : E) return E;
   function Reachable                           (Id : E) return B;
   function Receiving_Entry                     (Id : E) return E;
   function Referenced                          (Id : E) return B;
   function Referenced_As_LHS                   (Id : E) return B;
   function Referenced_As_Out_Parameter         (Id : E) return B;
   function Refinement_Constituents             (Id : E) return L;
   function Register_Exception_Call             (Id : E) return N;
   function Related_Array_Object                (Id : E) return E;
   function Related_Expression                  (Id : E) return N;
   function Related_Instance                    (Id : E) return E;
   function Related_Type                        (Id : E) return E;
   function Relative_Deadline_Variable          (Id : E) return E;
   function Renamed_Entity                      (Id : E) return N;
   function Renamed_In_Spec                     (Id : E) return B;
   function Renamed_Object                      (Id : E) return N;
   function Renaming_Map                        (Id : E) return U;
   function Requires_Overriding                 (Id : E) return B;
   function Return_Applies_To                   (Id : E) return N;
   function Return_Present                      (Id : E) return B;
   function Returns_By_Ref                      (Id : E) return B;
   function Reverse_Bit_Order                   (Id : E) return B;
   function Reverse_Storage_Order               (Id : E) return B;
   function Rewritten_For_C                     (Id : E) return B;
   function RM_Size                             (Id : E) return U;
   function Scalar_Range                        (Id : E) return N;
   function Scale_Value                         (Id : E) return U;
   function Scope_Depth_Value                   (Id : E) return U;
   function Sec_Stack_Needed_For_Return         (Id : E) return B;
   function Shared_Var_Procs_Instance           (Id : E) return E;
   function Size_Check_Code                     (Id : E) return N;
   function Size_Depends_On_Discriminant        (Id : E) return B;
   function Size_Known_At_Compile_Time          (Id : E) return B;
   function Small_Value                         (Id : E) return R;
   function SPARK_Aux_Pragma                    (Id : E) return N;
   function SPARK_Aux_Pragma_Inherited          (Id : E) return B;
   function SPARK_Pragma                        (Id : E) return N;
   function SPARK_Pragma_Inherited              (Id : E) return B;
   function Spec_Entity                         (Id : E) return E;
   function SSO_Set_High_By_Default             (Id : E) return B;
   function SSO_Set_Low_By_Default              (Id : E) return B;
   function Static_Discrete_Predicate           (Id : E) return S;
   function Static_Elaboration_Desired          (Id : E) return B;
   function Static_Initialization               (Id : E) return N;
   function Static_Real_Or_String_Predicate     (Id : E) return N;
   function Status_Flag_Or_Transient_Decl       (Id : E) return E;
   function Storage_Size_Variable               (Id : E) return E;
   function Stored_Constraint                   (Id : E) return L;
   function Stores_Attribute_Old_Prefix         (Id : E) return B;
   function Strict_Alignment                    (Id : E) return B;
   function String_Literal_Length               (Id : E) return U;
   function String_Literal_Low_Bound            (Id : E) return N;
   function Subprograms_For_Type                (Id : E) return L;
   function Subps_Index                         (Id : E) return U;
   function Suppress_Elaboration_Warnings       (Id : E) return B;
   function Suppress_Initialization             (Id : E) return B;
   function Suppress_Style_Checks               (Id : E) return B;
   function Suppress_Value_Tracking_On_Call     (Id : E) return B;
   function Task_Body_Procedure                 (Id : E) return N;
   function Thunk_Entity                        (Id : E) return E;
   function Treat_As_Volatile                   (Id : E) return B;
   function Underlying_Full_View                (Id : E) return E;
   function Underlying_Record_View              (Id : E) return E;
   function Universal_Aliasing                  (Id : E) return B;
   function Unset_Reference                     (Id : E) return N;
   function Used_As_Generic_Actual              (Id : E) return B;
   function Uses_Lock_Free                      (Id : E) return B;
   function Uses_Sec_Stack                      (Id : E) return B;
   function Validated_Object                    (Id : E) return N;
   function Warnings_Off                        (Id : E) return B;
   function Warnings_Off_Used                   (Id : E) return B;
   function Warnings_Off_Used_Unmodified        (Id : E) return B;
   function Warnings_Off_Used_Unreferenced      (Id : E) return B;
   function Was_Hidden                          (Id : E) return B;
   function Wrapped_Entity                      (Id : E) return E;

   -------------------------------
   -- Classification Attributes --
   -------------------------------

   --  These functions provide a convenient functional notation for testing
   --  whether an Ekind value belongs to a specified kind, for example the
   --  function Is_Elementary_Type tests if its argument is in Elementary_Kind.
   --  In some cases, the test is of an entity attribute (e.g. in the case of
   --  Is_Generic_Type where the Ekind does not provide the needed
   --  information).

   function Is_Access_Type                      (Id : E) return B;
   function Is_Access_Protected_Subprogram_Type (Id : E) return B;
   function Is_Access_Subprogram_Type           (Id : E) return B;
   function Is_Aggregate_Type                   (Id : E) return B;
   function Is_Anonymous_Access_Type            (Id : E) return B;
   function Is_Array_Type                       (Id : E) return B;
   function Is_Assignable                       (Id : E) return B;
   function Is_Class_Wide_Type                  (Id : E) return B;
   function Is_Composite_Type                   (Id : E) return B;
   function Is_Concurrent_Body                  (Id : E) return B;
   function Is_Concurrent_Record_Type           (Id : E) return B;
   function Is_Concurrent_Type                  (Id : E) return B;
   function Is_Decimal_Fixed_Point_Type         (Id : E) return B;
   function Is_Digits_Type                      (Id : E) return B;
   function Is_Discrete_Or_Fixed_Point_Type     (Id : E) return B;
   function Is_Discrete_Type                    (Id : E) return B;
   function Is_Elementary_Type                  (Id : E) return B;
   function Is_Entry                            (Id : E) return B;
   function Is_Enumeration_Type                 (Id : E) return B;
   function Is_Fixed_Point_Type                 (Id : E) return B;
   function Is_Floating_Point_Type              (Id : E) return B;
   function Is_Formal                           (Id : E) return B;
   function Is_Formal_Object                    (Id : E) return B;
   function Is_Formal_Subprogram                (Id : E) return B;
   function Is_Generic_Actual_Subprogram        (Id : E) return B;
   function Is_Generic_Actual_Type              (Id : E) return B;
   function Is_Generic_Subprogram               (Id : E) return B;
   function Is_Generic_Type                     (Id : E) return B;
   function Is_Generic_Unit                     (Id : E) return B;
   function Is_Ghost_Entity                     (Id : E) return B;
   function Is_Incomplete_Or_Private_Type       (Id : E) return B;
   function Is_Incomplete_Type                  (Id : E) return B;
   function Is_Integer_Type                     (Id : E) return B;
   function Is_Limited_Record                   (Id : E) return B;
   function Is_Modular_Integer_Type             (Id : E) return B;
   function Is_Named_Number                     (Id : E) return B;
   function Is_Numeric_Type                     (Id : E) return B;
   function Is_Object                           (Id : E) return B;
   function Is_Ordinary_Fixed_Point_Type        (Id : E) return B;
   function Is_Overloadable                     (Id : E) return B;
   function Is_Private_Type                     (Id : E) return B;
   function Is_Protected_Type                   (Id : E) return B;
   function Is_Real_Type                        (Id : E) return B;
   function Is_Record_Type                      (Id : E) return B;
   function Is_Scalar_Type                      (Id : E) return B;
   function Is_Signed_Integer_Type              (Id : E) return B;
   function Is_Subprogram                       (Id : E) return B;
   function Is_Subprogram_Or_Entry              (Id : E) return B;
   function Is_Subprogram_Or_Generic_Subprogram (Id : E) return B;
   function Is_Task_Type                        (Id : E) return B;
   function Is_Type                             (Id : E) return B;

   -------------------------------------
   -- Synthesized Attribute Functions --
   -------------------------------------

   --  The functions in this section synthesize attributes from the tree,
   --  so they do not correspond to defined fields in the entity itself.

   function Address_Clause                      (Id : E) return N;
   function Aft_Value                           (Id : E) return U;
   function Alignment_Clause                    (Id : E) return N;
   function Base_Type                           (Id : E) return E;
   function Declaration_Node                    (Id : E) return N;
   function Designated_Type                     (Id : E) return E;
   function First_Component                     (Id : E) return E;
   function First_Component_Or_Discriminant     (Id : E) return E;
   function First_Formal                        (Id : E) return E;
   function First_Formal_With_Extras            (Id : E) return E;
   function Has_Attach_Handler                  (Id : E) return B;
   function Has_Entries                         (Id : E) return B;
   function Has_Foreign_Convention              (Id : E) return B;
   function Has_Non_Limited_View                (Id : E) return B;
   function Has_Non_Null_Abstract_State         (Id : E) return B;
   function Has_Non_Null_Visible_Refinement     (Id : E) return B;
   function Has_Null_Abstract_State             (Id : E) return B;
   function Has_Null_Visible_Refinement         (Id : E) return B;
   function Implementation_Base_Type            (Id : E) return E;
   function Is_Base_Type                        (Id : E) return B;
   function Is_Boolean_Type                     (Id : E) return B;
   function Is_Constant_Object                  (Id : E) return B;
   function Is_Controlled                       (Id : E) return B;
   function Is_Discriminal                      (Id : E) return B;
   function Is_Dynamic_Scope                    (Id : E) return B;
   function Is_Elaboration_Target               (Id : E) return B;
   function Is_External_State                   (Id : E) return B;
   function Is_Finalizer                        (Id : E) return B;
   function Is_Null_State                       (Id : E) return B;
   function Is_Package_Or_Generic_Package       (Id : E) return B;
   function Is_Packed_Array                     (Id : E) return B;
   function Is_Prival                           (Id : E) return B;
   function Is_Protected_Component              (Id : E) return B;
   function Is_Protected_Interface              (Id : E) return B;
   function Is_Protected_Record_Type            (Id : E) return B;
   function Is_Standard_Character_Type          (Id : E) return B;
   function Is_Standard_String_Type             (Id : E) return B;
   function Is_String_Type                      (Id : E) return B;
   function Is_Synchronized_Interface           (Id : E) return B;
   function Is_Synchronized_State               (Id : E) return B;
   function Is_Task_Interface                   (Id : E) return B;
   function Is_Task_Record_Type                 (Id : E) return B;
   function Is_Wrapper_Package                  (Id : E) return B;
   function Last_Formal                         (Id : E) return E;
   function Machine_Emax_Value                  (Id : E) return U;
   function Machine_Emin_Value                  (Id : E) return U;
   function Machine_Mantissa_Value              (Id : E) return U;
   function Machine_Radix_Value                 (Id : E) return U;
   function Model_Emin_Value                    (Id : E) return U;
   function Model_Epsilon_Value                 (Id : E) return R;
   function Model_Mantissa_Value                (Id : E) return U;
   function Model_Small_Value                   (Id : E) return R;
   function Next_Component                      (Id : E) return E;
   function Next_Component_Or_Discriminant      (Id : E) return E;
   function Next_Discriminant                   (Id : E) return E;
   function Next_Formal                         (Id : E) return E;
   function Next_Formal_With_Extras             (Id : E) return E;
   function Next_Literal                        (Id : E) return E;
   function Next_Stored_Discriminant            (Id : E) return E;
   function Number_Dimensions                   (Id : E) return Pos;
   function Number_Entries                      (Id : E) return Nat;
   function Number_Formals                      (Id : E) return Pos;
   function Object_Size_Clause                  (Id : E) return N;
   function Parameter_Mode                      (Id : E) return Formal_Kind;
   function Partial_Refinement_Constituents     (Id : E) return L;
   function Primitive_Operations                (Id : E) return L;
   function Root_Type                           (Id : E) return E;
   function Safe_Emax_Value                     (Id : E) return U;
   function Safe_First_Value                    (Id : E) return R;
   function Safe_Last_Value                     (Id : E) return R;
   function Scope_Depth_Set                     (Id : E) return B;
   function Size_Clause                         (Id : E) return N;
   function Stream_Size_Clause                  (Id : E) return N;
   function Type_High_Bound                     (Id : E) return N;
   function Type_Low_Bound                      (Id : E) return N;
   function Underlying_Type                     (Id : E) return E;

   ----------------------------------------------
   -- Type Representation Attribute Predicates --
   ----------------------------------------------

   --  These predicates test the setting of the indicated attribute. If the
   --  value has been set, then Known is True, and Unknown is False. If no
   --  value is set, then Known is False and Unknown is True. The Known_Static
   --  predicate is true only if the value is set (Known) and is set to a
   --  compile time known value. Note that in the case of Alignment and
   --  Normalized_First_Bit, dynamic values are not possible, so we do not
   --  need a separate Known_Static calls in these cases. The not set (unknown)
   --  values are as follows:

   --    Alignment               Uint_0 or No_Uint
   --    Component_Size          Uint_0 or No_Uint
   --    Component_Bit_Offset    No_Uint
   --    Digits_Value            Uint_0 or No_Uint
   --    Esize                   Uint_0 or No_Uint
   --    Normalized_First_Bit    No_Uint
   --    Normalized_Position     No_Uint
   --    Normalized_Position_Max No_Uint
   --    RM_Size                 Uint_0 or No_Uint

   --  It would be cleaner to use No_Uint in all these cases, but historically
   --  we chose to use Uint_0 at first, and the change over will take time ???
   --  This is particularly true for the RM_Size field, where a value of zero
   --  is legitimate. We deal with this by a considering that the value is
   --  always known static for discrete types (and no other types can have
   --  an RM_Size value of zero).

   --  In two cases, Known_Static_Esize and Known_Static_RM_Size, there is one
   --  more consideration, which is that we always return False for generic
   --  types. Within a template, the size can look known, because of the fake
   --  size values we put in template types, but they are not really known and
   --  anyone testing if they are known within the template should get False as
   --  a result to prevent incorrect assumptions.

   function Known_Alignment                       (E : Entity_Id) return B;
   function Known_Component_Bit_Offset            (E : Entity_Id) return B;
   function Known_Component_Size                  (E : Entity_Id) return B;
   function Known_Esize                           (E : Entity_Id) return B;
   function Known_Normalized_First_Bit            (E : Entity_Id) return B;
   function Known_Normalized_Position             (E : Entity_Id) return B;
   function Known_Normalized_Position_Max         (E : Entity_Id) return B;
   function Known_RM_Size                         (E : Entity_Id) return B;

   function Known_Static_Component_Bit_Offset     (E : Entity_Id) return B;
   function Known_Static_Component_Size           (E : Entity_Id) return B;
   function Known_Static_Esize                    (E : Entity_Id) return B;
   function Known_Static_Normalized_First_Bit     (E : Entity_Id) return B;
   function Known_Static_Normalized_Position      (E : Entity_Id) return B;
   function Known_Static_Normalized_Position_Max  (E : Entity_Id) return B;
   function Known_Static_RM_Size                  (E : Entity_Id) return B;

   function Unknown_Alignment                     (E : Entity_Id) return B;
   function Unknown_Component_Bit_Offset          (E : Entity_Id) return B;
   function Unknown_Component_Size                (E : Entity_Id) return B;
   function Unknown_Esize                         (E : Entity_Id) return B;
   function Unknown_Normalized_First_Bit          (E : Entity_Id) return B;
   function Unknown_Normalized_Position           (E : Entity_Id) return B;
   function Unknown_Normalized_Position_Max       (E : Entity_Id) return B;
   function Unknown_RM_Size                       (E : Entity_Id) return B;

   ------------------------------
   -- Attribute Set Procedures --
   ------------------------------

   --  WARNING: There is a matching C declaration of a few subprograms in fe.h

   procedure Set_Abstract_States                 (Id : E; V : L);
   procedure Set_Accept_Address                  (Id : E; V : L);
   procedure Set_Access_Disp_Table               (Id : E; V : L);
   procedure Set_Access_Disp_Table_Elab_Flag     (Id : E; V : E);
   procedure Set_Activation_Record_Component     (Id : E; V : E);
   procedure Set_Actual_Subtype                  (Id : E; V : E);
   procedure Set_Address_Taken                   (Id : E; V : B := True);
   procedure Set_Alias                           (Id : E; V : E);
   procedure Set_Alignment                       (Id : E; V : U);
   procedure Set_Anonymous_Designated_Type       (Id : E; V : E);
   procedure Set_Anonymous_Masters               (Id : E; V : L);
   procedure Set_Anonymous_Object                (Id : E; V : E);
   procedure Set_Associated_Entity               (Id : E; V : E);
   procedure Set_Associated_Formal_Package       (Id : E; V : E);
   procedure Set_Associated_Node_For_Itype       (Id : E; V : N);
   procedure Set_Associated_Storage_Pool         (Id : E; V : E);
   procedure Set_Barrier_Function                (Id : E; V : N);
   procedure Set_BIP_Initialization_Call         (Id : E; V : N);
   procedure Set_Block_Node                      (Id : E; V : N);
   procedure Set_Body_Entity                     (Id : E; V : E);
   procedure Set_Body_Needed_For_Inlining        (Id : E; V : B := True);
   procedure Set_Body_Needed_For_SAL             (Id : E; V : B := True);
   procedure Set_Body_References                 (Id : E; V : L);
   procedure Set_C_Pass_By_Copy                  (Id : E; V : B := True);
   procedure Set_Can_Never_Be_Null               (Id : E; V : B := True);
   procedure Set_Can_Use_Internal_Rep            (Id : E; V : B := True);
   procedure Set_Checks_May_Be_Suppressed        (Id : E; V : B := True);
   procedure Set_Class_Wide_Clone                (Id : E; V : E);
   procedure Set_Class_Wide_Type                 (Id : E; V : E);
   procedure Set_Cloned_Subtype                  (Id : E; V : E);
   procedure Set_Component_Alignment             (Id : E; V : C);
   procedure Set_Component_Bit_Offset            (Id : E; V : U);
   procedure Set_Component_Clause                (Id : E; V : N);
   procedure Set_Component_Size                  (Id : E; V : U);
   procedure Set_Component_Type                  (Id : E; V : E);
   procedure Set_Contains_Ignored_Ghost_Code     (Id : E; V : B := True);
   procedure Set_Contract                        (Id : E; V : N);
   procedure Set_Contract_Wrapper                (Id : E; V : E);
   procedure Set_Corresponding_Concurrent_Type   (Id : E; V : E);
   procedure Set_Corresponding_Discriminant      (Id : E; V : E);
   procedure Set_Corresponding_Equality          (Id : E; V : E);
   procedure Set_Corresponding_Function          (Id : E; V : E);
   procedure Set_Corresponding_Procedure         (Id : E; V : E);
   procedure Set_Corresponding_Protected_Entry   (Id : E; V : E);
   procedure Set_Corresponding_Record_Component  (Id : E; V : E);
   procedure Set_Corresponding_Record_Type       (Id : E; V : E);
   procedure Set_Corresponding_Remote_Type       (Id : E; V : E);
   procedure Set_CR_Discriminant                 (Id : E; V : E);
   procedure Set_Current_Use_Clause              (Id : E; V : E);
   procedure Set_Current_Value                   (Id : E; V : N);
   procedure Set_Debug_Info_Off                  (Id : E; V : B := True);
   procedure Set_Debug_Renaming_Link             (Id : E; V : E);
   procedure Set_Default_Aspect_Component_Value  (Id : E; V : N);
   procedure Set_Default_Aspect_Value            (Id : E; V : N);
   procedure Set_Default_Expr_Function           (Id : E; V : E);
   procedure Set_Default_Expressions_Processed   (Id : E; V : B := True);
   procedure Set_Default_Value                   (Id : E; V : N);
   procedure Set_Delay_Cleanups                  (Id : E; V : B := True);
   procedure Set_Delay_Subprogram_Descriptors    (Id : E; V : B := True);
   procedure Set_Delta_Value                     (Id : E; V : R);
   procedure Set_Dependent_Instances             (Id : E; V : L);
   procedure Set_Depends_On_Private              (Id : E; V : B := True);
   procedure Set_Derived_Type_Link               (Id : E; V : E);
   procedure Set_Digits_Value                    (Id : E; V : U);
   procedure Set_Predicated_Parent               (Id : E; V : E);
   procedure Set_Predicates_Ignored              (Id : E; V : B);
   procedure Set_Direct_Primitive_Operations     (Id : E; V : L);
   procedure Set_Directly_Designated_Type        (Id : E; V : E);
   procedure Set_Disable_Controlled              (Id : E; V : B := True);
   procedure Set_Discard_Names                   (Id : E; V : B := True);
   procedure Set_Discriminal                     (Id : E; V : E);
   procedure Set_Discriminal_Link                (Id : E; V : E);
   procedure Set_Discriminant_Checking_Func      (Id : E; V : E);
   procedure Set_Discriminant_Constraint         (Id : E; V : L);
   procedure Set_Discriminant_Default_Value      (Id : E; V : N);
   procedure Set_Discriminant_Number             (Id : E; V : U);
   procedure Set_Dispatch_Table_Wrappers         (Id : E; V : L);
   procedure Set_DT_Entry_Count                  (Id : E; V : U);
   procedure Set_DT_Offset_To_Top_Func           (Id : E; V : E);
   procedure Set_DT_Position                     (Id : E; V : U);
   procedure Set_DTC_Entity                      (Id : E; V : E);
   procedure Set_Elaborate_Body_Desirable        (Id : E; V : B := True);
   procedure Set_Elaboration_Entity              (Id : E; V : E);
   procedure Set_Elaboration_Entity_Required     (Id : E; V : B := True);
   procedure Set_Encapsulating_State             (Id : E; V : E);
   procedure Set_Enclosing_Scope                 (Id : E; V : E);
   procedure Set_Entry_Accepted                  (Id : E; V : B := True);
   procedure Set_Entry_Bodies_Array              (Id : E; V : E);
   procedure Set_Entry_Cancel_Parameter          (Id : E; V : E);
   procedure Set_Entry_Component                 (Id : E; V : E);
   procedure Set_Entry_Formal                    (Id : E; V : E);
   procedure Set_Entry_Index_Constant            (Id : E; V : E);
   procedure Set_Entry_Max_Queue_Lengths_Array   (Id : E; V : E);
   procedure Set_Entry_Parameters_Type           (Id : E; V : E);
   procedure Set_Enum_Pos_To_Rep                 (Id : E; V : E);
   procedure Set_Enumeration_Pos                 (Id : E; V : U);
   procedure Set_Enumeration_Rep                 (Id : E; V : U);
   procedure Set_Enumeration_Rep_Expr            (Id : E; V : N);
   procedure Set_Equivalent_Type                 (Id : E; V : E);
   procedure Set_Esize                           (Id : E; V : U);
   procedure Set_Extra_Accessibility             (Id : E; V : E);
   procedure Set_Extra_Accessibility_Of_Result   (Id : E; V : E);
   procedure Set_Extra_Constrained               (Id : E; V : E);
   procedure Set_Extra_Formal                    (Id : E; V : E);
   procedure Set_Extra_Formals                   (Id : E; V : E);
   procedure Set_Finalization_Master             (Id : E; V : E);
   procedure Set_Finalize_Storage_Only           (Id : E; V : B := True);
   procedure Set_Finalizer                       (Id : E; V : E);
   procedure Set_First_Entity                    (Id : E; V : E);
   procedure Set_First_Exit_Statement            (Id : E; V : N);
   procedure Set_First_Index                     (Id : E; V : N);
   procedure Set_First_Literal                   (Id : E; V : E);
   procedure Set_First_Private_Entity            (Id : E; V : E);
   procedure Set_First_Rep_Item                  (Id : E; V : N);
   procedure Set_Float_Rep                       (Id : E; V : F);
   procedure Set_Freeze_Node                     (Id : E; V : N);
   procedure Set_From_Limited_With               (Id : E; V : B := True);
   procedure Set_Full_View                       (Id : E; V : E);
   procedure Set_Generic_Homonym                 (Id : E; V : E);
   procedure Set_Generic_Renamings               (Id : E; V : L);
   procedure Set_Handler_Records                 (Id : E; V : S);
   procedure Set_Has_Aliased_Components          (Id : E; V : B := True);
   procedure Set_Has_Alignment_Clause            (Id : E; V : B := True);
   procedure Set_Has_All_Calls_Remote            (Id : E; V : B := True);
   procedure Set_Has_Atomic_Components           (Id : E; V : B := True);
   procedure Set_Has_Biased_Representation       (Id : E; V : B := True);
   procedure Set_Has_Completion                  (Id : E; V : B := True);
   procedure Set_Has_Completion_In_Body          (Id : E; V : B := True);
   procedure Set_Has_Complex_Representation      (Id : E; V : B := True);
   procedure Set_Has_Component_Size_Clause       (Id : E; V : B := True);
   procedure Set_Has_Constrained_Partial_View    (Id : E; V : B := True);
   procedure Set_Has_Contiguous_Rep              (Id : E; V : B := True);
   procedure Set_Has_Controlled_Component        (Id : E; V : B := True);
   procedure Set_Has_Controlling_Result          (Id : E; V : B := True);
   procedure Set_Has_Convention_Pragma           (Id : E; V : B := True);
   procedure Set_Has_Default_Aspect              (Id : E; V : B := True);
   procedure Set_Has_Delayed_Aspects             (Id : E; V : B := True);
   procedure Set_Has_Delayed_Freeze              (Id : E; V : B := True);
   procedure Set_Has_Delayed_Rep_Aspects         (Id : E; V : B := True);
   procedure Set_Has_Discriminants               (Id : E; V : B := True);
   procedure Set_Has_Dispatch_Table              (Id : E; V : B := True);
   procedure Set_Has_Dynamic_Predicate_Aspect    (Id : E; V : B := True);
   procedure Set_Has_Enumeration_Rep_Clause      (Id : E; V : B := True);
   procedure Set_Has_Exit                        (Id : E; V : B := True);
   procedure Set_Has_Expanded_Contract           (Id : E; V : B := True);
   procedure Set_Has_Forward_Instantiation       (Id : E; V : B := True);
   procedure Set_Has_Fully_Qualified_Name        (Id : E; V : B := True);
   procedure Set_Has_Gigi_Rep_Item               (Id : E; V : B := True);
   procedure Set_Has_Homonym                     (Id : E; V : B := True);
   procedure Set_Has_Implicit_Dereference        (Id : E; V : B := True);
   procedure Set_Has_Independent_Components      (Id : E; V : B := True);
   procedure Set_Has_Inheritable_Invariants      (Id : E; V : B := True);
   procedure Set_Has_Inherited_DIC               (Id : E; V : B := True);
   procedure Set_Has_Inherited_Invariants        (Id : E; V : B := True);
   procedure Set_Has_Initial_Value               (Id : E; V : B := True);
   procedure Set_Has_Loop_Entry_Attributes       (Id : E; V : B := True);
   procedure Set_Has_Machine_Radix_Clause        (Id : E; V : B := True);
   procedure Set_Has_Master_Entity               (Id : E; V : B := True);
   procedure Set_Has_Missing_Return              (Id : E; V : B := True);
   procedure Set_Has_Nested_Block_With_Handler   (Id : E; V : B := True);
   procedure Set_Has_Nested_Subprogram           (Id : E; V : B := True);
   procedure Set_Has_Non_Standard_Rep            (Id : E; V : B := True);
   procedure Set_Has_Object_Size_Clause          (Id : E; V : B := True);
   procedure Set_Has_Out_Or_In_Out_Parameter     (Id : E; V : B := True);
   procedure Set_Has_Own_DIC                     (Id : E; V : B := True);
   procedure Set_Has_Own_Invariants              (Id : E; V : B := True);
   procedure Set_Has_Partial_Visible_Refinement  (Id : E; V : B := True);
   procedure Set_Has_Per_Object_Constraint       (Id : E; V : B := True);
   procedure Set_Has_Pragma_Controlled           (Id : E; V : B := True);
   procedure Set_Has_Pragma_Elaborate_Body       (Id : E; V : B := True);
   procedure Set_Has_Pragma_Inline               (Id : E; V : B := True);
   procedure Set_Has_Pragma_Inline_Always        (Id : E; V : B := True);
   procedure Set_Has_Pragma_No_Inline            (Id : E; V : B := True);
   procedure Set_Has_Pragma_Ordered              (Id : E; V : B := True);
   procedure Set_Has_Pragma_Pack                 (Id : E; V : B := True);
   procedure Set_Has_Pragma_Preelab_Init         (Id : E; V : B := True);
   procedure Set_Has_Pragma_Pure                 (Id : E; V : B := True);
   procedure Set_Has_Pragma_Pure_Function        (Id : E; V : B := True);
   procedure Set_Has_Pragma_Thread_Local_Storage (Id : E; V : B := True);
   procedure Set_Has_Pragma_Unmodified           (Id : E; V : B := True);
   procedure Set_Has_Pragma_Unreferenced         (Id : E; V : B := True);
   procedure Set_Has_Pragma_Unreferenced_Objects (Id : E; V : B := True);
   procedure Set_Has_Pragma_Unused               (Id : E; V : B := True);
   procedure Set_Has_Predicates                  (Id : E; V : B := True);
   procedure Set_Has_Primitive_Operations        (Id : E; V : B := True);
   procedure Set_Has_Private_Ancestor            (Id : E; V : B := True);
   procedure Set_Has_Private_Declaration         (Id : E; V : B := True);
   procedure Set_Has_Private_Extension           (Id : E; V : B := True);
   procedure Set_Has_Protected                   (Id : E; V : B := True);
   procedure Set_Has_Qualified_Name              (Id : E; V : B := True);
   procedure Set_Has_RACW                        (Id : E; V : B := True);
   procedure Set_Has_Record_Rep_Clause           (Id : E; V : B := True);
   procedure Set_Has_Recursive_Call              (Id : E; V : B := True);
   procedure Set_Has_Shift_Operator              (Id : E; V : B := True);
   procedure Set_Has_Size_Clause                 (Id : E; V : B := True);
   procedure Set_Has_Small_Clause                (Id : E; V : B := True);
   procedure Set_Has_Specified_Layout            (Id : E; V : B := True);
   procedure Set_Has_Specified_Stream_Input      (Id : E; V : B := True);
   procedure Set_Has_Specified_Stream_Output     (Id : E; V : B := True);
   procedure Set_Has_Specified_Stream_Read       (Id : E; V : B := True);
   procedure Set_Has_Specified_Stream_Write      (Id : E; V : B := True);
   procedure Set_Has_Static_Discriminants        (Id : E; V : B := True);
   procedure Set_Has_Static_Predicate            (Id : E; V : B := True);
   procedure Set_Has_Static_Predicate_Aspect     (Id : E; V : B := True);
   procedure Set_Has_Storage_Size_Clause         (Id : E; V : B := True);
   procedure Set_Has_Stream_Size_Clause          (Id : E; V : B := True);
   procedure Set_Has_Task                        (Id : E; V : B := True);
   procedure Set_Has_Timing_Event                (Id : E; V : B := True);
   procedure Set_Has_Thunks                      (Id : E; V : B := True);
   procedure Set_Has_Unchecked_Union             (Id : E; V : B := True);
   procedure Set_Has_Unknown_Discriminants       (Id : E; V : B := True);
   procedure Set_Has_Visible_Refinement          (Id : E; V : B := True);
   procedure Set_Has_Volatile_Components         (Id : E; V : B := True);
   procedure Set_Has_Xref_Entry                  (Id : E; V : B := True);
   procedure Set_Hiding_Loop_Variable            (Id : E; V : E);
   procedure Set_Hidden_In_Formal_Instance       (Id : E; V : L);
   procedure Set_Homonym                         (Id : E; V : E);
   procedure Set_Ignore_SPARK_Mode_Pragmas       (Id : E; V : B := True);
   procedure Set_Import_Pragma                   (Id : E; V : E);
   procedure Set_Incomplete_Actuals              (Id : E; V : L);
   procedure Set_In_Package_Body                 (Id : E; V : B := True);
   procedure Set_In_Private_Part                 (Id : E; V : B := True);
   procedure Set_In_Use                          (Id : E; V : B := True);
   procedure Set_Initialization_Statements       (Id : E; V : N);
   procedure Set_Inner_Instances                 (Id : E; V : L);
   procedure Set_Interface_Alias                 (Id : E; V : E);
   procedure Set_Interface_Name                  (Id : E; V : N);
   procedure Set_Interfaces                      (Id : E; V : L);
   procedure Set_Invariants_Ignored              (Id : E; V : B := True);
   procedure Set_Is_Abstract_Subprogram          (Id : E; V : B := True);
   procedure Set_Is_Abstract_Type                (Id : E; V : B := True);
   procedure Set_Is_Access_Constant              (Id : E; V : B := True);
   procedure Set_Is_Activation_Record            (Id : E; V : B := True);
   procedure Set_Is_Actual_Subtype               (Id : E; V : B := True);
   procedure Set_Is_Ada_2005_Only                (Id : E; V : B := True);
   procedure Set_Is_Ada_2012_Only                (Id : E; V : B := True);
   procedure Set_Is_Aliased                      (Id : E; V : B := True);
   procedure Set_Is_Asynchronous                 (Id : E; V : B := True);
   procedure Set_Is_Atomic                       (Id : E; V : B := True);
   procedure Set_Is_Bit_Packed_Array             (Id : E; V : B := True);
   procedure Set_Is_Called                       (Id : E; V : B := True);
   procedure Set_Is_Character_Type               (Id : E; V : B := True);
   procedure Set_Is_Checked_Ghost_Entity         (Id : E; V : B := True);
   procedure Set_Is_Child_Unit                   (Id : E; V : B := True);
   procedure Set_Is_Class_Wide_Clone             (Id : E; V : B := True);
   procedure Set_Is_Class_Wide_Equivalent_Type   (Id : E; V : B := True);
   procedure Set_Is_Compilation_Unit             (Id : E; V : B := True);
   procedure Set_Is_Completely_Hidden            (Id : E; V : B := True);
   procedure Set_Is_Concurrent_Record_Type       (Id : E; V : B := True);
   procedure Set_Is_Constr_Subt_For_U_Nominal    (Id : E; V : B := True);
   procedure Set_Is_Constr_Subt_For_UN_Aliased   (Id : E; V : B := True);
   procedure Set_Is_Constrained                  (Id : E; V : B := True);
   procedure Set_Is_Constructor                  (Id : E; V : B := True);
   procedure Set_Is_Controlled_Active            (Id : E; V : B := True);
   procedure Set_Is_Controlling_Formal           (Id : E; V : B := True);
   procedure Set_Is_CPP_Class                    (Id : E; V : B := True);
   procedure Set_Is_Descendant_Of_Address        (Id : E; V : B := True);
   procedure Set_Is_DIC_Procedure                (Id : E; V : B := True);
   procedure Set_Is_Discrim_SO_Function          (Id : E; V : B := True);
   procedure Set_Is_Discriminant_Check_Function  (Id : E; V : B := True);
   procedure Set_Is_Dispatch_Table_Entity        (Id : E; V : B := True);
   procedure Set_Is_Dispatching_Operation        (Id : E; V : B := True);
   procedure Set_Is_Elaboration_Checks_OK_Id     (Id : E; V : B := True);
   procedure Set_Is_Elaboration_Warnings_OK_Id   (Id : E; V : B := True);
   procedure Set_Is_Eliminated                   (Id : E; V : B := True);
   procedure Set_Is_Entry_Formal                 (Id : E; V : B := True);
   procedure Set_Is_Entry_Wrapper                (Id : E; V : B := True);
   procedure Set_Is_Exception_Handler            (Id : E; V : B := True);
   procedure Set_Is_Exported                     (Id : E; V : B := True);
   procedure Set_Is_Finalized_Transient          (Id : E; V : B := True);
   procedure Set_Is_First_Subtype                (Id : E; V : B := True);
   procedure Set_Is_Formal_Subprogram            (Id : E; V : B := True);
   procedure Set_Is_Frozen                       (Id : E; V : B := True);
   procedure Set_Is_Generic_Actual_Subprogram    (Id : E; V : B := True);
   procedure Set_Is_Generic_Actual_Type          (Id : E; V : B := True);
   procedure Set_Is_Generic_Instance             (Id : E; V : B := True);
   procedure Set_Is_Generic_Type                 (Id : E; V : B := True);
   procedure Set_Is_Hidden                       (Id : E; V : B := True);
   procedure Set_Is_Hidden_Non_Overridden_Subpgm (Id : E; V : B := True);
   procedure Set_Is_Hidden_Open_Scope            (Id : E; V : B := True);
   procedure Set_Is_Ignored_Ghost_Entity         (Id : E; V : B := True);
   procedure Set_Is_Ignored_Transient            (Id : E; V : B := True);
   procedure Set_Is_Immediately_Visible          (Id : E; V : B := True);
   procedure Set_Is_Implementation_Defined       (Id : E; V : B := True);
   procedure Set_Is_Imported                     (Id : E; V : B := True);
   procedure Set_Is_Independent                  (Id : E; V : B := True);
   procedure Set_Is_Initial_Condition_Procedure  (Id : E; V : B := True);
   procedure Set_Is_Inlined                      (Id : E; V : B := True);
   procedure Set_Is_Inlined_Always               (Id : E; V : B := True);
   procedure Set_Is_Instantiated                 (Id : E; V : B := True);
   procedure Set_Is_Interface                    (Id : E; V : B := True);
   procedure Set_Is_Internal                     (Id : E; V : B := True);
   procedure Set_Is_Interrupt_Handler            (Id : E; V : B := True);
   procedure Set_Is_Intrinsic_Subprogram         (Id : E; V : B := True);
   procedure Set_Is_Invariant_Procedure          (Id : E; V : B := True);
   procedure Set_Is_Itype                        (Id : E; V : B := True);
   procedure Set_Is_Known_Non_Null               (Id : E; V : B := True);
   procedure Set_Is_Known_Null                   (Id : E; V : B := True);
   procedure Set_Is_Known_Valid                  (Id : E; V : B := True);
   procedure Set_Is_Limited_Composite            (Id : E; V : B := True);
   procedure Set_Is_Limited_Interface            (Id : E; V : B := True);
   procedure Set_Is_Limited_Record               (Id : E; V : B := True);
   procedure Set_Is_Local_Anonymous_Access       (Id : E; V : B := True);
   procedure Set_Is_Loop_Parameter               (Id : E; V : B := True);
   procedure Set_Is_Machine_Code_Subprogram      (Id : E; V : B := True);
   procedure Set_Is_Non_Static_Subtype           (Id : E; V : B := True);
   procedure Set_Is_Null_Init_Proc               (Id : E; V : B := True);
   procedure Set_Is_Obsolescent                  (Id : E; V : B := True);
   procedure Set_Is_Only_Out_Parameter           (Id : E; V : B := True);
   procedure Set_Is_Package_Body_Entity          (Id : E; V : B := True);
   procedure Set_Is_Packed                       (Id : E; V : B := True);
   procedure Set_Is_Packed_Array_Impl_Type       (Id : E; V : B := True);
   procedure Set_Is_Param_Block_Component_Type   (Id : E; V : B := True);
   procedure Set_Is_Partial_Invariant_Procedure  (Id : E; V : B := True);
   procedure Set_Is_Potentially_Use_Visible      (Id : E; V : B := True);
   procedure Set_Is_Predicate_Function           (Id : E; V : B := True);
   procedure Set_Is_Predicate_Function_M         (Id : E; V : B := True);
   procedure Set_Is_Preelaborated                (Id : E; V : B := True);
   procedure Set_Is_Primitive                    (Id : E; V : B := True);
   procedure Set_Is_Primitive_Wrapper            (Id : E; V : B := True);
   procedure Set_Is_Private_Composite            (Id : E; V : B := True);
   procedure Set_Is_Private_Descendant           (Id : E; V : B := True);
   procedure Set_Is_Private_Primitive            (Id : E; V : B := True);
   procedure Set_Is_Public                       (Id : E; V : B := True);
   procedure Set_Is_Pure                         (Id : E; V : B := True);
   procedure Set_Is_Pure_Unit_Access_Type        (Id : E; V : B := True);
   procedure Set_Is_RACW_Stub_Type               (Id : E; V : B := True);
   procedure Set_Is_Raised                       (Id : E; V : B := True);
   procedure Set_Is_Remote_Call_Interface        (Id : E; V : B := True);
   procedure Set_Is_Remote_Types                 (Id : E; V : B := True);
   procedure Set_Is_Renaming_Of_Object           (Id : E; V : B := True);
   procedure Set_Is_Return_Object                (Id : E; V : B := True);
   procedure Set_Is_Safe_To_Reevaluate           (Id : E; V : B := True);
   procedure Set_Is_Shared_Passive               (Id : E; V : B := True);
   procedure Set_Is_Static_Type                  (Id : E; V : B := True);
   procedure Set_Is_Statically_Allocated         (Id : E; V : B := True);
   procedure Set_Is_Tag                          (Id : E; V : B := True);
   procedure Set_Is_Tagged_Type                  (Id : E; V : B := True);
   procedure Set_Is_Thunk                        (Id : E; V : B := True);
   procedure Set_Is_Trivial_Subprogram           (Id : E; V : B := True);
   procedure Set_Is_True_Constant                (Id : E; V : B := True);
   procedure Set_Is_Unchecked_Union              (Id : E; V : B := True);
   procedure Set_Is_Underlying_Full_View         (Id : E; V : B := True);
   procedure Set_Is_Underlying_Record_View       (Id : E; V : B := True);
   procedure Set_Is_Unimplemented                (Id : E; V : B := True);
   procedure Set_Is_Unsigned_Type                (Id : E; V : B := True);
   procedure Set_Is_Uplevel_Referenced_Entity    (Id : E; V : B := True);
   procedure Set_Is_Valued_Procedure             (Id : E; V : B := True);
   procedure Set_Is_Visible_Formal               (Id : E; V : B := True);
   procedure Set_Is_Visible_Lib_Unit             (Id : E; V : B := True);
   procedure Set_Is_Volatile                     (Id : E; V : B := True);
   procedure Set_Is_Volatile_Full_Access         (Id : E; V : B := True);
   procedure Set_Itype_Printed                   (Id : E; V : B := True);
   procedure Set_Kill_Elaboration_Checks         (Id : E; V : B := True);
   procedure Set_Kill_Range_Checks               (Id : E; V : B := True);
   procedure Set_Known_To_Have_Preelab_Init      (Id : E; V : B := True);
   procedure Set_Last_Aggregate_Assignment       (Id : E; V : N);
   procedure Set_Last_Assignment                 (Id : E; V : N);
   procedure Set_Last_Entity                     (Id : E; V : E);
   procedure Set_Limited_View                    (Id : E; V : E);
   procedure Set_Linker_Section_Pragma           (Id : E; V : N);
   procedure Set_Lit_Indexes                     (Id : E; V : E);
   procedure Set_Lit_Strings                     (Id : E; V : E);
   procedure Set_Low_Bound_Tested                (Id : E; V : B := True);
   procedure Set_Machine_Radix_10                (Id : E; V : B := True);
   procedure Set_Master_Id                       (Id : E; V : E);
   procedure Set_Materialize_Entity              (Id : E; V : B := True);
   procedure Set_May_Inherit_Delayed_Rep_Aspects (Id : E; V : B := True);
   procedure Set_Mechanism                       (Id : E; V : M);
   procedure Set_Minimum_Accessibility           (Id : E; V : E);
   procedure Set_Modulus                         (Id : E; V : U);
   procedure Set_Must_Be_On_Byte_Boundary        (Id : E; V : B := True);
   procedure Set_Must_Have_Preelab_Init          (Id : E; V : B := True);
   procedure Set_Needs_Activation_Record         (Id : E; V : B := True);
   procedure Set_Needs_Debug_Info                (Id : E; V : B := True);
   procedure Set_Needs_No_Actuals                (Id : E; V : B := True);
   procedure Set_Never_Set_In_Source             (Id : E; V : B := True);
   procedure Set_Next_Inlined_Subprogram         (Id : E; V : E);
   procedure Set_No_Dynamic_Predicate_On_Actual  (Id : E; V : B := True);
   procedure Set_No_Pool_Assigned                (Id : E; V : B := True);
   procedure Set_No_Predicate_On_Actual          (Id : E; V : B := True);
   procedure Set_No_Reordering                   (Id : E; V : B := True);
   procedure Set_No_Return                       (Id : E; V : B := True);
   procedure Set_No_Strict_Aliasing              (Id : E; V : B := True);
   procedure Set_No_Tagged_Streams_Pragma        (Id : E; V : N);
   procedure Set_Non_Binary_Modulus              (Id : E; V : B := True);
   procedure Set_Non_Limited_View                (Id : E; V : E);
   procedure Set_Nonzero_Is_True                 (Id : E; V : B := True);
   procedure Set_Normalized_First_Bit            (Id : E; V : U);
   procedure Set_Normalized_Position             (Id : E; V : U);
   procedure Set_Normalized_Position_Max         (Id : E; V : U);
   procedure Set_OK_To_Rename                    (Id : E; V : B := True);
   procedure Set_Optimize_Alignment_Space        (Id : E; V : B := True);
   procedure Set_Optimize_Alignment_Time         (Id : E; V : B := True);
   procedure Set_Original_Access_Type            (Id : E; V : E);
   procedure Set_Original_Array_Type             (Id : E; V : E);
   procedure Set_Original_Protected_Subprogram   (Id : E; V : N);
   procedure Set_Original_Record_Component       (Id : E; V : E);
   procedure Set_Overlays_Constant               (Id : E; V : B := True);
   procedure Set_Overridden_Operation            (Id : E; V : E);
   procedure Set_Package_Instantiation           (Id : E; V : N);
   procedure Set_Packed_Array_Impl_Type          (Id : E; V : E);
   procedure Set_Parent_Subtype                  (Id : E; V : E);
   procedure Set_Part_Of_Constituents            (Id : E; V : L);
   procedure Set_Part_Of_References              (Id : E; V : L);
   procedure Set_Partial_View_Has_Unknown_Discr  (Id : E; V : B := True);
   procedure Set_Pending_Access_Types            (Id : E; V : L);
   procedure Set_Postconditions_Proc             (Id : E; V : E);
   procedure Set_Prev_Entity                     (Id : E; V : E);
   procedure Set_Prival                          (Id : E; V : E);
   procedure Set_Prival_Link                     (Id : E; V : E);
   procedure Set_Private_Dependents              (Id : E; V : L);
   procedure Set_Protected_Body_Subprogram       (Id : E; V : E);
   procedure Set_Protected_Formal                (Id : E; V : E);
   procedure Set_Protected_Subprogram            (Id : E; V : N);
   procedure Set_Protection_Object               (Id : E; V : E);
   procedure Set_Reachable                       (Id : E; V : B := True);
   procedure Set_Receiving_Entry                 (Id : E; V : E);
   procedure Set_Referenced                      (Id : E; V : B := True);
   procedure Set_Referenced_As_LHS               (Id : E; V : B := True);
   procedure Set_Referenced_As_Out_Parameter     (Id : E; V : B := True);
   procedure Set_Refinement_Constituents         (Id : E; V : L);
   procedure Set_Register_Exception_Call         (Id : E; V : N);
   procedure Set_Related_Array_Object            (Id : E; V : E);
   procedure Set_Related_Expression              (Id : E; V : N);
   procedure Set_Related_Instance                (Id : E; V : E);
   procedure Set_Related_Type                    (Id : E; V : E);
   procedure Set_Relative_Deadline_Variable      (Id : E; V : E);
   procedure Set_Renamed_Entity                  (Id : E; V : N);
   procedure Set_Renamed_In_Spec                 (Id : E; V : B := True);
   procedure Set_Renamed_Object                  (Id : E; V : N);
   procedure Set_Renaming_Map                    (Id : E; V : U);
   procedure Set_Requires_Overriding             (Id : E; V : B := True);
   procedure Set_Return_Applies_To               (Id : E; V : N);
   procedure Set_Return_Present                  (Id : E; V : B := True);
   procedure Set_Returns_By_Ref                  (Id : E; V : B := True);
   procedure Set_Reverse_Bit_Order               (Id : E; V : B := True);
   procedure Set_Reverse_Storage_Order           (Id : E; V : B := True);
   procedure Set_Rewritten_For_C                 (Id : E; V : B := True);
   procedure Set_RM_Size                         (Id : E; V : U);
   procedure Set_Scalar_Range                    (Id : E; V : N);
   procedure Set_Scale_Value                     (Id : E; V : U);
   procedure Set_Scope_Depth_Value               (Id : E; V : U);
   procedure Set_Sec_Stack_Needed_For_Return     (Id : E; V : B := True);
   procedure Set_Shared_Var_Procs_Instance       (Id : E; V : E);
   procedure Set_Size_Check_Code                 (Id : E; V : N);
   procedure Set_Size_Depends_On_Discriminant    (Id : E; V : B := True);
   procedure Set_Size_Known_At_Compile_Time      (Id : E; V : B := True);
   procedure Set_Small_Value                     (Id : E; V : R);
   procedure Set_SPARK_Aux_Pragma                (Id : E; V : N);
   procedure Set_SPARK_Aux_Pragma_Inherited      (Id : E; V : B := True);
   procedure Set_SPARK_Pragma                    (Id : E; V : N);
   procedure Set_SPARK_Pragma_Inherited          (Id : E; V : B := True);
   procedure Set_Spec_Entity                     (Id : E; V : E);
   procedure Set_SSO_Set_High_By_Default         (Id : E; V : B := True);
   procedure Set_SSO_Set_Low_By_Default          (Id : E; V : B := True);
   procedure Set_Static_Discrete_Predicate       (Id : E; V : S);
   procedure Set_Static_Elaboration_Desired      (Id : E; V : B);
   procedure Set_Static_Initialization           (Id : E; V : N);
   procedure Set_Static_Real_Or_String_Predicate (Id : E; V : N);
   procedure Set_Status_Flag_Or_Transient_Decl   (Id : E; V : E);
   procedure Set_Storage_Size_Variable           (Id : E; V : E);
   procedure Set_Stored_Constraint               (Id : E; V : L);
   procedure Set_Stores_Attribute_Old_Prefix     (Id : E; V : B := True);
   procedure Set_Strict_Alignment                (Id : E; V : B := True);
   procedure Set_String_Literal_Length           (Id : E; V : U);
   procedure Set_String_Literal_Low_Bound        (Id : E; V : N);
   procedure Set_Subprograms_For_Type            (Id : E; V : L);
   procedure Set_Subps_Index                     (Id : E; V : U);
   procedure Set_Suppress_Elaboration_Warnings   (Id : E; V : B := True);
   procedure Set_Suppress_Initialization         (Id : E; V : B := True);
   procedure Set_Suppress_Style_Checks           (Id : E; V : B := True);
   procedure Set_Suppress_Value_Tracking_On_Call (Id : E; V : B := True);
   procedure Set_Task_Body_Procedure             (Id : E; V : N);
   procedure Set_Thunk_Entity                    (Id : E; V : E);
   procedure Set_Treat_As_Volatile               (Id : E; V : B := True);
   procedure Set_Underlying_Full_View            (Id : E; V : E);
   procedure Set_Underlying_Record_View          (Id : E; V : E);
   procedure Set_Universal_Aliasing              (Id : E; V : B := True);
   procedure Set_Unset_Reference                 (Id : E; V : N);
   procedure Set_Used_As_Generic_Actual          (Id : E; V : B := True);
   procedure Set_Uses_Lock_Free                  (Id : E; V : B := True);
   procedure Set_Uses_Sec_Stack                  (Id : E; V : B := True);
   procedure Set_Validated_Object                (Id : E; V : N);
   procedure Set_Warnings_Off                    (Id : E; V : B := True);
   procedure Set_Warnings_Off_Used               (Id : E; V : B := True);
   procedure Set_Warnings_Off_Used_Unmodified    (Id : E; V : B := True);
   procedure Set_Warnings_Off_Used_Unreferenced  (Id : E; V : B := True);
   procedure Set_Was_Hidden                      (Id : E; V : B := True);
   procedure Set_Wrapped_Entity                  (Id : E; V : E);

   ---------------------------------------------------
   -- Access to Subprograms in Subprograms_For_Type --
   ---------------------------------------------------

   function DIC_Procedure                        (Id : E) return E;
   function Invariant_Procedure                  (Id : E) return E;
   function Partial_Invariant_Procedure          (Id : E) return E;
   function Predicate_Function                   (Id : E) return E;
   function Predicate_Function_M                 (Id : E) return E;

   procedure Set_DIC_Procedure                   (Id : E; V : E);
   procedure Set_Invariant_Procedure             (Id : E; V : E);
   procedure Set_Partial_Invariant_Procedure     (Id : E; V : E);
   procedure Set_Predicate_Function              (Id : E; V : E);
   procedure Set_Predicate_Function_M            (Id : E; V : E);

   -----------------------------------
   -- Field Initialization Routines --
   -----------------------------------

   --  These routines are overloadings of some of the above Set procedures
   --  where the argument is normally a Uint. The overloadings take an Int
   --  parameter instead, and appropriately convert it. There are also
   --  versions that implicitly initialize to the appropriate "not set"
   --  value. The not set (unknown) values are as follows:

   --    Alignment                 Uint_0
   --    Component_Size            Uint_0
   --    Component_Bit_Offset      No_Uint
   --    Digits_Value              Uint_0
   --    Esize                     Uint_0
   --    Normalized_First_Bit      No_Uint
   --    Normalized_Position       No_Uint
   --    Normalized_Position_Max   No_Uint
   --    RM_Size                   Uint_0

   --  It would be cleaner to use No_Uint in all these cases, but historically
   --  we chose to use Uint_0 at first, and the change over will take time ???
   --  This is particularly true for the RM_Size field, where a value of zero
   --  is legitimate and causes some special tests around the code.

   --  Contrary to the corresponding Set procedures above, these routines
   --  do NOT check the entity kind of their argument, instead they set the
   --  underlying Uint fields directly (this allows them to be used for
   --  entities whose Ekind has not been set yet).

   procedure Init_Alignment                (Id : E; V : Int);
   procedure Init_Component_Size           (Id : E; V : Int);
   procedure Init_Component_Bit_Offset     (Id : E; V : Int);
   procedure Init_Digits_Value             (Id : E; V : Int);
   procedure Init_Esize                    (Id : E; V : Int);
   procedure Init_Normalized_First_Bit     (Id : E; V : Int);
   procedure Init_Normalized_Position      (Id : E; V : Int);
   procedure Init_Normalized_Position_Max  (Id : E; V : Int);
   procedure Init_RM_Size                  (Id : E; V : Int);

   procedure Init_Alignment                (Id : E);
   procedure Init_Component_Size           (Id : E);
   procedure Init_Component_Bit_Offset     (Id : E);
   procedure Init_Digits_Value             (Id : E);
   procedure Init_Esize                    (Id : E);
   procedure Init_Normalized_First_Bit     (Id : E);
   procedure Init_Normalized_Position      (Id : E);
   procedure Init_Normalized_Position_Max  (Id : E);
   procedure Init_RM_Size                  (Id : E);

   procedure Init_Size_Align (Id : E);
   --  This procedure initializes both size fields and the alignment
   --  field to all be Unknown.

   procedure Init_Object_Size_Align (Id : E);
   --  Same as Init_Size_Align except RM_Size field (which is only for types)
   --  is unaffected.

   procedure Init_Size (Id : E; V : Int);
   --  Initialize both the Esize and RM_Size fields of E to V

   procedure Init_Component_Location (Id : E);
   --  Initializes all fields describing the location of a component
   --  (Normalized_Position, Component_Bit_Offset, Normalized_First_Bit,
   --  Normalized_Position_Max, Esize) to all be Unknown.

   ---------------
   -- Iterators --
   ---------------

   --  The call to Next_xxx (obj) is equivalent to obj := Next_xxx (obj)
   --  We define the set of Proc_Next_xxx routines simply for the purposes
   --  of inlining them without necessarily inlining the function.

   procedure Proc_Next_Component                 (N : in out Node_Id);
   procedure Proc_Next_Component_Or_Discriminant (N : in out Node_Id);
   procedure Proc_Next_Discriminant              (N : in out Node_Id);
   procedure Proc_Next_Formal                    (N : in out Node_Id);
   procedure Proc_Next_Formal_With_Extras        (N : in out Node_Id);
   procedure Proc_Next_Index                     (N : in out Node_Id);
   procedure Proc_Next_Inlined_Subprogram        (N : in out Node_Id);
   procedure Proc_Next_Literal                   (N : in out Node_Id);
   procedure Proc_Next_Stored_Discriminant       (N : in out Node_Id);

   pragma Inline (Proc_Next_Component);
   pragma Inline (Proc_Next_Component_Or_Discriminant);
   pragma Inline (Proc_Next_Discriminant);
   pragma Inline (Proc_Next_Formal);
   pragma Inline (Proc_Next_Formal_With_Extras);
   pragma Inline (Proc_Next_Index);
   pragma Inline (Proc_Next_Inlined_Subprogram);
   pragma Inline (Proc_Next_Literal);
   pragma Inline (Proc_Next_Stored_Discriminant);

   procedure Next_Component                 (N : in out Node_Id)
     renames Proc_Next_Component;

   procedure Next_Component_Or_Discriminant (N : in out Node_Id)
     renames Proc_Next_Component_Or_Discriminant;

   procedure Next_Discriminant              (N : in out Node_Id)
     renames Proc_Next_Discriminant;

   procedure Next_Formal                    (N : in out Node_Id)
     renames Proc_Next_Formal;

   procedure Next_Formal_With_Extras        (N : in out Node_Id)
     renames Proc_Next_Formal_With_Extras;

   procedure Next_Index                     (N : in out Node_Id)
     renames Proc_Next_Index;

   procedure Next_Inlined_Subprogram        (N : in out Node_Id)
     renames Proc_Next_Inlined_Subprogram;

   procedure Next_Literal                   (N : in out Node_Id)
     renames Proc_Next_Literal;

   procedure Next_Stored_Discriminant       (N : in out Node_Id)
     renames Proc_Next_Stored_Discriminant;

   ---------------------------
   -- Testing Warning Flags --
   ---------------------------

   --  These routines are to be used rather than testing flags Warnings_Off,
   --  Has_Pragma_Unmodified, Has_Pragma_Unreferenced. They deal with setting
   --  the flags Warnings_Off_Used[_Unmodified|Unreferenced] for later access.

   function Has_Warnings_Off (E : Entity_Id) return Boolean;
   --  If Warnings_Off is set on E, then returns True and also sets the flag
   --  Warnings_Off_Used on E. If Warnings_Off is not set on E, returns False
   --  and has no side effect.

   function Has_Unmodified (E : Entity_Id) return Boolean;
   --  If flag Has_Pragma_Unmodified is set on E, returns True with no side
   --  effects. Otherwise if Warnings_Off is set on E, returns True and also
   --  sets the flag Warnings_Off_Used_Unmodified on E. If neither of the flags
   --  Warnings_Off nor Has_Pragma_Unmodified is set, returns False with no
   --  side effects.

   function Has_Unreferenced (E : Entity_Id) return Boolean;
   --  If flag Has_Pragma_Unreferenced is set on E, returns True with no side
   --  effects. Otherwise if Warnings_Off is set on E, returns True and also
   --  sets the flag Warnings_Off_Used_Unreferenced on E. If neither of the
   --  flags Warnings_Off nor Has_Pragma_Unreferenced is set, returns False
   --  with no side effects.

   ----------------------------------------------
   -- Subprograms for Accessing Rep Item Chain --
   ----------------------------------------------

   --  The First_Rep_Item field of every entity points to a linked list (linked
   --  through Next_Rep_Item) of representation pragmas, attribute definition
   --  clauses, representation clauses, and aspect specifications that apply to
   --  the item. Note that in the case of types, it is assumed that any such
   --  rep items for a base type also apply to all subtypes. This is achieved
   --  by having the chain for subtypes link onto the chain for the base type,
   --  so that new entries for the subtype are added at the start of the chain.
   --
   --  Note: aspect specification nodes are linked only when evaluation of the
   --  expression is deferred to the freeze point. For further details see
   --  Sem_Ch13.Analyze_Aspect_Specifications.

   function Get_Attribute_Definition_Clause
     (E  : Entity_Id;
      Id : Attribute_Id) return Node_Id;
   --  Searches the Rep_Item chain for a given entity E, for an instance of an
   --  attribute definition clause with the given attribute Id. If found, the
   --  value returned is the N_Attribute_Definition_Clause node, otherwise
   --  Empty is returned.

   --  WARNING: There is a matching C declaration of this subprogram in fe.h

   function Get_Pragma (E : Entity_Id; Id : Pragma_Id) return Node_Id;
   --  Searches the Rep_Item chain of entity E, for an instance of a pragma
   --  with the given pragma Id. If found, the value returned is the N_Pragma
   --  node, otherwise Empty is returned. The following contract pragmas that
   --  appear in N_Contract nodes are also handled by this routine:
   --    Abstract_State
   --    Async_Readers
   --    Async_Writers
   --    Attach_Handler
   --    Constant_After_Elaboration
   --    Contract_Cases
   --    Depends
   --    Effective_Reads
   --    Effective_Writes
   --    Global
   --    Initial_Condition
   --    Initializes
   --    Interrupt_Handler
   --    No_Caching
   --    Part_Of
   --    Precondition
   --    Postcondition
   --    Refined_Depends
   --    Refined_Global
   --    Refined_Post
   --    Refined_State
   --    Test_Case
   --    Volatile_Function

   function Get_Class_Wide_Pragma
     (E  : Entity_Id;
      Id : Pragma_Id) return Node_Id;
   --  Examine Rep_Item chain to locate a classwide pre- or postcondition of a
   --  primitive operation. Returns Empty if not present.

   function Get_Record_Representation_Clause (E : Entity_Id) return Node_Id;
   --  Searches the Rep_Item chain for a given entity E, for a record
   --  representation clause, and if found, returns it. Returns Empty
   --  if no such clause is found.

   function Present_In_Rep_Item (E : Entity_Id; N : Node_Id) return Boolean;
   --  Return True if N is present in the Rep_Item chain for a given entity E

   procedure Record_Rep_Item (E : Entity_Id; N : Node_Id);
   --  N is the node for a representation pragma, representation clause, an
   --  attribute definition clause, or an aspect specification that applies to
   --  entity E. This procedure links the node N onto the Rep_Item chain for
   --  entity E. Note that it is an error to call this procedure with E being
   --  overloadable, and N being a pragma that applies to multiple overloadable
   --  entities (Convention, Interface, Inline, Inline_Always, Import, Export,
   --  External). This is not allowed even in the case where the entity is not
   --  overloaded, since we can't rely on it being present in the overloaded
   --  case, it is not useful to have it present in the non-overloaded case.

   -------------------------------
   -- Miscellaneous Subprograms --
   -------------------------------

   procedure Append_Entity (Id : Entity_Id; Scop : Entity_Id);
   --  Add an entity to the list of entities declared in the scope Scop

   function Get_Full_View (T : Entity_Id) return Entity_Id;
   --  If T is an incomplete type and the full declaration has been seen, or
   --  is the name of a class_wide type whose root is incomplete, return the
   --  corresponding full declaration, else return T itself.

   function Is_Entity_Name (N : Node_Id) return Boolean;
   --  Test if the node N is the name of an entity (i.e. is an identifier,
   --  expanded name, or an attribute reference that returns an entity).

   --  WARNING: There is a matching C declaration of this subprogram in fe.h

   procedure Link_Entities (First : Entity_Id; Second : Entity_Id);
   --  Link entities First and Second in one entity chain.
   --
   --  NOTE: No updates are done to the First_Entity and Last_Entity fields
   --  of the scope.

   function Next_Index (Id : Node_Id) return Node_Id;
   --  Given an index from a previous call to First_Index or Next_Index,
   --  returns a node representing the occurrence of the next index subtype,
   --  or Empty if there are no more index subtypes.

   procedure Remove_Entity (Id : Entity_Id);
   --  Remove entity Id from the entity chain of its scope

   function Scope_Depth (Id : Entity_Id) return Uint;
   --  Returns the scope depth value of the Id, unless the Id is a record
   --  type, in which case it returns the scope depth of the record scope.

   function Subtype_Kind (K : Entity_Kind) return Entity_Kind;
   --  Given an entity_kind K this function returns the entity_kind
   --  corresponding to subtype kind of the type represented by K. For
   --  example if K is E_Signed_Integer_Type then E_Signed_Integer_Subtype
   --  is returned. If K is already a subtype kind it itself is returned. An
   --  internal error is generated if no such correspondence exists for K.

   procedure Unlink_Next_Entity (Id : Entity_Id);
   --  Unchain entity Id's forward link within the entity chain of its scope

   ----------------------------------
   -- Debugging Output Subprograms --
   ----------------------------------

   procedure Write_Entity_Flags (Id : Entity_Id; Prefix : String);
   --  Writes a series of entries giving a line for each flag that is
   --  set to True. Each line is prefixed by the given string.

   procedure Write_Entity_Info (Id : Entity_Id; Prefix : String);
   --  A debugging procedure to write out information about an entity

   procedure Write_Field6_Name  (Id : Entity_Id);
   procedure Write_Field7_Name  (Id : Entity_Id);
   procedure Write_Field8_Name  (Id : Entity_Id);
   procedure Write_Field9_Name  (Id : Entity_Id);
   procedure Write_Field10_Name (Id : Entity_Id);
   procedure Write_Field11_Name (Id : Entity_Id);
   procedure Write_Field12_Name (Id : Entity_Id);
   procedure Write_Field13_Name (Id : Entity_Id);
   procedure Write_Field14_Name (Id : Entity_Id);
   procedure Write_Field15_Name (Id : Entity_Id);
   procedure Write_Field16_Name (Id : Entity_Id);
   procedure Write_Field17_Name (Id : Entity_Id);
   procedure Write_Field18_Name (Id : Entity_Id);
   procedure Write_Field19_Name (Id : Entity_Id);
   procedure Write_Field20_Name (Id : Entity_Id);
   procedure Write_Field21_Name (Id : Entity_Id);
   procedure Write_Field22_Name (Id : Entity_Id);
   procedure Write_Field23_Name (Id : Entity_Id);
   procedure Write_Field24_Name (Id : Entity_Id);
   procedure Write_Field25_Name (Id : Entity_Id);
   procedure Write_Field26_Name (Id : Entity_Id);
   procedure Write_Field27_Name (Id : Entity_Id);
   procedure Write_Field28_Name (Id : Entity_Id);
   procedure Write_Field29_Name (Id : Entity_Id);
   procedure Write_Field30_Name (Id : Entity_Id);
   procedure Write_Field31_Name (Id : Entity_Id);
   procedure Write_Field32_Name (Id : Entity_Id);
   procedure Write_Field33_Name (Id : Entity_Id);
   procedure Write_Field34_Name (Id : Entity_Id);
   procedure Write_Field35_Name (Id : Entity_Id);
   procedure Write_Field36_Name (Id : Entity_Id);
   procedure Write_Field37_Name (Id : Entity_Id);
   procedure Write_Field38_Name (Id : Entity_Id);
   procedure Write_Field39_Name (Id : Entity_Id);
   procedure Write_Field40_Name (Id : Entity_Id);
   procedure Write_Field41_Name (Id : Entity_Id);
   --  These routines are used in Treepr to output a nice symbolic name for
   --  the given field, depending on the Ekind. No blanks or end of lines are
   --  output, just the characters of the field name.

   --------------------
   -- Inline Pragmas --
   --------------------

   --  Note that these inline pragmas are referenced by the XEINFO utility
   --  program in preparing the corresponding C header, and only those
   --  subprograms meeting the requirements documented in the section on
   --  XEINFO may be referenced in this section.

   pragma Inline (Abstract_States);
   pragma Inline (Accept_Address);
   pragma Inline (Access_Disp_Table);
   pragma Inline (Access_Disp_Table_Elab_Flag);
   pragma Inline (Activation_Record_Component);
   pragma Inline (Actual_Subtype);
   pragma Inline (Address_Taken);
   pragma Inline (Alias);
   pragma Inline (Alignment);
   pragma Inline (Anonymous_Designated_Type);
   pragma Inline (Anonymous_Masters);
   pragma Inline (Anonymous_Object);
   pragma Inline (Associated_Entity);
   pragma Inline (Associated_Formal_Package);
   pragma Inline (Associated_Node_For_Itype);
   pragma Inline (Associated_Storage_Pool);
   pragma Inline (Barrier_Function);
   pragma Inline (BIP_Initialization_Call);
   pragma Inline (Block_Node);
   pragma Inline (Body_Entity);
   pragma Inline (Body_Needed_For_Inlining);
   pragma Inline (Body_Needed_For_SAL);
   pragma Inline (Body_References);
   pragma Inline (C_Pass_By_Copy);
   pragma Inline (Can_Never_Be_Null);
   pragma Inline (Can_Use_Internal_Rep);
   pragma Inline (Checks_May_Be_Suppressed);
   pragma Inline (Class_Wide_Clone);
   pragma Inline (Class_Wide_Type);
   pragma Inline (Cloned_Subtype);
   pragma Inline (Component_Bit_Offset);
   pragma Inline (Component_Clause);
   pragma Inline (Component_Size);
   pragma Inline (Component_Type);
   pragma Inline (Contains_Ignored_Ghost_Code);
   pragma Inline (Contract);
   pragma Inline (Contract_Wrapper);
   pragma Inline (Corresponding_Concurrent_Type);
   pragma Inline (Corresponding_Discriminant);
   pragma Inline (Corresponding_Equality);
   pragma Inline (Corresponding_Protected_Entry);
   pragma Inline (Corresponding_Record_Component);
   pragma Inline (Corresponding_Record_Type);
   pragma Inline (Corresponding_Remote_Type);
   pragma Inline (CR_Discriminant);
   pragma Inline (Current_Use_Clause);
   pragma Inline (Current_Value);
   pragma Inline (Debug_Info_Off);
   pragma Inline (Debug_Renaming_Link);
   pragma Inline (Default_Aspect_Component_Value);
   pragma Inline (Default_Aspect_Value);
   pragma Inline (Default_Expr_Function);
   pragma Inline (Default_Expressions_Processed);
   pragma Inline (Default_Value);
   pragma Inline (Delay_Cleanups);
   pragma Inline (Delay_Subprogram_Descriptors);
   pragma Inline (Delta_Value);
   pragma Inline (Dependent_Instances);
   pragma Inline (Depends_On_Private);
   pragma Inline (Derived_Type_Link);
   pragma Inline (Digits_Value);
   pragma Inline (Direct_Primitive_Operations);
   pragma Inline (Directly_Designated_Type);
   pragma Inline (Disable_Controlled);
   pragma Inline (Discard_Names);
   pragma Inline (Discriminal);
   pragma Inline (Discriminal_Link);
   pragma Inline (Discriminant_Checking_Func);
   pragma Inline (Discriminant_Constraint);
   pragma Inline (Discriminant_Default_Value);
   pragma Inline (Discriminant_Number);
   pragma Inline (Dispatch_Table_Wrappers);
   pragma Inline (DT_Entry_Count);
   pragma Inline (DT_Offset_To_Top_Func);
   pragma Inline (DT_Position);
   pragma Inline (DTC_Entity);
   pragma Inline (Elaborate_Body_Desirable);
   pragma Inline (Elaboration_Entity);
   pragma Inline (Elaboration_Entity_Required);
   pragma Inline (Encapsulating_State);
   pragma Inline (Enclosing_Scope);
   pragma Inline (Entry_Accepted);
   pragma Inline (Entry_Bodies_Array);
   pragma Inline (Entry_Cancel_Parameter);
   pragma Inline (Entry_Component);
   pragma Inline (Entry_Formal);
   pragma Inline (Entry_Index_Constant);
   pragma Inline (Entry_Index_Type);
   pragma Inline (Entry_Parameters_Type);
   pragma Inline (Enum_Pos_To_Rep);
   pragma Inline (Enumeration_Pos);
   pragma Inline (Enumeration_Rep);
   pragma Inline (Enumeration_Rep_Expr);
   pragma Inline (Equivalent_Type);
   pragma Inline (Esize);
   pragma Inline (Extra_Accessibility);
   pragma Inline (Extra_Accessibility_Of_Result);
   pragma Inline (Extra_Constrained);
   pragma Inline (Extra_Formal);
   pragma Inline (Extra_Formals);
   pragma Inline (Finalization_Master);
   pragma Inline (Finalizer);
   pragma Inline (First_Entity);
   pragma Inline (First_Exit_Statement);
   pragma Inline (First_Index);
   pragma Inline (First_Literal);
   pragma Inline (First_Private_Entity);
   pragma Inline (First_Rep_Item);
   pragma Inline (Freeze_Node);
   pragma Inline (From_Limited_With);
   pragma Inline (Full_View);
   pragma Inline (Generic_Homonym);
   pragma Inline (Generic_Renamings);
   pragma Inline (Handler_Records);
   pragma Inline (Has_Aliased_Components);
   pragma Inline (Has_Alignment_Clause);
   pragma Inline (Has_All_Calls_Remote);
   pragma Inline (Has_Atomic_Components);
   pragma Inline (Has_Biased_Representation);
   pragma Inline (Has_Completion);
   pragma Inline (Has_Completion_In_Body);
   pragma Inline (Has_Complex_Representation);
   pragma Inline (Has_Component_Size_Clause);
   pragma Inline (Has_Constrained_Partial_View);
   pragma Inline (Has_Contiguous_Rep);
   pragma Inline (Has_Controlled_Component);
   pragma Inline (Has_Controlling_Result);
   pragma Inline (Has_Convention_Pragma);
   pragma Inline (Has_Default_Aspect);
   pragma Inline (Has_Delayed_Aspects);
   pragma Inline (Has_Delayed_Freeze);
   pragma Inline (Has_Delayed_Rep_Aspects);
   pragma Inline (Has_Discriminants);
   pragma Inline (Has_Dispatch_Table);
   pragma Inline (Has_Dynamic_Predicate_Aspect);
   pragma Inline (Has_Enumeration_Rep_Clause);
   pragma Inline (Has_Exit);
   pragma Inline (Has_Expanded_Contract);
   pragma Inline (Has_Forward_Instantiation);
   pragma Inline (Has_Fully_Qualified_Name);
   pragma Inline (Has_Gigi_Rep_Item);
   pragma Inline (Has_Homonym);
   pragma Inline (Has_Implicit_Dereference);
   pragma Inline (Has_Independent_Components);
   pragma Inline (Has_Inheritable_Invariants);
   pragma Inline (Has_Inherited_DIC);
   pragma Inline (Has_Inherited_Invariants);
   pragma Inline (Has_Initial_Value);
   pragma Inline (Has_Loop_Entry_Attributes);
   pragma Inline (Has_Machine_Radix_Clause);
   pragma Inline (Has_Master_Entity);
   pragma Inline (Has_Missing_Return);
   pragma Inline (Has_Nested_Block_With_Handler);
   pragma Inline (Has_Nested_Subprogram);
   pragma Inline (Has_Non_Standard_Rep);
   pragma Inline (Has_Object_Size_Clause);
   pragma Inline (Has_Out_Or_In_Out_Parameter);
   pragma Inline (Has_Own_DIC);
   pragma Inline (Has_Own_Invariants);
   pragma Inline (Has_Partial_Visible_Refinement);
   pragma Inline (Has_Per_Object_Constraint);
   pragma Inline (Has_Pragma_Controlled);
   pragma Inline (Has_Pragma_Elaborate_Body);
   pragma Inline (Has_Pragma_Inline);
   pragma Inline (Has_Pragma_Inline_Always);
   pragma Inline (Has_Pragma_No_Inline);
   pragma Inline (Has_Pragma_Ordered);
   pragma Inline (Has_Pragma_Pack);
   pragma Inline (Has_Pragma_Preelab_Init);
   pragma Inline (Has_Pragma_Pure);
   pragma Inline (Has_Pragma_Pure_Function);
   pragma Inline (Has_Pragma_Thread_Local_Storage);
   pragma Inline (Has_Pragma_Unmodified);
   pragma Inline (Has_Pragma_Unreferenced);
   pragma Inline (Has_Pragma_Unreferenced_Objects);
   pragma Inline (Has_Pragma_Unused);
   pragma Inline (Has_Predicates);
   pragma Inline (Has_Primitive_Operations);
   pragma Inline (Has_Private_Ancestor);
   pragma Inline (Has_Private_Declaration);
   pragma Inline (Has_Private_Extension);
   pragma Inline (Has_Protected);
   pragma Inline (Has_Qualified_Name);
   pragma Inline (Has_RACW);
   pragma Inline (Has_Record_Rep_Clause);
   pragma Inline (Has_Recursive_Call);
   pragma Inline (Has_Shift_Operator);
   pragma Inline (Has_Size_Clause);
   pragma Inline (Has_Small_Clause);
   pragma Inline (Has_Specified_Layout);
   pragma Inline (Has_Specified_Stream_Input);
   pragma Inline (Has_Specified_Stream_Output);
   pragma Inline (Has_Specified_Stream_Read);
   pragma Inline (Has_Specified_Stream_Write);
   pragma Inline (Has_Static_Discriminants);
   pragma Inline (Has_Static_Predicate);
   pragma Inline (Has_Static_Predicate_Aspect);
   pragma Inline (Has_Storage_Size_Clause);
   pragma Inline (Has_Stream_Size_Clause);
   pragma Inline (Has_Task);
   pragma Inline (Has_Timing_Event);
   pragma Inline (Has_Thunks);
   pragma Inline (Has_Unchecked_Union);
   pragma Inline (Has_Unknown_Discriminants);
   pragma Inline (Has_Visible_Refinement);
   pragma Inline (Has_Volatile_Components);
   pragma Inline (Has_Xref_Entry);
   pragma Inline (Hiding_Loop_Variable);
   pragma Inline (Hidden_In_Formal_Instance);
   pragma Inline (Homonym);
   pragma Inline (Ignore_SPARK_Mode_Pragmas);
   pragma Inline (Import_Pragma);
   pragma Inline (Incomplete_Actuals);
   pragma Inline (In_Package_Body);
   pragma Inline (In_Private_Part);
   pragma Inline (In_Use);
   pragma Inline (Inner_Instances);
   pragma Inline (Interface_Alias);
   pragma Inline (Interface_Name);
   pragma Inline (Interfaces);
   pragma Inline (Invariants_Ignored);
   pragma Inline (Is_Abstract_Subprogram);
   pragma Inline (Is_Abstract_Type);
   pragma Inline (Is_Access_Constant);
   pragma Inline (Is_Activation_Record);
   pragma Inline (Is_Actual_Subtype);
   pragma Inline (Is_Access_Protected_Subprogram_Type);
   pragma Inline (Is_Access_Subprogram_Type);
   pragma Inline (Is_Access_Type);
   pragma Inline (Is_Ada_2005_Only);
   pragma Inline (Is_Ada_2012_Only);
   pragma Inline (Is_Aggregate_Type);
   pragma Inline (Is_Aliased);
   pragma Inline (Is_Array_Type);
   pragma Inline (Is_Assignable);
   pragma Inline (Is_Asynchronous);
   pragma Inline (Is_Atomic);
   pragma Inline (Is_Atomic_Or_VFA);
   pragma Inline (Is_Bit_Packed_Array);
   pragma Inline (Is_Called);
   pragma Inline (Is_Character_Type);
   pragma Inline (Is_Checked_Ghost_Entity);
   pragma Inline (Is_Child_Unit);
   pragma Inline (Is_Class_Wide_Clone);
   pragma Inline (Is_Class_Wide_Equivalent_Type);
   pragma Inline (Is_Class_Wide_Type);
   pragma Inline (Is_Compilation_Unit);
   pragma Inline (Is_Completely_Hidden);
   pragma Inline (Is_Composite_Type);
   pragma Inline (Is_Concurrent_Body);
   pragma Inline (Is_Concurrent_Record_Type);
   pragma Inline (Is_Concurrent_Type);
   pragma Inline (Is_Constr_Subt_For_U_Nominal);
   pragma Inline (Is_Constr_Subt_For_UN_Aliased);
   pragma Inline (Is_Constrained);
   pragma Inline (Is_Constructor);
   pragma Inline (Is_Controlled_Active);
   pragma Inline (Is_Controlling_Formal);
   pragma Inline (Is_CPP_Class);
   pragma Inline (Is_Decimal_Fixed_Point_Type);
   pragma Inline (Is_Descendant_Of_Address);
   pragma Inline (Is_DIC_Procedure);
   pragma Inline (Is_Digits_Type);
   pragma Inline (Is_Discrete_Or_Fixed_Point_Type);
   pragma Inline (Is_Discrete_Type);
   pragma Inline (Is_Discrim_SO_Function);
   pragma Inline (Is_Discriminant_Check_Function);
   pragma Inline (Is_Dispatch_Table_Entity);
   pragma Inline (Is_Dispatching_Operation);
   pragma Inline (Is_Elaboration_Checks_OK_Id);
   pragma Inline (Is_Elaboration_Warnings_OK_Id);
   pragma Inline (Is_Elementary_Type);
   pragma Inline (Is_Eliminated);
   pragma Inline (Is_Entry);
   pragma Inline (Is_Entry_Formal);
   pragma Inline (Is_Entry_Wrapper);
   pragma Inline (Is_Enumeration_Type);
   pragma Inline (Is_Exception_Handler);
   pragma Inline (Is_Exported);
   pragma Inline (Is_Finalized_Transient);
   pragma Inline (Is_First_Subtype);
   pragma Inline (Is_Fixed_Point_Type);
   pragma Inline (Is_Floating_Point_Type);
   pragma Inline (Is_Formal);
   pragma Inline (Is_Formal_Object);
   pragma Inline (Is_Formal_Subprogram);
   pragma Inline (Is_Frozen);
   pragma Inline (Is_Generic_Actual_Subprogram);
   pragma Inline (Is_Generic_Actual_Type);
   pragma Inline (Is_Generic_Instance);
   pragma Inline (Is_Generic_Subprogram);
   pragma Inline (Is_Generic_Type);
   pragma Inline (Is_Generic_Unit);
   pragma Inline (Is_Ghost_Entity);
   pragma Inline (Is_Hidden);
   pragma Inline (Is_Hidden_Non_Overridden_Subpgm);
   pragma Inline (Is_Hidden_Open_Scope);
   pragma Inline (Is_Ignored_Ghost_Entity);
   pragma Inline (Is_Ignored_Transient);
   pragma Inline (Is_Immediately_Visible);
   pragma Inline (Is_Implementation_Defined);
   pragma Inline (Is_Imported);
   pragma Inline (Is_Incomplete_Or_Private_Type);
   pragma Inline (Is_Incomplete_Type);
   pragma Inline (Is_Independent);
   pragma Inline (Is_Initial_Condition_Procedure);
   pragma Inline (Is_Inlined);
   pragma Inline (Is_Inlined_Always);
   pragma Inline (Is_Instantiated);
   pragma Inline (Is_Integer_Type);
   pragma Inline (Is_Interface);
   pragma Inline (Is_Internal);
   pragma Inline (Is_Interrupt_Handler);
   pragma Inline (Is_Intrinsic_Subprogram);
   pragma Inline (Is_Invariant_Procedure);
   pragma Inline (Is_Itype);
   pragma Inline (Is_Known_Non_Null);
   pragma Inline (Is_Known_Null);
   pragma Inline (Is_Known_Valid);
   pragma Inline (Is_Limited_Composite);
   pragma Inline (Is_Limited_Interface);
   pragma Inline (Is_Limited_Record);
   pragma Inline (Is_Local_Anonymous_Access);
   pragma Inline (Is_Loop_Parameter);
   pragma Inline (Is_Machine_Code_Subprogram);
   pragma Inline (Is_Modular_Integer_Type);
   pragma Inline (Is_Named_Number);
   pragma Inline (Is_Non_Static_Subtype);
   pragma Inline (Is_Null_Init_Proc);
   pragma Inline (Is_Numeric_Type);
   pragma Inline (Is_Object);
   pragma Inline (Is_Obsolescent);
   pragma Inline (Is_Only_Out_Parameter);
   pragma Inline (Is_Ordinary_Fixed_Point_Type);
   pragma Inline (Is_Overloadable);
   pragma Inline (Is_Package_Body_Entity);
   pragma Inline (Is_Packed);
   pragma Inline (Is_Packed_Array_Impl_Type);
   pragma Inline (Is_Param_Block_Component_Type);
   pragma Inline (Is_Partial_Invariant_Procedure);
   pragma Inline (Is_Potentially_Use_Visible);
   pragma Inline (Is_Predicate_Function);
   pragma Inline (Is_Predicate_Function_M);
   pragma Inline (Is_Preelaborated);
   pragma Inline (Is_Primitive);
   pragma Inline (Is_Primitive_Wrapper);
   pragma Inline (Is_Private_Composite);
   pragma Inline (Is_Private_Descendant);
   pragma Inline (Is_Private_Primitive);
   pragma Inline (Is_Private_Type);
   pragma Inline (Is_Protected_Type);
   pragma Inline (Is_Public);
   pragma Inline (Is_Pure);
   pragma Inline (Is_Pure_Unit_Access_Type);
   pragma Inline (Is_RACW_Stub_Type);
   pragma Inline (Is_Raised);
   pragma Inline (Is_Real_Type);
   pragma Inline (Is_Record_Type);
   pragma Inline (Is_Remote_Call_Interface);
   pragma Inline (Is_Remote_Types);
   pragma Inline (Is_Renaming_Of_Object);
   pragma Inline (Is_Return_Object);
   pragma Inline (Is_Safe_To_Reevaluate);
   pragma Inline (Is_Scalar_Type);
   pragma Inline (Is_Shared_Passive);
   pragma Inline (Is_Signed_Integer_Type);
   pragma Inline (Is_Static_Type);
   pragma Inline (Is_Statically_Allocated);
   pragma Inline (Is_Subprogram);
   pragma Inline (Is_Tag);
   pragma Inline (Is_Tagged_Type);
   pragma Inline (Is_Task_Type);
   pragma Inline (Is_Thunk);
   pragma Inline (Is_Trivial_Subprogram);
   pragma Inline (Is_True_Constant);
   pragma Inline (Is_Type);
   pragma Inline (Is_Unchecked_Union);
   pragma Inline (Is_Underlying_Full_View);
   pragma Inline (Is_Underlying_Record_View);
   pragma Inline (Is_Unimplemented);
   pragma Inline (Is_Unsigned_Type);
   pragma Inline (Is_Uplevel_Referenced_Entity);
   pragma Inline (Is_Valued_Procedure);
   pragma Inline (Is_Visible_Formal);
   pragma Inline (Is_Visible_Lib_Unit);
   pragma Inline (Is_Volatile_Full_Access);
   pragma Inline (Itype_Printed);
   pragma Inline (Kill_Elaboration_Checks);
   pragma Inline (Kill_Range_Checks);
   pragma Inline (Known_To_Have_Preelab_Init);
   pragma Inline (Last_Aggregate_Assignment);
   pragma Inline (Last_Assignment);
   pragma Inline (Last_Entity);
   pragma Inline (Limited_View);
   pragma Inline (Link_Entities);
   pragma Inline (Linker_Section_Pragma);
   pragma Inline (Lit_Indexes);
   pragma Inline (Lit_Strings);
   pragma Inline (Low_Bound_Tested);
   pragma Inline (Machine_Radix_10);
   pragma Inline (Master_Id);
   pragma Inline (Materialize_Entity);
   pragma Inline (May_Inherit_Delayed_Rep_Aspects);
   pragma Inline (Mechanism);
   pragma Inline (Minimum_Accessibility);
   pragma Inline (Modulus);
   pragma Inline (Must_Be_On_Byte_Boundary);
   pragma Inline (Must_Have_Preelab_Init);
   pragma Inline (Needs_Activation_Record);
   pragma Inline (Needs_Debug_Info);
   pragma Inline (Needs_No_Actuals);
   pragma Inline (Never_Set_In_Source);
   pragma Inline (Next_Index);
   pragma Inline (Next_Inlined_Subprogram);
   pragma Inline (Next_Literal);
   pragma Inline (No_Dynamic_Predicate_On_Actual);
   pragma Inline (No_Pool_Assigned);
   pragma Inline (No_Predicate_On_Actual);
   pragma Inline (No_Reordering);
   pragma Inline (No_Return);
   pragma Inline (No_Strict_Aliasing);
   pragma Inline (No_Tagged_Streams_Pragma);
   pragma Inline (Non_Binary_Modulus);
   pragma Inline (Non_Limited_View);
   pragma Inline (Nonzero_Is_True);
   pragma Inline (Normalized_First_Bit);
   pragma Inline (Normalized_Position);
   pragma Inline (Normalized_Position_Max);
   pragma Inline (OK_To_Rename);
   pragma Inline (Optimize_Alignment_Space);
   pragma Inline (Optimize_Alignment_Time);
   pragma Inline (Original_Access_Type);
   pragma Inline (Original_Array_Type);
   pragma Inline (Original_Protected_Subprogram);
   pragma Inline (Original_Record_Component);
   pragma Inline (Overlays_Constant);
   pragma Inline (Overridden_Operation);
   pragma Inline (Package_Instantiation);
   pragma Inline (Packed_Array_Impl_Type);
   pragma Inline (Parameter_Mode);
   pragma Inline (Parent_Subtype);
   pragma Inline (Part_Of_Constituents);
   pragma Inline (Part_Of_References);
   pragma Inline (Partial_View_Has_Unknown_Discr);
   pragma Inline (Pending_Access_Types);
   pragma Inline (Postconditions_Proc);
   pragma Inline (Predicated_Parent);
   pragma Inline (Predicates_Ignored);
   pragma Inline (Prev_Entity);
   pragma Inline (Prival);
   pragma Inline (Prival_Link);
   pragma Inline (Private_Dependents);
   pragma Inline (Protected_Body_Subprogram);
   pragma Inline (Protected_Formal);
   pragma Inline (Protected_Subprogram);
   pragma Inline (Protection_Object);
   pragma Inline (Reachable);
   pragma Inline (Receiving_Entry);
   pragma Inline (Referenced);
   pragma Inline (Referenced_As_LHS);
   pragma Inline (Referenced_As_Out_Parameter);
   pragma Inline (Refinement_Constituents);
   pragma Inline (Register_Exception_Call);
   pragma Inline (Related_Array_Object);
   pragma Inline (Related_Expression);
   pragma Inline (Related_Instance);
   pragma Inline (Related_Type);
   pragma Inline (Relative_Deadline_Variable);
   pragma Inline (Remove_Entity);
   pragma Inline (Renamed_Entity);
   pragma Inline (Renamed_In_Spec);
   pragma Inline (Renamed_Object);
   pragma Inline (Renaming_Map);
   pragma Inline (Requires_Overriding);
   pragma Inline (Return_Applies_To);
   pragma Inline (Return_Present);
   pragma Inline (Returns_By_Ref);
   pragma Inline (Reverse_Bit_Order);
   pragma Inline (Reverse_Storage_Order);
   pragma Inline (Rewritten_For_C);
   pragma Inline (RM_Size);
   pragma Inline (Scalar_Range);
   pragma Inline (Scale_Value);
   pragma Inline (Scope_Depth_Value);
   pragma Inline (Sec_Stack_Needed_For_Return);
   pragma Inline (Shared_Var_Procs_Instance);
   pragma Inline (Size_Check_Code);
   pragma Inline (Size_Depends_On_Discriminant);
   pragma Inline (Size_Known_At_Compile_Time);
   pragma Inline (Small_Value);
   pragma Inline (SPARK_Aux_Pragma);
   pragma Inline (SPARK_Aux_Pragma_Inherited);
   pragma Inline (SPARK_Pragma);
   pragma Inline (SPARK_Pragma_Inherited);
   pragma Inline (Spec_Entity);
   pragma Inline (SSO_Set_High_By_Default);
   pragma Inline (SSO_Set_Low_By_Default);
   pragma Inline (Static_Discrete_Predicate);
   pragma Inline (Static_Elaboration_Desired);
   pragma Inline (Static_Initialization);
   pragma Inline (Static_Real_Or_String_Predicate);
   pragma Inline (Status_Flag_Or_Transient_Decl);
   pragma Inline (Storage_Size_Variable);
   pragma Inline (Stored_Constraint);
   pragma Inline (Stores_Attribute_Old_Prefix);
   pragma Inline (Strict_Alignment);
   pragma Inline (String_Literal_Length);
   pragma Inline (String_Literal_Low_Bound);
   pragma Inline (Subprograms_For_Type);
   pragma Inline (Subps_Index);
   pragma Inline (Suppress_Elaboration_Warnings);
   pragma Inline (Suppress_Initialization);
   pragma Inline (Suppress_Style_Checks);
   pragma Inline (Suppress_Value_Tracking_On_Call);
   pragma Inline (Task_Body_Procedure);
   pragma Inline (Thunk_Entity);
   pragma Inline (Treat_As_Volatile);
   pragma Inline (Underlying_Full_View);
   pragma Inline (Underlying_Record_View);
   pragma Inline (Universal_Aliasing);
   pragma Inline (Unlink_Next_Entity);
   pragma Inline (Unset_Reference);
   pragma Inline (Used_As_Generic_Actual);
   pragma Inline (Uses_Lock_Free);
   pragma Inline (Uses_Sec_Stack);
   pragma Inline (Validated_Object);
   pragma Inline (Warnings_Off);
   pragma Inline (Warnings_Off_Used);
   pragma Inline (Warnings_Off_Used_Unmodified);
   pragma Inline (Warnings_Off_Used_Unreferenced);
   pragma Inline (Was_Hidden);
   pragma Inline (Wrapped_Entity);

   pragma Inline (Init_Alignment);
   pragma Inline (Init_Component_Bit_Offset);
   pragma Inline (Init_Component_Size);
   pragma Inline (Init_Digits_Value);
   pragma Inline (Init_Esize);
   pragma Inline (Init_RM_Size);

   pragma Inline (Set_Abstract_States);
   pragma Inline (Set_Accept_Address);
   pragma Inline (Set_Access_Disp_Table);
   pragma Inline (Set_Access_Disp_Table_Elab_Flag);
   pragma Inline (Set_Activation_Record_Component);
   pragma Inline (Set_Actual_Subtype);
   pragma Inline (Set_Address_Taken);
   pragma Inline (Set_Alias);
   pragma Inline (Set_Alignment);
   pragma Inline (Set_Anonymous_Designated_Type);
   pragma Inline (Set_Anonymous_Masters);
   pragma Inline (Set_Anonymous_Object);
   pragma Inline (Set_Associated_Entity);
   pragma Inline (Set_Associated_Formal_Package);
   pragma Inline (Set_Associated_Node_For_Itype);
   pragma Inline (Set_Associated_Storage_Pool);
   pragma Inline (Set_Barrier_Function);
   pragma Inline (Set_BIP_Initialization_Call);
   pragma Inline (Set_Block_Node);
   pragma Inline (Set_Body_Entity);
   pragma Inline (Set_Body_Needed_For_Inlining);
   pragma Inline (Set_Body_Needed_For_SAL);
   pragma Inline (Set_Body_References);
   pragma Inline (Set_C_Pass_By_Copy);
   pragma Inline (Set_Can_Never_Be_Null);
   pragma Inline (Set_Can_Use_Internal_Rep);
   pragma Inline (Set_Checks_May_Be_Suppressed);
   pragma Inline (Set_Class_Wide_Clone);
   pragma Inline (Set_Class_Wide_Type);
   pragma Inline (Set_Cloned_Subtype);
   pragma Inline (Set_Component_Bit_Offset);
   pragma Inline (Set_Component_Clause);
   pragma Inline (Set_Component_Size);
   pragma Inline (Set_Component_Type);
   pragma Inline (Set_Contains_Ignored_Ghost_Code);
   pragma Inline (Set_Contract);
   pragma Inline (Set_Contract_Wrapper);
   pragma Inline (Set_Corresponding_Concurrent_Type);
   pragma Inline (Set_Corresponding_Discriminant);
   pragma Inline (Set_Corresponding_Equality);
   pragma Inline (Set_Corresponding_Protected_Entry);
   pragma Inline (Set_Corresponding_Record_Component);
   pragma Inline (Set_Corresponding_Record_Type);
   pragma Inline (Set_Corresponding_Remote_Type);
   pragma Inline (Set_CR_Discriminant);
   pragma Inline (Set_Current_Use_Clause);
   pragma Inline (Set_Current_Value);
   pragma Inline (Set_Debug_Info_Off);
   pragma Inline (Set_Debug_Renaming_Link);
   pragma Inline (Set_Default_Aspect_Component_Value);
   pragma Inline (Set_Default_Aspect_Value);
   pragma Inline (Set_Default_Expr_Function);
   pragma Inline (Set_Default_Expressions_Processed);
   pragma Inline (Set_Default_Value);
   pragma Inline (Set_Delay_Cleanups);
   pragma Inline (Set_Delay_Subprogram_Descriptors);
   pragma Inline (Set_Delta_Value);
   pragma Inline (Set_Dependent_Instances);
   pragma Inline (Set_Depends_On_Private);
   pragma Inline (Set_Derived_Type_Link);
   pragma Inline (Set_Digits_Value);
   pragma Inline (Set_Direct_Primitive_Operations);
   pragma Inline (Set_Directly_Designated_Type);
   pragma Inline (Set_Disable_Controlled);
   pragma Inline (Set_Discard_Names);
   pragma Inline (Set_Discriminal);
   pragma Inline (Set_Discriminal_Link);
   pragma Inline (Set_Discriminant_Checking_Func);
   pragma Inline (Set_Discriminant_Constraint);
   pragma Inline (Set_Discriminant_Default_Value);
   pragma Inline (Set_Discriminant_Number);
   pragma Inline (Set_Dispatch_Table_Wrappers);
   pragma Inline (Set_DT_Entry_Count);
   pragma Inline (Set_DT_Offset_To_Top_Func);
   pragma Inline (Set_DT_Position);
   pragma Inline (Set_DTC_Entity);
   pragma Inline (Set_Elaborate_Body_Desirable);
   pragma Inline (Set_Elaboration_Entity);
   pragma Inline (Set_Elaboration_Entity_Required);
   pragma Inline (Set_Encapsulating_State);
   pragma Inline (Set_Enclosing_Scope);
   pragma Inline (Set_Entry_Accepted);
   pragma Inline (Set_Entry_Bodies_Array);
   pragma Inline (Set_Entry_Cancel_Parameter);
   pragma Inline (Set_Entry_Component);
   pragma Inline (Set_Entry_Formal);
   pragma Inline (Set_Entry_Max_Queue_Lengths_Array);
   pragma Inline (Set_Entry_Parameters_Type);
   pragma Inline (Set_Enum_Pos_To_Rep);
   pragma Inline (Set_Enumeration_Pos);
   pragma Inline (Set_Enumeration_Rep);
   pragma Inline (Set_Enumeration_Rep_Expr);
   pragma Inline (Set_Equivalent_Type);
   pragma Inline (Set_Esize);
   pragma Inline (Set_Extra_Accessibility);
   pragma Inline (Set_Extra_Accessibility_Of_Result);
   pragma Inline (Set_Extra_Constrained);
   pragma Inline (Set_Extra_Formal);
   pragma Inline (Set_Extra_Formals);
   pragma Inline (Set_Finalization_Master);
   pragma Inline (Set_Finalizer);
   pragma Inline (Set_First_Entity);
   pragma Inline (Set_First_Exit_Statement);
   pragma Inline (Set_First_Index);
   pragma Inline (Set_First_Literal);
   pragma Inline (Set_First_Private_Entity);
   pragma Inline (Set_First_Rep_Item);
   pragma Inline (Set_Freeze_Node);
   pragma Inline (Set_From_Limited_With);
   pragma Inline (Set_Full_View);
   pragma Inline (Set_Generic_Homonym);
   pragma Inline (Set_Generic_Renamings);
   pragma Inline (Set_Handler_Records);
   pragma Inline (Set_Has_Aliased_Components);
   pragma Inline (Set_Has_Alignment_Clause);
   pragma Inline (Set_Has_All_Calls_Remote);
   pragma Inline (Set_Has_Atomic_Components);
   pragma Inline (Set_Has_Biased_Representation);
   pragma Inline (Set_Has_Completion);
   pragma Inline (Set_Has_Completion_In_Body);
   pragma Inline (Set_Has_Complex_Representation);
   pragma Inline (Set_Has_Component_Size_Clause);
   pragma Inline (Set_Has_Constrained_Partial_View);
   pragma Inline (Set_Has_Contiguous_Rep);
   pragma Inline (Set_Has_Controlled_Component);
   pragma Inline (Set_Has_Controlling_Result);
   pragma Inline (Set_Has_Convention_Pragma);
   pragma Inline (Set_Has_Default_Aspect);
   pragma Inline (Set_Has_Delayed_Aspects);
   pragma Inline (Set_Has_Delayed_Freeze);
   pragma Inline (Set_Has_Delayed_Rep_Aspects);
   pragma Inline (Set_Has_Discriminants);
   pragma Inline (Set_Has_Dispatch_Table);
   pragma Inline (Set_Has_Dynamic_Predicate_Aspect);
   pragma Inline (Set_Has_Enumeration_Rep_Clause);
   pragma Inline (Set_Has_Exit);
   pragma Inline (Set_Has_Expanded_Contract);
   pragma Inline (Set_Has_Forward_Instantiation);
   pragma Inline (Set_Has_Fully_Qualified_Name);
   pragma Inline (Set_Has_Gigi_Rep_Item);
   pragma Inline (Set_Has_Homonym);
   pragma Inline (Set_Has_Implicit_Dereference);
   pragma Inline (Set_Has_Independent_Components);
   pragma Inline (Set_Has_Inheritable_Invariants);
   pragma Inline (Set_Has_Inherited_DIC);
   pragma Inline (Set_Has_Inherited_Invariants);
   pragma Inline (Set_Has_Initial_Value);
   pragma Inline (Set_Has_Loop_Entry_Attributes);
   pragma Inline (Set_Has_Machine_Radix_Clause);
   pragma Inline (Set_Has_Master_Entity);
   pragma Inline (Set_Has_Missing_Return);
   pragma Inline (Set_Has_Nested_Block_With_Handler);
   pragma Inline (Set_Has_Nested_Subprogram);
   pragma Inline (Set_Has_Non_Standard_Rep);
   pragma Inline (Set_Has_Object_Size_Clause);
   pragma Inline (Set_Has_Out_Or_In_Out_Parameter);
   pragma Inline (Set_Has_Own_DIC);
   pragma Inline (Set_Has_Own_Invariants);
   pragma Inline (Set_Has_Partial_Visible_Refinement);
   pragma Inline (Set_Has_Per_Object_Constraint);
   pragma Inline (Set_Has_Pragma_Controlled);
   pragma Inline (Set_Has_Pragma_Elaborate_Body);
   pragma Inline (Set_Has_Pragma_Inline);
   pragma Inline (Set_Has_Pragma_Inline_Always);
   pragma Inline (Set_Has_Pragma_No_Inline);
   pragma Inline (Set_Has_Pragma_Ordered);
   pragma Inline (Set_Has_Pragma_Pack);
   pragma Inline (Set_Has_Pragma_Preelab_Init);
   pragma Inline (Set_Has_Pragma_Pure);
   pragma Inline (Set_Has_Pragma_Pure_Function);
   pragma Inline (Set_Has_Pragma_Thread_Local_Storage);
   pragma Inline (Set_Has_Pragma_Unmodified);
   pragma Inline (Set_Has_Pragma_Unreferenced);
   pragma Inline (Set_Has_Pragma_Unreferenced_Objects);
   pragma Inline (Set_Has_Predicates);
   pragma Inline (Set_Has_Primitive_Operations);
   pragma Inline (Set_Has_Private_Ancestor);
   pragma Inline (Set_Has_Private_Declaration);
   pragma Inline (Set_Has_Private_Extension);
   pragma Inline (Set_Has_Protected);
   pragma Inline (Set_Has_Qualified_Name);
   pragma Inline (Set_Has_RACW);
   pragma Inline (Set_Has_Record_Rep_Clause);
   pragma Inline (Set_Has_Recursive_Call);
   pragma Inline (Set_Has_Shift_Operator);
   pragma Inline (Set_Has_Size_Clause);
   pragma Inline (Set_Has_Small_Clause);
   pragma Inline (Set_Has_Specified_Layout);
   pragma Inline (Set_Has_Specified_Stream_Input);
   pragma Inline (Set_Has_Specified_Stream_Output);
   pragma Inline (Set_Has_Specified_Stream_Read);
   pragma Inline (Set_Has_Specified_Stream_Write);
   pragma Inline (Set_Has_Static_Discriminants);
   pragma Inline (Set_Has_Static_Predicate);
   pragma Inline (Set_Has_Static_Predicate_Aspect);
   pragma Inline (Set_Has_Storage_Size_Clause);
   pragma Inline (Set_Has_Stream_Size_Clause);
   pragma Inline (Set_Has_Task);
   pragma Inline (Set_Has_Timing_Event);
   pragma Inline (Set_Has_Thunks);
   pragma Inline (Set_Has_Unchecked_Union);
   pragma Inline (Set_Has_Unknown_Discriminants);
   pragma Inline (Set_Has_Visible_Refinement);
   pragma Inline (Set_Has_Volatile_Components);
   pragma Inline (Set_Has_Xref_Entry);
   pragma Inline (Set_Hiding_Loop_Variable);
   pragma Inline (Set_Hidden_In_Formal_Instance);
   pragma Inline (Set_Homonym);
   pragma Inline (Set_Ignore_SPARK_Mode_Pragmas);
   pragma Inline (Set_Import_Pragma);
   pragma Inline (Set_Incomplete_Actuals);
   pragma Inline (Set_In_Package_Body);
   pragma Inline (Set_In_Private_Part);
   pragma Inline (Set_In_Use);
   pragma Inline (Set_Inner_Instances);
   pragma Inline (Set_Interface_Alias);
   pragma Inline (Set_Interface_Name);
   pragma Inline (Set_Interfaces);
   pragma Inline (Set_Invariants_Ignored);
   pragma Inline (Set_Is_Abstract_Subprogram);
   pragma Inline (Set_Is_Abstract_Type);
   pragma Inline (Set_Is_Access_Constant);
   pragma Inline (Set_Is_Activation_Record);
   pragma Inline (Set_Is_Actual_Subtype);
   pragma Inline (Set_Is_Ada_2005_Only);
   pragma Inline (Set_Is_Ada_2012_Only);
   pragma Inline (Set_Is_Aliased);
   pragma Inline (Set_Is_Asynchronous);
   pragma Inline (Set_Is_Atomic);
   pragma Inline (Set_Is_Bit_Packed_Array);
   pragma Inline (Set_Is_Called);
   pragma Inline (Set_Is_Character_Type);
   pragma Inline (Set_Is_Checked_Ghost_Entity);
   pragma Inline (Set_Is_Child_Unit);
   pragma Inline (Set_Is_Class_Wide_Clone);
   pragma Inline (Set_Is_Class_Wide_Equivalent_Type);
   pragma Inline (Set_Is_Compilation_Unit);
   pragma Inline (Set_Is_Completely_Hidden);
   pragma Inline (Set_Is_Concurrent_Record_Type);
   pragma Inline (Set_Is_Constr_Subt_For_U_Nominal);
   pragma Inline (Set_Is_Constr_Subt_For_UN_Aliased);
   pragma Inline (Set_Is_Constrained);
   pragma Inline (Set_Is_Constructor);
   pragma Inline (Set_Is_Controlled_Active);
   pragma Inline (Set_Is_Controlling_Formal);
   pragma Inline (Set_Is_CPP_Class);
   pragma Inline (Set_Is_Descendant_Of_Address);
   pragma Inline (Set_Is_DIC_Procedure);
   pragma Inline (Set_Is_Discrim_SO_Function);
   pragma Inline (Set_Is_Discriminant_Check_Function);
   pragma Inline (Set_Is_Dispatch_Table_Entity);
   pragma Inline (Set_Is_Dispatching_Operation);
   pragma Inline (Set_Is_Elaboration_Checks_OK_Id);
   pragma Inline (Set_Is_Elaboration_Warnings_OK_Id);
   pragma Inline (Set_Is_Eliminated);
   pragma Inline (Set_Is_Entry_Formal);
   pragma Inline (Set_Is_Entry_Wrapper);
   pragma Inline (Set_Is_Exception_Handler);
   pragma Inline (Set_Is_Exported);
   pragma Inline (Set_Is_Finalized_Transient);
   pragma Inline (Set_Is_First_Subtype);
   pragma Inline (Set_Is_Formal_Subprogram);
   pragma Inline (Set_Is_Frozen);
   pragma Inline (Set_Is_Generic_Actual_Subprogram);
   pragma Inline (Set_Is_Generic_Actual_Type);
   pragma Inline (Set_Is_Generic_Instance);
   pragma Inline (Set_Is_Generic_Type);
   pragma Inline (Set_Is_Hidden);
   pragma Inline (Set_Is_Hidden_Non_Overridden_Subpgm);
   pragma Inline (Set_Is_Hidden_Open_Scope);
   pragma Inline (Set_Is_Ignored_Ghost_Entity);
   pragma Inline (Set_Is_Ignored_Transient);
   pragma Inline (Set_Is_Immediately_Visible);
   pragma Inline (Set_Is_Implementation_Defined);
   pragma Inline (Set_Is_Imported);
   pragma Inline (Set_Is_Independent);
   pragma Inline (Set_Is_Initial_Condition_Procedure);
   pragma Inline (Set_Is_Inlined);
   pragma Inline (Set_Is_Inlined_Always);
   pragma Inline (Set_Is_Instantiated);
   pragma Inline (Set_Is_Interface);
   pragma Inline (Set_Is_Internal);
   pragma Inline (Set_Is_Interrupt_Handler);
   pragma Inline (Set_Is_Intrinsic_Subprogram);
   pragma Inline (Set_Is_Invariant_Procedure);
   pragma Inline (Set_Is_Itype);
   pragma Inline (Set_Is_Known_Non_Null);
   pragma Inline (Set_Is_Known_Null);
   pragma Inline (Set_Is_Known_Valid);
   pragma Inline (Set_Is_Limited_Composite);
   pragma Inline (Set_Is_Limited_Interface);
   pragma Inline (Set_Is_Limited_Record);
   pragma Inline (Set_Is_Local_Anonymous_Access);
   pragma Inline (Set_Is_Loop_Parameter);
   pragma Inline (Set_Is_Machine_Code_Subprogram);
   pragma Inline (Set_Is_Non_Static_Subtype);
   pragma Inline (Set_Is_Null_Init_Proc);
   pragma Inline (Set_Is_Obsolescent);
   pragma Inline (Set_Is_Only_Out_Parameter);
   pragma Inline (Set_Is_Package_Body_Entity);
   pragma Inline (Set_Is_Packed);
   pragma Inline (Set_Is_Packed_Array_Impl_Type);
   pragma Inline (Set_Is_Param_Block_Component_Type);
   pragma Inline (Set_Is_Partial_Invariant_Procedure);
   pragma Inline (Set_Is_Potentially_Use_Visible);
   pragma Inline (Set_Is_Predicate_Function);
   pragma Inline (Set_Is_Predicate_Function_M);
   pragma Inline (Set_Is_Preelaborated);
   pragma Inline (Set_Is_Primitive);
   pragma Inline (Set_Is_Primitive_Wrapper);
   pragma Inline (Set_Is_Private_Composite);
   pragma Inline (Set_Is_Private_Descendant);
   pragma Inline (Set_Is_Private_Primitive);
   pragma Inline (Set_Is_Public);
   pragma Inline (Set_Is_Pure);
   pragma Inline (Set_Is_Pure_Unit_Access_Type);
   pragma Inline (Set_Is_RACW_Stub_Type);
   pragma Inline (Set_Is_Raised);
   pragma Inline (Set_Is_Remote_Call_Interface);
   pragma Inline (Set_Is_Remote_Types);
   pragma Inline (Set_Is_Renaming_Of_Object);
   pragma Inline (Set_Is_Return_Object);
   pragma Inline (Set_Is_Safe_To_Reevaluate);
   pragma Inline (Set_Is_Shared_Passive);
   pragma Inline (Set_Is_Static_Type);
   pragma Inline (Set_Is_Statically_Allocated);
   pragma Inline (Set_Is_Tag);
   pragma Inline (Set_Is_Tagged_Type);
   pragma Inline (Set_Is_Thunk);
   pragma Inline (Set_Is_Trivial_Subprogram);
   pragma Inline (Set_Is_True_Constant);
   pragma Inline (Set_Is_Unchecked_Union);
   pragma Inline (Set_Is_Underlying_Full_View);
   pragma Inline (Set_Is_Underlying_Record_View);
   pragma Inline (Set_Is_Unimplemented);
   pragma Inline (Set_Is_Unsigned_Type);
   pragma Inline (Set_Is_Uplevel_Referenced_Entity);
   pragma Inline (Set_Is_Valued_Procedure);
   pragma Inline (Set_Is_Visible_Formal);
   pragma Inline (Set_Is_Visible_Lib_Unit);
   pragma Inline (Set_Is_Volatile);
   pragma Inline (Set_Is_Volatile_Full_Access);
   pragma Inline (Set_Itype_Printed);
   pragma Inline (Set_Kill_Elaboration_Checks);
   pragma Inline (Set_Kill_Range_Checks);
   pragma Inline (Set_Known_To_Have_Preelab_Init);
   pragma Inline (Set_Last_Aggregate_Assignment);
   pragma Inline (Set_Last_Assignment);
   pragma Inline (Set_Last_Entity);
   pragma Inline (Set_Limited_View);
   pragma Inline (Set_Linker_Section_Pragma);
   pragma Inline (Set_Lit_Indexes);
   pragma Inline (Set_Lit_Strings);
   pragma Inline (Set_Low_Bound_Tested);
   pragma Inline (Set_Machine_Radix_10);
   pragma Inline (Set_Master_Id);
   pragma Inline (Set_Materialize_Entity);
   pragma Inline (Set_May_Inherit_Delayed_Rep_Aspects);
   pragma Inline (Set_Mechanism);
   pragma Inline (Set_Minimum_Accessibility);
   pragma Inline (Set_Modulus);
   pragma Inline (Set_Must_Be_On_Byte_Boundary);
   pragma Inline (Set_Must_Have_Preelab_Init);
   pragma Inline (Set_Needs_Activation_Record);
   pragma Inline (Set_Needs_Debug_Info);
   pragma Inline (Set_Needs_No_Actuals);
   pragma Inline (Set_Never_Set_In_Source);
   pragma Inline (Set_Next_Inlined_Subprogram);
   pragma Inline (Set_No_Dynamic_Predicate_On_Actual);
   pragma Inline (Set_No_Pool_Assigned);
   pragma Inline (Set_No_Predicate_On_Actual);
   pragma Inline (Set_No_Reordering);
   pragma Inline (Set_No_Return);
   pragma Inline (Set_No_Strict_Aliasing);
   pragma Inline (Set_No_Tagged_Streams_Pragma);
   pragma Inline (Set_Non_Binary_Modulus);
   pragma Inline (Set_Non_Limited_View);
   pragma Inline (Set_Nonzero_Is_True);
   pragma Inline (Set_Normalized_First_Bit);
   pragma Inline (Set_Normalized_Position);
   pragma Inline (Set_Normalized_Position_Max);
   pragma Inline (Set_OK_To_Rename);
   pragma Inline (Set_Optimize_Alignment_Space);
   pragma Inline (Set_Optimize_Alignment_Time);
   pragma Inline (Set_Original_Access_Type);
   pragma Inline (Set_Original_Array_Type);
   pragma Inline (Set_Original_Protected_Subprogram);
   pragma Inline (Set_Original_Record_Component);
   pragma Inline (Set_Overlays_Constant);
   pragma Inline (Set_Overridden_Operation);
   pragma Inline (Set_Package_Instantiation);
   pragma Inline (Set_Packed_Array_Impl_Type);
   pragma Inline (Set_Parent_Subtype);
   pragma Inline (Set_Part_Of_Constituents);
   pragma Inline (Set_Part_Of_References);
   pragma Inline (Set_Partial_View_Has_Unknown_Discr);
   pragma Inline (Set_Pending_Access_Types);
   pragma Inline (Set_Postconditions_Proc);
   pragma Inline (Set_Predicated_Parent);
   pragma Inline (Set_Predicates_Ignored);
   pragma Inline (Set_Prev_Entity);
   pragma Inline (Set_Prival);
   pragma Inline (Set_Prival_Link);
   pragma Inline (Set_Private_Dependents);
   pragma Inline (Set_Protected_Body_Subprogram);
   pragma Inline (Set_Protected_Formal);
   pragma Inline (Set_Protected_Subprogram);
   pragma Inline (Set_Protection_Object);
   pragma Inline (Set_Reachable);
   pragma Inline (Set_Receiving_Entry);
   pragma Inline (Set_Referenced);
   pragma Inline (Set_Referenced_As_LHS);
   pragma Inline (Set_Referenced_As_Out_Parameter);
   pragma Inline (Set_Refinement_Constituents);
   pragma Inline (Set_Register_Exception_Call);
   pragma Inline (Set_Related_Array_Object);
   pragma Inline (Set_Related_Expression);
   pragma Inline (Set_Related_Instance);
   pragma Inline (Set_Related_Type);
   pragma Inline (Set_Relative_Deadline_Variable);
   pragma Inline (Set_Renamed_Entity);
   pragma Inline (Set_Renamed_In_Spec);
   pragma Inline (Set_Renamed_Object);
   pragma Inline (Set_Renaming_Map);
   pragma Inline (Set_Requires_Overriding);
   pragma Inline (Set_Return_Applies_To);
   pragma Inline (Set_Return_Present);
   pragma Inline (Set_Returns_By_Ref);
   pragma Inline (Set_Reverse_Bit_Order);
   pragma Inline (Set_Reverse_Storage_Order);
   pragma Inline (Set_Rewritten_For_C);
   pragma Inline (Set_RM_Size);
   pragma Inline (Set_Scalar_Range);
   pragma Inline (Set_Scale_Value);
   pragma Inline (Set_Scope_Depth_Value);
   pragma Inline (Set_Sec_Stack_Needed_For_Return);
   pragma Inline (Set_Shared_Var_Procs_Instance);
   pragma Inline (Set_Size_Check_Code);
   pragma Inline (Set_Size_Depends_On_Discriminant);
   pragma Inline (Set_Size_Known_At_Compile_Time);
   pragma Inline (Set_Small_Value);
   pragma Inline (Set_SPARK_Aux_Pragma);
   pragma Inline (Set_SPARK_Aux_Pragma_Inherited);
   pragma Inline (Set_SPARK_Pragma);
   pragma Inline (Set_SPARK_Pragma_Inherited);
   pragma Inline (Set_Spec_Entity);
   pragma Inline (Set_SSO_Set_High_By_Default);
   pragma Inline (Set_SSO_Set_Low_By_Default);
   pragma Inline (Set_Static_Discrete_Predicate);
   pragma Inline (Set_Static_Elaboration_Desired);
   pragma Inline (Set_Static_Initialization);
   pragma Inline (Set_Static_Real_Or_String_Predicate);
   pragma Inline (Set_Status_Flag_Or_Transient_Decl);
   pragma Inline (Set_Storage_Size_Variable);
   pragma Inline (Set_Stored_Constraint);
   pragma Inline (Set_Stores_Attribute_Old_Prefix);
   pragma Inline (Set_Strict_Alignment);
   pragma Inline (Set_String_Literal_Length);
   pragma Inline (Set_String_Literal_Low_Bound);
   pragma Inline (Set_Subprograms_For_Type);
   pragma Inline (Set_Subps_Index);
   pragma Inline (Set_Suppress_Elaboration_Warnings);
   pragma Inline (Set_Suppress_Initialization);
   pragma Inline (Set_Suppress_Style_Checks);
   pragma Inline (Set_Suppress_Value_Tracking_On_Call);
   pragma Inline (Set_Task_Body_Procedure);
   pragma Inline (Set_Thunk_Entity);
   pragma Inline (Set_Treat_As_Volatile);
   pragma Inline (Set_Underlying_Full_View);
   pragma Inline (Set_Underlying_Record_View);
   pragma Inline (Set_Universal_Aliasing);
   pragma Inline (Set_Unset_Reference);
   pragma Inline (Set_Used_As_Generic_Actual);
   pragma Inline (Set_Uses_Lock_Free);
   pragma Inline (Set_Uses_Sec_Stack);
   pragma Inline (Set_Validated_Object);
   pragma Inline (Set_Warnings_Off);
   pragma Inline (Set_Warnings_Off_Used);
   pragma Inline (Set_Warnings_Off_Used_Unmodified);
   pragma Inline (Set_Warnings_Off_Used_Unreferenced);
   pragma Inline (Set_Was_Hidden);
   pragma Inline (Set_Wrapped_Entity);

   --  END XEINFO INLINES

   --  The following Inline pragmas are *not* read by xeinfo when building the
   --  C version of this interface automatically (so the C version will end up
   --  making out of line calls). The pragma scan in xeinfo will be terminated
   --  on encountering the END XEINFO INLINES line. We inline things here which
   --  are small, but not of the canonical attribute access/set format that can
   --  be handled by xeinfo.

   pragma Inline (Base_Type);
   pragma Inline (Is_Base_Type);
   pragma Inline (Is_Boolean_Type);
   pragma Inline (Is_Controlled);
   pragma Inline (Is_Entity_Name);
   pragma Inline (Is_Package_Or_Generic_Package);
   pragma Inline (Is_Packed_Array);
   pragma Inline (Is_String_Type);
   pragma Inline (Is_Subprogram_Or_Generic_Subprogram);
   pragma Inline (Is_Volatile);
   pragma Inline (Is_Wrapper_Package);
   pragma Inline (Known_RM_Size);
   pragma Inline (Known_Static_Component_Bit_Offset);
   pragma Inline (Known_Static_RM_Size);
   pragma Inline (Scope_Depth);
   pragma Inline (Scope_Depth_Set);
   pragma Inline (Unknown_RM_Size);

end Einfo;
