------------------------------------------------------------------------------
--                                                                          --
--                         GNAT COMPILER COMPONENTS                         --
--                                                                          --
--                                E I N F O                                 --
--                                                                          --
--                                 S p e c                                  --
--                                                                          --
--          Copyright (C) 1992-2023, 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.  See the GNU General Public License --
-- for  more details.  You should have  received  a copy of the GNU General --
-- Public License  distributed with GNAT; see file COPYING3.  If not, go to --
-- http://www.gnu.org/licenses for a complete copy of the license.          --
--                                                                          --
-- GNAT was originally developed  by the GNAT team at  New York University. --
-- Extensive contributions were provided by Ada Core Technologies Inc.      --
--                                                                          --
------------------------------------------------------------------------------

pragma Warnings (Off); -- with/use clauses for children
with Namet;  use Namet;
with Snames; use Snames;
with Stand;  use Stand;
with Types;  use Types;
with Uintp;  use Uintp;
with Urealp; use Urealp;
pragma Warnings (On);

package Einfo is

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

--  See the spec of Gen_IL.Gen for instructions on making changes to this file.
--  Note that the official definition of what entities have what fields is in
--  Gen_IL.Gen.Gen_Entities; if there is a discrepancy between that and the
--  comments here, Gen_IL.Gen.Gen_Entities wins.

--  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 fields in
--  tree nodes.

--  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. These fields are defined in the Sinfo package, but their
--    full documentation is 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.

----------------------------------
-- 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 2022 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 2022.

--  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 2022 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 2022 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 activities 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 units 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 back end 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. In Ada 2012, the flag is also set
--  when an address aspect for the object is encountered.

--  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 class-wide
--  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.

--  Other attributes are noted as applying to the [root type only]. The
--  attribute can be referenced on a subtype (and automatically retrieves the
--  value from the root type). However, it is an error to try to set the
--  attribute on other than the root type.

--  The definitive definition of what is [... type only] is in Gen_Entities.
--  See calls to Sm passing Base_Type_Only, Impl_Base_Type_Only, or
--  Root_Type_Only.

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

--    Accept_Address
--       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 [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 [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.

--    Access_Subprogram_Wrapper
--       Entity created for access_to_subprogram types that have pre/post
--       conditions. Wrapper subprogram is created when analyzing corresponding
--       aspect, and inherits said aspects. Body of subprogram includes code
--       to check contracts, and a direct call to the designated subprogram.
--       The body is part of the freeze actions for the type.
--       The Subprogram_Type created for the Access_To_Subprogram carries the
--       Access_Subprogram_Wrapper for use in the expansion of indirect calls.

--    Activation_Record_Component
--       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
--       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, except in the
--       case of a return object that lives on the secondary stack where Etype
--       is the nominal unconstrained 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
--       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-point types and subtypes. This yields the value of
--       the Aft attribute for the type, i.e. the number of decimal digits
--       needed after the decimal point to accommodate the delta of the type,
--       unless the delta is greater than 0.1, in which case it is 1.

--    Alias
--       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
--       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
--       Defined in variables which represent anonymous finalization masters.
--       Contains the designated type which is being serviced by the master.

--    Anonymous_Masters
--       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
--       Present in protected and task type entities. Contains the entity of
--       the anonymous object created for a single protected or task type.

--    Associated_Entity
--       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
--       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
--       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 [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
--       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
--       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
--       Defined in package and generic package entities, points to the
--       corresponding package body entity if one is present.

--    Body_Needed_For_SAL
--       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
--       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
--       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
--       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 [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
--       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
--       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 [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
--       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
--       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 and local suppress stacks must be consulted to
--       determine if there actually is an active Suppress or Unsuppress pragma
--       that applies to the entity.

--    Class_Postconditions
--       Defined on subprogram entities. Set if the subprogram has class-wide
--       postconditions. Denotes the (and-then) expression built by merging
--       inherited class-wide postconditions with its own class-wide
--       postconditions.

--    Class_Preconditions
--       Defined on subprogram entities. Set if the subprogram has class-wide
--       preconditions. Denotes the (or-else) expression built by merging
--       inherited class-wide preconditions with its own class-wide
--       preconditions.

--    Class_Preconditions_Subprogram
--       Defined on subprogram entities. Set on subprogram helpers and also on
--       the indirect-call wrapper internally built for subprograms that have
--       class-wide preconditions. References the subprogram that has the
--       class-wide preconditions.

--    Class_Wide_Type
--       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
--       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
--       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 Repinfo 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
--       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 [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 Repinfo
--       for details of these values. Component_Size can also be negative in
--       an illegal program that says e.g. "for T'Component_Size use -8;".

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

--    Contains_Ignored_Ghost_Code
--       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
--       Defined in constant, entry, entry family, operator, [generic] package,
--       package body, protected unit, [generic] subprogram, subprogram body,
--       variable, task unit, and type entities. Points to the contract of the
--       entity, holding various assertion items and data classifiers.

--    Contract_Wrapper
--       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
--       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
--       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
--       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
--       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
--       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_Record_Component
--       Defined in components of a derived untagged record type, including
--       discriminants. For a regular component or a stored discriminant,
--       points to the corresponding component in the parent type. Set to
--       Empty for a non-stored 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
--       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
--       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
--       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
--       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
--       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
--       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
--       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. If the parent of an Itype is a type or
--       subtype declaration, we return the declaration node as for any other
--       type. For other Itypes, we return Empty.

--    Default_Aspect_Component_Value [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 [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
--       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
--       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
--       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
--       Defined in entities that have finalization lists (subprograms, blocks
--       and tasks) or finalizers (package specs and bodies). Set if there are
--       pending package body instantiations for the corresponding entity. If
--       it is set, then generation of cleanup actions for the corresponding
--       entity must be delayed, since the insertion of the package bodies may
--       affect cleanup generation (see Inline for further details).

--    Delta_Value
--       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
--       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
--       Defined in all type entities. Set if the type is private or if it
--       depends on a private type.

--    Derived_Type_Link
--       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
--       Defined in floating point types and subtypes and decimal types and
--       subtypes. Contains the Digits value specified in the declaration.

--    Direct_Primitive_Operations
--       Defined in tagged types and subtypes (including synchronized types),
--       in tagged private types, and in tagged incomplete types. Moreover, it
--       is also defined for untagged types, both when Extensions_Allowed is
--       True (-gnatX) to support the extension feature of prefixed calls for
--       untagged types, and when Extensions_Allowed is False to get better
--       error messages. This field is an element list of entities for
--       primitive operations of the type. For incomplete types the list is
--       always empty. 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. When expansion is disabled, the
--       corresponding record type of a synchronized type is not constructed.
--       In that case, such types carry this attribute directly.

--    Directly_Designated_Type
--       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 [base type only]
--      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
--       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
--       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
--       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
--       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
--       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
--       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
--       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 [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.

--    Dynamic_Call_Helper
--       Defined on subprogram entities. Set if the subprogram has class-wide
--       preconditions. Denotes the helper that evaluates at run time the
--       class-wide preconditions performing dispatching calls.

--    DTC_Entity
--       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
--       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
--       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
--       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
--       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
--       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
--       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
--       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
--       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
--       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
--       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
--       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.
--       This is also defined in labels, because we temporarily set the
--       Ekind of an E_Block to E_Label in Analyze_Implicit_Label_Declaration.

--    Entry_Component
--       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
--       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
--       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
--       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
--       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
--       Defined in enumeration literals. Contains the position number
--       corresponding to the value of the enumeration literal.

--    Enumeration_Rep
--       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
--       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
--       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 position value. In this case, the alternative is the following:
--       if the representation is not contiguous, then Enum_Pos_To_Rep is the
--       entity for an array constant built when the type is frozen that maps
--       Pos values to corresponding Rep values, whose index type is Natural
--       and whose component type is the enumeration type itself; or else, if
--       the representation is contiguous, then Enum_Pos_To_Rep is the entity
--       of the index type defined above.

--    Equivalent_Type
--       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
--       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
--       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
--       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
--       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
--       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
--       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
--       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 [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 [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
--       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
--       Defined in all entities that act as scopes to which a list of
--       associated entities is attached, and also in all [sub]types. Some
--       entities are both; for example E_Record_Type acts as a scope and
--       is a type. [Sub]types that do not act as scopes (e.g. scalars) are
--       included to make it more convenient to Mutate_Entity between type
--       kinds. Points to a list of associated entities linked through the
--       Next_Entity field with Empty marking end-of-list.
--       See also Last_Entity.

--    First_Exit_Statement
--       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
--       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
--       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
--       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
--       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 [base type only]
--       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
--       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
--       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
--       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
--       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
--       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
--       Defined in subprogram and package entities. Points to a list of
--       identifiers referencing the handler record entities for the
--       corresponding unit.

--    Has_Aliased_Components [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
--       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
--       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 [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
--       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
--       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
--       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 [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 [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 [base type only]
--       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
--       Defined in enumeration types. Set if the type has a representation
--       clause whose entries are successive integers.

--    Has_Controlled_Component [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
--       Defined in E_Function entities. Set if the function is a primitive
--       function of a tagged type which can dispatch on result. Also set on
--       secondary stack thunks built for such a primitive function.

--    Has_Convention_Pragma
--       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 [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
--      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
--       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
--       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
--       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
--       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
--       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
--       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
--       Defined in loop entities. Set if the loop contains an exit statement.

--    Has_Expanded_Contract
--       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. non-native: other than Convention_Ada,
--       Convention_Intrinsic, Convention_Entry, Convention_Protected,
--       Convention_Stubbed and Convention_Ada_Pass_By_(Copy,Reference).

--    Has_Forward_Instantiation
--       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
--       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_Ghost_Predicate_Aspect
--       Defined in all types and subtypes. Set if a Ghost_Predicate aspect
--       was explicitly applied to the type.

--    Has_Gigi_Rep_Item
--       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
--       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
--       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 [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 [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 [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 [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
--       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_Limited_View (synth)
--       Defined in all entities. True for non-generic package entities that
--       are non-instances and their Limited_View attribute is present.

--    Has_Loop_Entry_Attributes
--       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
--       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
--       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
--       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
--       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
--       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 [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
--       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
--       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 [base type only]
--       Defined in all type entities. Set for a private type and its full view
--       (and its underlying full view, if the full view is itself private)
--       when the type is subject to pragma Default_Initial_Condition.

--    Has_Own_Invariants [base type only]
--       Defined in all type entities. Set on any type that defines at least
--       one invariant of its own.

--       Note: this flag is set on both partial and full view of types to which
--       an Invariant pragma or aspect applies, and on the underlying full view
--       if the full view is private.

--    Has_Partial_Visible_Refinement
--       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
--       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 [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
--       Defined in all entities. Set in compilation unit entities if a
--       pragma Elaborate_Body applies to the compilation unit.

--    Has_Pragma_Inline
--       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
--       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
--       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 [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 [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
--       Defined in type and subtype entities. If set indicates that a valid
--       pragma Preelaborable_Initialization applies to the type.

--    Has_Pragma_Pure
--       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
--       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
--       Defined in all entities. If set, indicates that a valid pragma
--       Thread_Local_Storage was given for the entity.

--    Has_Pragma_Unmodified
--       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
--       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.

--    Has_Pragma_Unreferenced_Objects
--       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
--       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
--       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, and on the underlying full view
--       if the full view is private.

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

--    Has_Private_Ancestor
--       Applies to derived record types. True if an 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
--       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
--       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 [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
--       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
--       Defined in package spec entities. Set if the spec contains the
--       declaration of a remote access-to-classwide type.

--    Has_Record_Rep_Clause [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
--       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 [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
--       Defined in entities for types and objects. Set if a size or value size
--       clause is defined for the entity. Used to prevent multiple clauses
--       for a given entity. Note that it is always initially cleared for a
--       derived type, even though the Size or Value_Size clause for such a
--       type might be inherited from an ancestor type.

--    Has_Small_Clause
--       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 [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
--    Has_Specified_Stream_Output
--    Has_Specified_Stream_Read
--    Has_Specified_Stream_Write
--       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
--       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
--       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
--       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 [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
--       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 [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 [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
--       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 [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
--       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
--       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 [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
--       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).

--    Has_Yield_Aspect
--       Defined in subprograms, generic subprograms, entries, entry families.
--       Set if the entity has aspect Yield.

--    Hiding_Loop_Variable
--       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
--       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
--       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
--       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.

--    Ignored_Class_Postconditions
--       Defined on subprogram entities. Set if the subprogram has class-wide
--       postconditions. Denotes the (and-then) expression built by merging
--       inherited ignored class-wide postconditions with its own ignored
--       class-wide postconditions.

--    Ignored_Class_Preconditions
--       Defined on subprogram entities. Set if the subprogram has class-wide
--       preconditions. Denotes the (or-else) expression built by merging
--       inherited ignored class-wide preconditions with its own ignored
--       class-wide preconditions.

--    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
--       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
--       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
--       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
--       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.

--    Indirect_Call_Wrapper
--       Defined on subprogram entities. Set if the subprogram has class-wide
--       preconditions. Denotes the internal wrapper that checks preconditions
--       and invokes the subprogram body. Subp'Access points to the indirect
--       call wrapper if available.

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

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

--    Interface_Alias
--       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
--       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
--       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).

--    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
--       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.
--
--       Note that manipulation of scopes on the scope stack will also cause
--       the flag to be set/unset since the setting of scopes affects
--       visibility.

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

--    Is_Abstract_Type
--       Defined in all types. Set for abstract types.

--    Is_Access_Constant
--       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_Access_Object_Type (synthesized)
--       Applies to all entities, true for access-to-object types and subtypes

--    Is_Activation_Record
--       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
--       Defined on all types, true for the generated constrained subtypes
--       that are built for unconstrained composite actuals.

--    Is_Ada_2005_Only
--       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
--       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_Ada_2022_Only
--       Defined in all entities, true if a valid pragma Ada_2022 applies to
--       the entity which specifically names the entity, indicating that the
--       entity is Ada 2022 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_2022.

--    Is_Aliased
--       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
--       Defined in all type entities and in procedure entities. Set
--       if a pragma Asynchronous applies to the entity.

--    Is_Atomic
--       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_Full_Access (synth)
--       Defined in all type entities, and also in constants, components and
--       variables. Set if an aspect/pragma Atomic/Shared, or an aspect/pragma
--       Volatile_Full_Access or an Ada 2022 aspect Full_Access_Only applies
--       to the entity. In the case of private and incomplete types, the flag
--       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 [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
--       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
--       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
--       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
--       Defined in all entities. Set only for defining entities of program
--       units that are child units (but False for subunits).

--    Is_Class_Wide_Equivalent_Type
--       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_Class_Wide_Wrapper
--       Defined in subprogram entities. Indicates that it has been created as
--       a wrapper in a generic/instance scenario involving a formal type and
--       a generic primitive operation when the actual is a class-wide type.

--    Is_Compilation_Unit
--       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
--       Defined on discriminants. Only set on stored discriminants of
--       untagged types. When set, the entity is a stored 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 stored 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
--       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
--       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
--       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
--       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
--       Defined in function and procedure entities. Set if a pragma
--       CPP_Constructor applies to the subprogram.

--    Is_Controlled_Active [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
--       Defined in all Formal_Kind entities. Marks the controlling parameters
--       of dispatching operations.

--    Is_CPP_Class
--       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_CUDA_Kernel
--       Defined in function and procedure entities. Set if the subprogram is a
--       CUDA kernel.

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

--    Is_Descendant_Of_Address
--       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
--       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
--       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
--       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
--       Applies to all entities. Set to indicate to the backend that this
--       entity is associated with a dispatch table.

--    Is_Dispatch_Table_Wrapper
--       Applies to all entities. Set on wrappers built when the subprogram has
--       class-wide preconditions or class-wide postconditions affected by
--       overriding (AI12-0195).

--    Is_Dispatching_Operation
--       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
--       Defined in elaboration targets (see terminology in Sem_Elab). Set when
--       the target appears in a region which is subject to enabled 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
--       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
--       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
--       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
--       Defined on wrappers created for entries that have precondition or
--       postcondition aspects.

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

--    Is_Exception_Handler
--       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
--       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
--       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
--       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_Lower_Bound_Array_Subtype
--       Defined in type entities. True for unconstrained array types and
--       subtypes where at least one index has a range specified with a fixed
--       lower bound (range syntax is "<expression> .. <>").

--    Is_Fixed_Lower_Bound_Index_Subtype
--       Defined in type entities. True for an index of an unconstrained array
--       type or subtype whose range is specified with a fixed lower bound
--       (range syntax is "<expression> .. <>").

--    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
--       Defined in all entities. Set for generic formal subprograms.

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

--    Is_Generic_Actual_Subprogram
--       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.

--    Is_Generic_Actual_Type
--       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
--       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
--       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
--       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
--       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
--       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
--       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
--       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
--       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
--       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
--       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
--       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
--       Defined in functions and procedures. Set for a generated procedure
--       which verifies the assumption of pragma Initial_Condition at run time.

--    Is_Inlined
--       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
--       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
--       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
--       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
--       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
--       Defined in procedures. Set if a pragma Interrupt_Handler applies
--       to the procedure. The procedure must be a parameterless protected
--       procedure.

--    Is_Intrinsic_Subprogram
--       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
--       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
--       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
--       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
--       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
--       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
--       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
--       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
--       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
--       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
--       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
--       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
--       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
--       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
--       Defined in all entities. Set for any entity to which a valid pragma
--       or aspect Obsolescent applies.

--    Is_Only_Out_Parameter
--       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
--       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 [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
--       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 [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
--       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_Not_Self_Hidden
--       Defined in all entities. Roughly speaking, this is False if the
--       declaration of the entity is hidden from all visibility because
--       we are within its declaration, as defined by 8.3(16-18). When
--       we reach the end of the declaration or other place defined by
--       8.3(16-18), this is set to True. However, this flag is not used
--       for most overloaded declarations (but is used for enumeration
--       literals), and is also used for other cases of premature usage
--       such as defined in 3.8(10) for record components and the like.
--       In addition, there are cases involving discriminants where we
--       set this True, then temporarily False again.

--    Is_Potentially_Use_Visible
--       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
--       Present in functions and procedures. Set for generated predicate
--       functions.

--    Is_Preelaborated
--       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 necessarily mean that no elaboration code is
--       generated for the package.

--    Is_Primitive
--       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
--       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
--       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
--       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
--       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
--       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
--       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
--       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
--       Defined in all types, true for the stub types generated for remote
--       access-to-class-wide types.

--    Is_Raised
--       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_Relaxed_Initialization_State (synthesized)
--       Applies to all entities, true for abstract states that are subject to
--       option Relaxed_Initialization.

--    Is_Remote_Call_Interface
--       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
--       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
--       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 wherever the variable is used.

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

--    Is_Safe_To_Reevaluate
--       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
--       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
--       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
--       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
--       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
--       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
--       Defined in all entities. True for subprograms that are thunks, that is
--       small subprograms built by the expander for particular tagged types.
--       There are two different kinds of thunk: interface thunk and secondary
--       stack thunk. Interface thunks are built for tagged types that cover
--       interface types. As part of the runtime call to an interface, they
--       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.

--       Secondary stack thunks are built for tagged types that do not need to
--       be returned on the secondary stack but have primitive functions which
--       can dispatch on result. In this case, dispatching calls made to these
--       primitive functions nevertheless need to return on the secondary stack
--       and a thunk is built to move the result from the primary stack onto
--       the secondary stack on return from the primitive function. The flag
--       Has_Controlling_Result is set on secondary stack thunks but not on
--       interface thunks.

--       Thunks may be chained in a single way: an interface thunk may point to
--       a secondary stack thunk, which points to the final thunk target.

--    Is_Trivial_Subprogram
--       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
--       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 [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
--       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 [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
--       Defined in all entities. Set for any entity to which a valid pragma
--       or aspect Unimplemented applies.

--    Is_Unsigned_Type
--       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
--       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
--       Defined in procedure entities. Set if an Import_Valued_Procedure
--       or Export_Valued_Procedure pragma applies to the procedure entity.

--    Is_Visible_Formal
--       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
--       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
--       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.
--       This is a synthesized attribute in Einfo.Utils, based on
--       Is_Volatile_Type and Is_Volatile_Object. The latter two should be
--       used in preference to Is_Volatile when we know that we have a type
--       or an object.

--    Is_Volatile_Full_Access
--       Defined in all type entities, and also in constants, components, and
--       variables. Set if an aspect/pragma Volatile_Full_Access or an Ada 2022
--       aspect Full_Access_Only 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.

--    Is_Wrapper
--       Defined in subprogram entities. Indicates that it has been created as
--       a wrapper to handle inherited class-wide pre/post conditions that call
--       overridden primitives or as a wrapper of a controlling function.

--    Itype_Printed
--       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
--       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
--       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
--       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
--       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
--       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
--       Defined for the same entity kinds as First_Entity. Last_Entity
--       is the last entry in the list. 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
--       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
--       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_Hash [root type only]
--       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 hash function. See unit Exp_Imgv for full details of
--       the nature and use of this entity for implementing the Value
--       attribute for the enumeration type in question.

--    Lit_Indexes
--       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
--       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
--       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
--       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
--       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
--       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
--       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 (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
--       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 [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
--       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
--       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
--       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
--       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
--       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
--       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-stored) 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
--       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
--       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
--       Defined in discrete types. Set for generic formal types that are used
--       in loops and quantified expressions. The corresponding actual cannot
--       have dynamic predicates.

--    No_Pool_Assigned [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
--       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 [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
--       Defined in all entities. Set for subprograms and generic subprograms
--       to which a valid aspect or pragma No_Return applies.

--    No_Strict_Aliasing [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
--       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 [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
--       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 [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
--       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
--       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.

--    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
--       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
--       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
--       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
--       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
--       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
--       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
--       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-stored discriminants, where
--         it points to the stored discriminant it renames.
--
--       In subtypes (tagged and untagged):
--         Points to the component in the base type.

--    Overlays_Constant
--       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
--       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
--       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
--       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 [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
--       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
--       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 definition and the corresponding
--       body.

--    Partial_DIC_Procedure (synthesized)
--       Defined in 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 that takes a single argument of the given type
--       and verifies the assertion expression of the DIC pragma at run time.
--       When present, the Partial_DIC_Procedure of a type only checks DICs
--       associated with the partial (private) view of the type, and is invoked
--       by the full DIC_Procedure (which may check additional DICs associated
--       with the full view).

--       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_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
--       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
--       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
--       Obsolete field which can be removed once CodePeer is fixed ???

--    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 sometimes an
--       additional Boolean parameter), 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_Expression
--      Defined on functions. For the defining identifier of the subprogram
--      declaration (not of the subprogram body) of a predicate function,
--      yields the expression for the noninherited portion of the given
--      predicate (except in the case where the inherited portion is
--      non-empty and the non-inherited portion is empty, in which case the
--      expression for the inherited portion is returned). Otherwise yields
--      empty.

--    Predicated_Parent
--       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
--       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
--       Defined in all entities. The entities of a scope are chained, and this
--       field is used as a backward pointer for this entity list - effectively
--       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
--       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
--       Defined in constants and variables which rename private components of
--       protected types. Set to the original private component.

--    Private_Dependents
--       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
--       Defined in protected operations. References the entity for the
--       subprogram which implements the body of the operation.

--    Protected_Formal
--       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
--       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
--       Applies to protected entries, entry families and subprograms. Denotes
--       the entity which is used to rename the _object component of protected
--       types.

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

--    Receiving_Entry
--       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
--       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
--       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
--       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
--       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
--       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
--       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
--       Defined in variables, types and functions. 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.
--       Finally this node is used on functions specified via the Real_Literal
--       aspect, to denote the 2-parameter overloading, if found.
--
--       Shouldn't it also be used for the same purpose in errout? It seems
--       odd to have two mechanisms here???

--    Related_Instance
--       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
--       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 [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
--       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
--       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
--       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.

--    Requires_Overriding
--       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
--       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.
--       Also defined in special E_Block entities built as E_Return_Statement
--       for extended return statements and attached to the block statement
--       by Expand_N_Extended_Return_Statement before being turned into an
--       E_Block by semantic analysis.

--    Return_Present
--       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.

--    Return_Statement
--       Defined in E_Variable. Set when Is_Return_Object is set, in which
--       case it points to the N_Simple_Return_Statement made from the
--       extended return statement.

--    Returns_By_Ref
--       Defined in subprogram type entities and functions. Set if a function
--       (or an access-to-function type) returns a result by reference, either
--       because the result is built in place, or its type is by-reference.

--    Reverse_Bit_Order [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 [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
--       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
--       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
--       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
--       Defined in decimal fixed-point types and subtypes. This holds the
--       value of the Scale attribute for the type, i.e. the scale of the type
--       defined as the integer N such that the delta is equal to 10.0**(-N).
--       Note that, if Scale_Value is positive, then it is equal to Aft_Value.

--    Scope
--       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, loops, return statements,
--       concurrent types, private 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, and for record entities, is the
--       Scope_Depth of the record's scope.

--    Scope_Depth_Value
--       Defined in program units, blocks, loops, return statements,
--       concurrent types, private types and entries.
--       Indicates the number of scopes that statically enclose the declaration
--       of the unit or type. Library units have a depth of one. Note that
--       record types can act as scopes but do NOT have this field set (see
--       Scope_Depth above). Queries should normally be via Scope_Depth,
--       and not call Scope_Depth_Value directly.

--    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
--       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
--       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
--       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 or value size clause is present in
--       the rep item chain for an entity then that attribute definition clause
--       is returned. Otherwise Size_Clause returns Empty. 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
--       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
--       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
--       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
--       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
--       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
--       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
--       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
--       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 [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 [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_Call_Helper
--       Defined on subprogram entities. Set if the subprogram has class-wide
--       preconditions. Denotes the helper that evaluates at runtime the
--       class-wide preconditions performing static calls.

--    Static_Discrete_Predicate
--       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
--       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
--       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
--       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
--       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 [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
--       Defined in type entities. Points to an element list containing the
--       expressions for each of the stored discriminants, if any, for the
--       (sub)type.

--    Stores_Attribute_Old_Prefix
--       Defined in constants, variables, and types which are created during
--       expansion in order to save the value of attribute 'Old's prefix.

--    Strict_Alignment [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
--       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
--       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
--       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
--       Present in subprogram entities. 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
--       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
--       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
--       Defined in all entities. Suppresses any style checks specifically
--       associated with the given entity if set.

--    Suppress_Value_Tracking_On_Call
--       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
--       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
--       Defined in functions and procedures which have been classified as
--       Is_Thunk. Set to the target entity called by the thunk.

--    Treat_As_Volatile
--       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.

--    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.

--    Underlying_Full_View
--       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
--       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 [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
--       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
--       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
--       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
--       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
--       Defined in variables. Contains the object whose value is captured by
--       the variable for validity check purposes.

--    Warnings_Off
--       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
--       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
--       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
--       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
--       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
--       Defined in functions and procedures which have been classified as
--       Is_Primitive_Wrapper. Set to the entity being wrapper.

--    Wrapped_Statements
--       Defined in functions, procedures, entries, and entry families. Refers
--       to the entity of the _Wrapped_Statements procedure, which gets
--       generated as part of the expansion of contracts and postconditions
--       and contains its enclosing subprogram's original source declarations
--       and statements.

--    LSP_Subprogram
--       Defined in subprogram entities. Set on wrappers created to handle
--       inherited class-wide pre/post conditions that call overridden
--       primitives. It references the parent primitive that has the
--       class-wide pre/post conditions. LSP stands for Liskov Substitution
--       Principle.

---------------------------
-- 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 preferred uses.

--  There are three related attributes:

--    Renamed_Entity
--    Renamed_Object
--    Alias

--  These are implemented in Einfo.Utils as renamings of the Renamed_Or_Alias
--  field. 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 subprogram
--  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.

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

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

--    E_Access_Type,
--    E_General_Access_Type,
--    E_Anonymous_Access_Type

--    E_Access_Subprogram_Type,
--    E_Anonymous_Access_Subprogram_Type,

--    E_Access_Protected_Subprogram_Type,
--    E_Anonymous_Access_Protected_Subprogram_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, we define the kind E_Access_Attribute_Type as the initial
--  kind associated with an access attribute whose prefix is an object.
--  After resolution, a specific access type will be established instead
--  as determined by the context. Note that, for the case of an access
--  attribute whose prefix is a subprogram, we build a corresponding type
--  with E_Access_Subprogram_Type or E_Access_Protected_Subprogram_Type kind
--  but whose designated type is the subprogram itself, instead of a regular
--  E_Subprogram_Type entity.

   --------------------------------------------------------
   -- 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
   --    Next_Entity
   --    Scope
   --    Homonym
   --    Etype
   --    First_Rep_Item
   --    Freeze_Node
   --    Prev_Entity
   --    Associated_Entity

   --    Address_Taken
   --    Can_Never_Be_Null
   --    Checks_May_Be_Suppressed
   --    Debug_Info_Off
   --    Has_Convention_Pragma
   --    Has_Delayed_Aspects
   --    Has_Delayed_Freeze
   --    Has_Fully_Qualified_Name
   --    Has_Gigi_Rep_Item
   --    Has_Homonym
   --    Has_Pragma_Elaborate_Body
   --    Has_Pragma_Inline
   --    Has_Pragma_Inline_Always
   --    Has_Pragma_No_Inline
   --    Has_Pragma_Pure
   --    Has_Pragma_Pure_Function
   --    Has_Pragma_Thread_Local_Storage
   --    Has_Pragma_Unmodified
   --    Has_Pragma_Unreferenced
   --    Has_Pragma_Unused
   --    Has_Private_Declaration
   --    Has_Qualified_Name
   --    Has_Stream_Size_Clause
   --    Has_Unknown_Discriminants
   --    Has_Xref_Entry
   --    In_Private_Part
   --    Is_Ada_2005_Only
   --    Is_Ada_2012_Only
   --    Is_Ada_2022_Only
   --    Is_Bit_Packed_Array                  (base type only)
   --    Is_Aliased
   --    Is_Character_Type
   --    Is_Checked_Ghost_Entity
   --    Is_Child_Unit
   --    Is_Compilation_Unit
   --    Is_Descendant_Of_Address
   --    Is_Discrim_SO_Function
   --    Is_Discriminant_Check_Function
   --    Is_Dispatch_Table_Entity
   --    Is_Dispatch_Table_Wrapper
   --    Is_Dispatching_Operation
   --    Is_Entry_Formal
   --    Is_Exported
   --    Is_First_Subtype
   --    Is_Formal_Subprogram
   --    Is_Generic_Instance
   --    Is_Generic_Type
   --    Is_Hidden
   --    Is_Hidden_Open_Scope
   --    Is_Ignored_Ghost_Entity
   --    Is_Immediately_Visible
   --    Is_Implementation_Defined
   --    Is_Imported
   --    Is_Inlined
   --    Is_Internal
   --    Is_Itype
   --    Is_Known_Non_Null
   --    Is_Known_Null
   --    Is_Known_Valid
   --    Is_Limited_Composite
   --    Is_Limited_Record
   --    Is_Loop_Parameter
   --    Is_Obsolescent
   --    Is_Package_Body_Entity
   --    Is_Packed_Array_Impl_Type
   --    Is_Not_Self_Hidden
   --    Is_Potentially_Use_Visible
   --    Is_Preelaborated
   --    Is_Primitive_Wrapper
   --    Is_Public
   --    Is_Pure
   --    Is_Remote_Call_Interface
   --    Is_Remote_Types
   --    Is_Renaming_Of_Object
   --    Is_Shared_Passive
   --    Is_Statically_Allocated
   --    Is_Static_Type
   --    Is_Tagged_Type
   --    Is_Thunk
   --    Is_Trivial_Subprogram
   --    Is_Unchecked_Union
   --    Is_Unimplemented
   --    Is_Visible_Formal
   --    Kill_Elaboration_Checks
   --    Kill_Range_Checks
   --    Low_Bound_Tested
   --    Materialize_Entity
   --    Needs_Debug_Info
   --    Never_Set_In_Source
   --    No_Return
   --    Overlays_Constant
   --    Referenced
   --    Referenced_As_LHS
   --    Referenced_As_Out_Parameter
   --    Suppress_Elaboration_Warnings
   --    Suppress_Style_Checks
   --    Suppress_Value_Tracking_On_Call
   --    Used_As_Generic_Actual
   --    Warnings_Off
   --    Warnings_Off_Used
   --    Warnings_Off_Used_Unmodified
   --    Warnings_Off_Used_Unreferenced
   --    Was_Hidden

   --    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
   --    Class_Wide_Type
   --    Full_View
   --    Esize
   --    RM_Size
   --    Alignment
   --    Pending_Access_Types
   --    Related_Expression
   --    Current_Use_Clause
   --    Subprograms_For_Type
   --    Derived_Type_Link
   --    No_Tagged_Streams_Pragma
   --    Linker_Section_Pragma
   --    SPARK_Pragma

   --    Depends_On_Private
   --    Disable_Controlled
   --    Discard_Names
   --    Finalize_Storage_Only                (base type only)
   --    From_Limited_With
   --    Has_Aliased_Components               (base type only)
   --    Has_Alignment_Clause
   --    Has_Atomic_Components                (base type only)
   --    Has_Completion_In_Body
   --    Has_Complex_Representation           (base type only)
   --    Has_Constrained_Partial_View
   --    Has_Controlled_Component             (base type only)
   --    Has_Default_Aspect                   (base type only)
   --    Has_Delayed_Rep_Aspects
   --    Has_Discriminants
   --    Has_Dynamic_Predicate_Aspect
   --    Has_Ghost_Predicate_Aspect
   --    Has_Independent_Components           (base type only)
   --    Has_Inheritable_Invariants           (base type only)
   --    Has_Inherited_DIC                    (base type only)
   --    Has_Inherited_Invariants             (base type only)
   --    Has_Non_Standard_Rep                 (base type only)
   --    Has_Object_Size_Clause
   --    Has_Own_DIC                          (base type only)
   --    Has_Own_Invariants                   (base type only)
   --    Has_Pragma_Preelab_Init
   --    Has_Pragma_Unreferenced_Objects
   --    Has_Predicates
   --    Has_Primitive_Operations             (base type only)
   --    Has_Protected                        (base type only)
   --    Has_Size_Clause
   --    Has_Specified_Layout                 (base type only)
   --    Has_Specified_Stream_Input
   --    Has_Specified_Stream_Output
   --    Has_Specified_Stream_Read
   --    Has_Specified_Stream_Write
   --    Has_Static_Predicate
   --    Has_Static_Predicate_Aspect
   --    Has_Task                             (base type only)
   --    Has_Timing_Event                     (base type only)
   --    Has_Unchecked_Union                  (base type only)
   --    Has_Volatile_Components              (base type only)
   --    In_Use
   --    Is_Abstract_Type
   --    Is_Asynchronous
   --    Is_Atomic
   --    Is_Constr_Subt_For_U_Nominal
   --    Is_Constr_Subt_For_UN_Aliased
   --    Is_Controlled_Active                 (base type only)
   --    Is_Eliminated
   --    Is_Frozen
   --    Is_Generic_Actual_Type
   --    Is_Independent
   --    Is_Non_Static_Subtype
   --    Is_Packed                            (base type only)
   --    Is_Private_Composite
   --    Is_RACW_Stub_Type
   --    Is_Unsigned_Type
   --    Is_Volatile
   --    Is_Volatile_Full_Access
   --    Itype_Printed                        (itypes only)
   --    Known_To_Have_Preelab_Init
   --    May_Inherit_Delayed_Rep_Aspects
   --    Must_Be_On_Byte_Boundary
   --    Must_Have_Preelab_Init
   --    Optimize_Alignment_Space
   --    Optimize_Alignment_Time
   --    Partial_View_Has_Unknown_Discr
   --    Size_Depends_On_Discriminant
   --    Size_Known_At_Compile_Time
   --    SPARK_Pragma_Inherited
   --    Strict_Alignment                     (base type only)
   --    Suppress_Initialization
   --    Treat_As_Volatile
   --    Universal_Aliasing                   (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_Full_Access                      (synth)
   --    Is_Controlled                       (synth)
   --    Object_Size_Clause                  (synth)
   --    Partial_DIC_Procedure               (synth)
   --    Partial_Invariant_Procedure         (synth)
   --    Predicate_Function                  (synth)
   --    Root_Type                           (synth)
   --    Size_Clause                         (synth)

   ------------------------------------------
   -- Applicable attributes by entity kind --
   ------------------------------------------

   --  In the conversion to variable-sized nodes and entities, a number of
   --  discrepancies were noticed. They are documented in comments, and marked
   --  with "$$$".

   --  E_Abstract_State
   --    Refinement_Constituents
   --    Part_Of_Constituents
   --    Body_References
   --    Non_Limited_View
   --    Encapsulating_State
   --    SPARK_Pragma
   --    From_Limited_With
   --    Has_Partial_Visible_Refinement
   --    Has_Visible_Refinement
   --    SPARK_Pragma_Inherited
   --    First_Entity $$$
   --    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_Relaxed_Initialization_State     (synth)
   --    Is_Synchronized_State               (synth)
   --    Partial_Refinement_Constituents     (synth)

   --  E_Access_Protected_Subprogram_Type
   --    Equivalent_Type
   --    Directly_Designated_Type
   --    Needs_No_Actuals
   --    Can_Use_Internal_Rep
   --    (plus type attributes)

   --  E_Access_Subprogram_Type
   --    Equivalent_Type                       (remote types only)
   --    Directly_Designated_Type
   --    Needs_No_Actuals
   --    Original_Access_Type
   --    Can_Use_Internal_Rep
   --    Needs_Activation_Record
   --    Associated_Storage_Pool $$$
   --    Interface_Name $$$
   --    (plus type attributes)

   --  E_Access_Type
   --  E_Access_Subtype
   --    Direct_Primitive_Operations $$$ type
   --    Master_Id
   --    Directly_Designated_Type
   --    Associated_Storage_Pool               (base type only)
   --    Finalization_Master                   (base type only)
   --    Storage_Size_Variable                 (base type only)
   --    Has_Pragma_Controlled                 (base type only)
   --    Has_Storage_Size_Clause               (base type only)
   --    Is_Access_Constant
   --    Is_Local_Anonymous_Access
   --    Is_Pure_Unit_Access_Type
   --    No_Pool_Assigned                     (base type only)
   --    No_Strict_Aliasing                   (base type only)
   --    Is_Param_Block_Component_Type        (base type only)
   --    (plus type attributes)

   --  E_Access_Attribute_Type
   --    Renamed_Entity $$$
   --    Directly_Designated_Type
   --    (plus type attributes)

   --  E_Allocator_Type
   --    Directly_Designated_Type
   --    Associated_Storage_Pool $$$
   --    (plus type attributes)

   --  E_Anonymous_Access_Subprogram_Type
   --  E_Anonymous_Access_Protected_Subprogram_Type
   --    Interface_Name $$$ E_Anonymous_Access_Subprogram_Type
   --    Directly_Designated_Type
   --    Storage_Size_Variable                 is this needed ???
   --    Can_Use_Internal_Rep
   --    Needs_Activation_Record
   --    (plus type attributes)

   --  E_Anonymous_Access_Type
   --    Directly_Designated_Type
   --    Finalization_Master
   --    Storage_Size_Variable                 is this needed ???
   --    Associated_Storage_Pool $$$
   --    (plus type attributes)

   --  E_Array_Type
   --  E_Array_Subtype
   --    First_Entity $$$
   --    Direct_Primitive_Operations $$$ subtype
   --    Renamed_Object $$$ E_Array_Subtype
   --    First_Index
   --    Default_Aspect_Component_Value        (base type only)
   --    Component_Type                        (base type only)
   --    Original_Array_Type
   --    Component_Size                        (base type only)
   --    Packed_Array_Impl_Type
   --    Related_Array_Object
   --    Predicated_Parent                     (subtype only)
   --    Component_Alignment                   (special)  (base type only)
   --    Has_Component_Size_Clause             (base type only)
   --    Has_Pragma_Pack                       (impl base type only)
   --    Is_Constrained
   --    Reverse_Storage_Order                 (base type only)
   --    SSO_Set_High_By_Default               (base type only)
   --    SSO_Set_Low_By_Default                (base type only)
   --    Next_Index                            (synth)
   --    Number_Dimensions                     (synth)
   --    (plus type attributes)

   --  E_Block
   --    Renamed_Entity $$$
   --    Renamed_Object $$$
   --    Return_Applies_To
   --    Block_Node
   --    First_Entity
   --    Last_Entity
   --    Scope_Depth_Value
   --    Entry_Cancel_Parameter
   --    Contains_Ignored_Ghost_Code
   --    Delay_Cleanups
   --    Discard_Names
   --    Has_Master_Entity
   --    Has_Nested_Block_With_Handler
   --    Is_Exception_Handler
   --    Sec_Stack_Needed_For_Return
   --    Uses_Sec_Stack
   --    Scope_Depth                         (synth)

   --  E_Class_Wide_Type
   --  E_Class_Wide_Subtype
   --    Direct_Primitive_Operations
   --    Cloned_Subtype                        (subtype case only)
   --    First_Entity
   --    Equivalent_Type                       (always Empty for type)
   --    Non_Limited_View
   --    Last_Entity
   --    SSO_Set_High_By_Default               (base type only)
   --    SSO_Set_Low_By_Default                (base type only)
   --    Corresponding_Remote_Type $$$ type
   --    Renamed_Entity $$$ type
   --    First_Component                       (synth)
   --    First_Component_Or_Discriminant       (synth)
   --    Has_Non_Limited_View                  (synth)
   --    (plus type attributes)

   --  E_Component
   --    Linker_Section_Pragma $$$
   --    Normalized_First_Bit
   --    Current_Value                         (always Empty)
   --    Component_Bit_Offset
   --    Esize
   --    Component_Clause
   --    Normalized_Position
   --    DT_Entry_Count
   --    Entry_Formal
   --    Prival
   --    Renamed_Object                        (always Empty)
   --    Discriminant_Checking_Func
   --    Corresponding_Record_Component
   --    Original_Record_Component
   --    DT_Offset_To_Top_Func
   --    Related_Type
   --    Has_Biased_Representation
   --    Has_Per_Object_Constraint
   --    Is_Atomic
   --    Is_Independent
   --    Is_Return_Object
   --    Is_Tag
   --    Is_Volatile
   --    Is_Volatile_Full_Access
   --    Treat_As_Volatile
   --    Is_Full_Access                      (synth)
   --    Next_Component                      (synth)
   --    Next_Component_Or_Discriminant      (synth)

   --  E_Constant
   --  E_Loop_Parameter
   --    Current_Value                         (always Empty)
   --    Discriminal_Link
   --    Full_View
   --    Esize
   --    Extra_Accessibility                   (constants only)
   --    Alignment
   --    Status_Flag_Or_Transient_Decl
   --    Actual_Subtype
   --    Renamed_Object
   --    Renamed_Entity $$$
   --    Size_Check_Code                       (constants only)
   --    Prival_Link                           (privals only)
   --    Interface_Name                        (constants only)
   --    Related_Type                          (constants only)
   --    Initialization_Statements
   --    BIP_Initialization_Call
   --    Last_Aggregate_Assignment
   --    Activation_Record_Component
   --    Encapsulating_State                   (constants only)
   --    Linker_Section_Pragma
   --    Contract                              (constants only)
   --    SPARK_Pragma                          (constants only)
   --    Has_Alignment_Clause
   --    Has_Atomic_Components
   --    Has_Biased_Representation
   --    Has_Completion                        (constants only)
   --    Has_Independent_Components
   --    Has_Size_Clause
   --    Has_Thunks                            (constants only)
   --    Has_Volatile_Components
   --    Is_Atomic
   --    Is_Elaboration_Checks_OK_Id           (constants only)
   --    Is_Elaboration_Warnings_OK_Id         (constants only)
   --    Is_Eliminated
   --    Is_Finalized_Transient
   --    Is_Ignored_Transient
   --    Is_Independent
   --    Is_Return_Object
   --    Is_True_Constant
   --    Is_Uplevel_Referenced_Entity
   --    Is_Volatile
   --    Is_Volatile_Full_Access
   --    Optimize_Alignment_Space              (constants only)
   --    Optimize_Alignment_Time               (constants only)
   --    SPARK_Pragma_Inherited                (constants only)
   --    Stores_Attribute_Old_Prefix           (constants only)
   --    Treat_As_Volatile
   --    Address_Clause                        (synth)
   --    Alignment_Clause                      (synth)
   --    Is_Elaboration_Target                 (synth)
   --    Is_Full_Access                        (synth)
   --    Size_Clause                           (synth)

   --  E_Decimal_Fixed_Point_Type
   --  E_Decimal_Fixed_Point_Subtype
   --    Scale_Value
   --    Digits_Value
   --    Scalar_Range
   --    Delta_Value
   --    Small_Value
   --    Static_Real_Or_String_Predicate
   --    Has_Machine_Radix_Clause
   --    Machine_Radix_10
   --    Aft_Value                           (synth)
   --    Type_Low_Bound                      (synth)
   --    Type_High_Bound                     (synth)
   --    (plus type attributes)

   --  E_Discriminant
   --    Normalized_First_Bit
   --    Current_Value                         (always Empty)
   --    Component_Bit_Offset
   --    Esize
   --    Component_Clause
   --    Normalized_Position
   --    Discriminant_Number
   --    Discriminal
   --    Renamed_Object                        (always Empty)
   --    Corresponding_Discriminant
   --    Discriminant_Default_Value
   --    Corresponding_Record_Component
   --    Original_Record_Component
   --    CR_Discriminant
   --    Is_Completely_Hidden
   --    Is_Return_Object
   --    Entry_Formal $$$
   --    Linker_Section_Pragma $$$
   --    Next_Component_Or_Discriminant      (synth)
   --    Next_Discriminant                   (synth)
   --    Next_Stored_Discriminant            (synth)

   --  E_Entry
   --  E_Entry_Family
   --    Protected_Body_Subprogram
   --    Barrier_Function
   --    Elaboration_Entity
   --    Entry_Parameters_Type
   --    First_Entity
   --    Alias                                (for entry only. Empty)
   --    Last_Entity
   --    Accept_Address
   --    Scope_Depth_Value
   --    Protection_Object                    (protected kind)
   --    Contract_Wrapper
   --    Extra_Formals
   --    Contract
   --    SPARK_Pragma                         (protected kind)
   --    Default_Expressions_Processed
   --    Entry_Accepted
   --    Has_Yield_Aspect
   --    Has_Expanded_Contract
   --    Ignore_SPARK_Mode_Pragmas
   --    Is_Elaboration_Checks_OK_Id
   --    Is_Elaboration_Warnings_OK_Id
   --    Is_Entry_Wrapper
   --    Needs_No_Actuals
   --    Sec_Stack_Needed_For_Return
   --    SPARK_Pragma_Inherited               (protected kind)
   --    Uses_Sec_Stack
   --    Renamed_Entity $$$
   --    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

   --  E_Enumeration_Literal
   --    Enumeration_Pos
   --    Enumeration_Rep
   --    Alias
   --    Enumeration_Rep_Expr
   --    Interface_Name $$$
   --    Renamed_Object $$$
   --    Esize $$$
   --    Renamed_Entity $$$
   --    Next_Literal                         (synth)

   --  E_Enumeration_Type
   --  E_Enumeration_Subtype
   --    First_Entity $$$ type
   --    Renamed_Object $$$
   --    Lit_Strings                          (root type only)
   --    First_Literal
   --    Lit_Indexes                          (root type only)
   --    Default_Aspect_Value                 (base type only)
   --    Scalar_Range
   --    Lit_Hash                             (root type only)
   --    Enum_Pos_To_Rep                      (type only)
   --    Static_Discrete_Predicate
   --    Has_Biased_Representation
   --    Has_Contiguous_Rep
   --    Has_Enumeration_Rep_Clause
   --    Has_Pragma_Ordered                   (base type only)
   --    Nonzero_Is_True                      (base type only)
   --    No_Predicate_On_Actual
   --    No_Dynamic_Predicate_On_Actual
   --    Type_Low_Bound                       (synth)
   --    Type_High_Bound                      (synth)
   --    (plus type attributes)

   --  E_Exception
   --    Esize
   --    Alignment
   --    Renamed_Entity
   --    Register_Exception_Call
   --    Interface_Name
   --    Activation_Record_Component
   --    Discard_Names
   --    Is_Raised
   --    Renamed_Object $$$

   --  E_Exception_Type
   --    Equivalent_Type
   --    (plus type attributes)

   --  E_Floating_Point_Type
   --  E_Floating_Point_Subtype
   --    Digits_Value
   --    Float_Rep                            (Float_Rep_Kind)
   --    Default_Aspect_Value                 (base type only)
   --    Scalar_Range
   --    Static_Real_Or_String_Predicate
   --    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                            (Mechanism_Type)
   --    Handler_Records                      (non-generic case only)
   --    Protected_Body_Subprogram
   --    Next_Inlined_Subprogram
   --    Elaboration_Entity                   (not implicit /=)
   --    DT_Position
   --    DTC_Entity
   --    First_Entity
   --    Alias                                (non-generic case only)
   --    Renamed_Entity
   --    Renamed_Object $$$
   --    Extra_Accessibility_Of_Result        (non-generic case only)
   --    Last_Entity
   --    Interface_Name
   --    Scope_Depth_Value
   --    Generic_Renamings                    (for an instance)
   --    Inner_Instances                      (generic case only)
   --    Inner_Instances $$$ also E_Function
   --    Protection_Object                    (for concurrent kind)
   --    Subps_Index                          (non-generic case only)
   --    Interface_Alias
   --    LSP_Subprogram                       (non-generic case only)
   --    Overridden_Operation
   --    Wrapped_Entity                       (non-generic case only)
   --    Extra_Formals
   --    Anonymous_Masters                    (non-generic case only)
   --    Corresponding_Equality               (implicit /= only)
   --    Thunk_Entity                         (thunk case only)
   --    Corresponding_Procedure              (generate C code only)
   --    Linker_Section_Pragma
   --    Contract
   --    Import_Pragma                        (non-generic case only)
   --    Class_Postconditions
   --    Class_Preconditions
   --    Class_Preconditions_Subprogram
   --    Dynamic_Call_Helper
   --    Ignored_Class_Preconditions
   --    Ignored_Class_Postconditions
   --    Indirect_Call_Wrapper
   --    Static_Call_Helper
   --    Protected_Subprogram                 (non-generic case only)
   --    SPARK_Pragma
   --    Original_Protected_Subprogram
   --    Body_Needed_For_SAL
   --    Contains_Ignored_Ghost_Code
   --    Default_Expressions_Processed
   --    Delay_Cleanups
   --    Discard_Names
   --    Elaboration_Entity_Required
   --    Has_Completion
   --    Has_Controlling_Result
   --    Has_Expanded_Contract                (non-generic case only)
   --    Has_Master_Entity
   --    Has_Missing_Return
   --    Has_Nested_Block_With_Handler
   --    Has_Nested_Subprogram
   --    Has_Out_Or_In_Out_Parameter
   --    Has_Recursive_Call
   --    Has_Yield_Aspect
   --    Ignore_SPARK_Mode_Pragmas
   --    Is_Abstract_Subprogram               (non-generic case only)
   --    Is_Called                            (non-generic case only)
   --    Is_Class_Wide_Wrapper
   --    Is_Constructor
   --    Is_CUDA_Kernel                       (non-generic case only)
   --    Is_DIC_Procedure                     (non-generic case only)
   --    Is_Discrim_SO_Function
   --    Is_Discriminant_Check_Function
   --    Is_Elaboration_Checks_OK_Id
   --    Is_Elaboration_Warnings_OK_Id
   --    Is_Eliminated
   --    Is_Generic_Actual_Subprogram         (non-generic case only)
   --    Is_Hidden_Non_Overridden_Subpgm      (non-generic case only)
   --    Is_Initial_Condition_Procedure       (non-generic case only)
   --    Is_Inlined_Always                    (non-generic case only)
   --    Is_Instantiated                      (generic case only)
   --    Is_Intrinsic_Subprogram
   --    Is_Invariant_Procedure               (non-generic case only)
   --    Is_Machine_Code_Subprogram           (non-generic case only)
   --    Is_Partial_Invariant_Procedure       (non-generic case only)
   --    Is_Predicate_Function                (non-generic case only)
   --    Is_Primitive
   --    Is_Primitive_Wrapper                 (non-generic case only)
   --    Is_Private_Descendant
   --    Is_Private_Primitive                 (non-generic case only)
   --    Is_Pure
   --    Is_Visible_Lib_Unit
   --    Is_Wrapper
   --    Needs_No_Actuals
   --    Requires_Overriding                  (non-generic case only)
   --    Return_Present
   --    Returns_By_Ref
   --    Rewritten_For_C                      (generate C code only)
   --    Sec_Stack_Needed_For_Return
   --    SPARK_Pragma_Inherited
   --    Uses_Sec_Stack
   --    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
   --    First_Entity $$$
   --    Renamed_Entity $$$
   --    Master_Id
   --    Directly_Designated_Type
   --    Associated_Storage_Pool              (root type only)
   --    Finalization_Master                  (root type only)
   --    Storage_Size_Variable                (base type only)
   --    (plus type attributes)

   --  E_Generic_In_Parameter
   --  E_Generic_In_Out_Parameter
   --    Current_Value                        (always Empty)
   --    Entry_Component
   --    Actual_Subtype
   --    Renamed_Object                       (always Empty)
   --    Default_Value
   --    Protected_Formal
   --    Is_Controlling_Formal
   --    Is_Return_Object
   --    Parameter_Mode                       (synth)

   --  E_Incomplete_Type
   --  E_Incomplete_Subtype
   --    Direct_Primitive_Operations
   --    Non_Limited_View
   --    Private_Dependents
   --    Discriminant_Constraint
   --    Stored_Constraint
   --    First_Entity $$$
   --    Last_Entity $$$
   --    Has_Non_Limited_View                 (synth)
   --    (plus type attributes)

   --  E_In_Parameter
   --  E_In_Out_Parameter
   --  E_Out_Parameter
   --    Linker_Section_Pragma $$$
   --    Mechanism                            (Mechanism_Type)
   --    Current_Value
   --    Discriminal_Link                     (discriminals only)
   --    Entry_Component
   --    Esize
   --    Extra_Accessibility
   --    Alignment
   --    Extra_Formal
   --    Unset_Reference
   --    Actual_Subtype
   --    Renamed_Object
   --    Spec_Entity
   --    Default_Value
   --    Default_Expr_Function
   --    Protected_Formal
   --    Extra_Constrained
   --    Minimum_Accessibility
   --    Last_Assignment                      (OUT, IN-OUT only)
   --    Activation_Record_Component
   --    Has_Initial_Value
   --    Is_Controlling_Formal
   --    Is_Only_Out_Parameter
   --    Low_Bound_Tested
   --    Is_Return_Object
   --    Is_Activation_Record
   --    Parameter_Mode                       (synth)

   --  E_Label
   --    Renamed_Object $$$
   --    Renamed_Entity $$$
   --    Entry_Cancel_Parameter
   --    Enclosing_Scope
   --    Reachable

   --  E_Limited_Private_Type
   --  E_Limited_Private_Subtype
   --    Scalar_Range $$$ type
   --    First_Entity
   --    Private_Dependents
   --    Underlying_Full_View
   --    Last_Entity
   --    Discriminant_Constraint
   --    Stored_Constraint
   --    Has_Completion
   --    (plus type attributes)

   --  E_Loop
   --    First_Exit_Statement
   --    Has_Exit
   --    Has_Loop_Entry_Attributes
   --    Has_Master_Entity
   --    Has_Nested_Block_With_Handler
   --    Uses_Sec_Stack
   --    First_Entity $$$
   --    Last_Entity $$$
   --    Renamed_Object $$$

   --  E_Modular_Integer_Type
   --  E_Modular_Integer_Subtype
   --    Modulus                              (base type only)
   --    Default_Aspect_Value                 (base type only)
   --    Original_Array_Type
   --    Scalar_Range
   --    Static_Discrete_Predicate
   --    Non_Binary_Modulus                   (base type only)
   --    Has_Biased_Representation
   --    Has_Shift_Operator                   (base type only)
   --    No_Predicate_On_Actual
   --    No_Dynamic_Predicate_On_Actual
   --    Type_Low_Bound                       (synth)
   --    Type_High_Bound                      (synth)
   --    (plus type attributes)

   --  E_Named_Integer
   --    Renamed_Object $$$

   --  E_Named_Real

   --  E_Operator
   --    First_Entity
   --    Alias
   --    Extra_Accessibility_Of_Result
   --    Last_Entity
   --    Subps_Index
   --    Overridden_Operation
   --    Linker_Section_Pragma
   --    Contract
   --    Import_Pragma
   --    LSP_Subprogram
   --    SPARK_Pragma
   --    Default_Expressions_Processed
   --    Has_Nested_Subprogram
   --    Ignore_SPARK_Mode_Pragmas
   --    Is_Class_Wide_Wrapper
   --    Is_Elaboration_Checks_OK_Id
   --    Is_Elaboration_Warnings_OK_Id
   --    Is_Intrinsic_Subprogram
   --    Is_Machine_Code_Subprogram
   --    Is_Primitive
   --    Is_Pure
   --    Is_Wrapper
   --    SPARK_Pragma_Inherited
   --    Interface_Name $$$
   --    Renamed_Entity $$$
   --    Renamed_Object $$$
   --    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
   --    Default_Aspect_Value                 (base type only)
   --    Scalar_Range
   --    Static_Real_Or_String_Predicate
   --    Small_Value
   --    Has_Small_Clause
   --    Aft_Value                            (synth)
   --    Type_Low_Bound                       (synth)
   --    Type_High_Bound                      (synth)
   --    (plus type attributes)

   --  E_Package
   --  E_Generic_Package
   --    Dependent_Instances                  (for an instance)
   --    Handler_Records                      (non-generic case only)
   --    Generic_Homonym                      (generic case only)
   --    Associated_Formal_Package
   --    Elaboration_Entity
   --    Related_Instance                     (non-generic case only)
   --    First_Private_Entity
   --    First_Entity
   --    Renamed_Entity
   --    Renamed_Object $$$
   --    Body_Entity
   --    Last_Entity
   --    Interface_Name
   --    Scope_Depth_Value
   --    Generic_Renamings                    (for an instance)
   --    Inner_Instances                      (generic case only)
   --    Inner_Instances $$$ also E_Package
   --    Limited_View                         (non-generic/instance)
   --    Incomplete_Actuals                   (for an instance)
   --    Abstract_States
   --    Package_Instantiation
   --    Current_Use_Clause
   --    Finalizer                            (non-generic case only)
   --    Anonymous_Masters                    (non-generic case only)
   --    Contract
   --    SPARK_Pragma
   --    SPARK_Aux_Pragma
   --    Body_Needed_For_Inlining
   --    Body_Needed_For_SAL
   --    Contains_Ignored_Ghost_Code
   --    Discard_Names
   --    Elaborate_Body_Desirable             (non-generic case only)
   --    Elaboration_Entity_Required
   --    From_Limited_With
   --    Has_All_Calls_Remote
   --    Has_Completion
   --    Has_Forward_Instantiation
   --    Has_Master_Entity
   --    Has_RACW                             (non-generic case only)
   --    Ignore_SPARK_Mode_Pragmas
   --    Is_Called                            (non-generic case only)
   --    Is_Elaboration_Checks_OK_Id
   --    Is_Elaboration_Warnings_OK_Id
   --    Is_Instantiated
   --    In_Package_Body
   --    Is_Private_Descendant
   --    In_Use
   --    Is_Visible_Lib_Unit
   --    Renamed_In_Spec                      (non-generic case only)
   --    SPARK_Aux_Pragma_Inherited
   --    SPARK_Pragma_Inherited
   --    Static_Elaboration_Desired           (non-generic case only)
   --    Renamed_Object $$$
   --    Has_Non_Null_Abstract_State          (synth)
   --    Has_Null_Abstract_State              (synth)
   --    Is_Elaboration_Target                (synth)
   --    Is_Wrapper_Package                   (synth) (non-generic case only)
   --    Has_Limited_View                     (synth) (non-generic case only)
   --    Scope_Depth                          (synth)

   --  E_Package_Body
   --    Handler_Records                      (non-generic case only)
   --    Related_Instance                     (non-generic case only)
   --    First_Entity
   --    Spec_Entity
   --    Last_Entity
   --    Scope_Depth_Value
   --    Finalizer                            (non-generic case only)
   --    Contract
   --    SPARK_Pragma
   --    SPARK_Aux_Pragma
   --    Contains_Ignored_Ghost_Code
   --    Ignore_SPARK_Mode_Pragmas
   --    SPARK_Aux_Pragma_Inherited
   --    SPARK_Pragma_Inherited
   --    Renamed_Entity $$$
   --    Scope_Depth                          (synth)

   --  E_Private_Type
   --  E_Private_Subtype
   --    Scalar_Range $$$ type
   --    Direct_Primitive_Operations
   --    First_Entity
   --    Private_Dependents
   --    Underlying_Full_View
   --    Last_Entity
   --    Discriminant_Constraint
   --    Stored_Constraint
   --    Has_Completion
   --    Is_Controlled_Active                 (base type only)
   --  $$$above in                            (plus type attributes)
   --    (plus type attributes)

   --  E_Procedure
   --  E_Generic_Procedure
   --    Associated_Node_For_Itype $$$ E_Procedure
   --    Handler_Records                      (non-generic case only)
   --    Protected_Body_Subprogram
   --    Next_Inlined_Subprogram
   --    Elaboration_Entity
   --    DT_Position
   --    DTC_Entity
   --    First_Entity
   --    Alias                                (non-generic case only)
   --    Renamed_Entity
   --    Renamed_Object $$$
   --    Receiving_Entry                      (non-generic case only)
   --    Last_Entity
   --    Interface_Name
   --    Scope_Depth_Value
   --    Generic_Renamings                    (for an instance)
   --    Inner_Instances                      (generic case only)
   --    Inner_Instances $$$ also E_Procedure
   --    Protection_Object                    (for concurrent kind)
   --    Subps_Index                          (non-generic case only)
   --    Interface_Alias
   --    LSP_Subprogram                       (non-generic case only)
   --    Overridden_Operation                 (never for init proc)
   --    Wrapped_Entity                       (non-generic case only)
   --    Extra_Formals
   --    Anonymous_Masters                    (non-generic case only)
   --    Static_Initialization                (init_proc only)
   --    Thunk_Entity                         (thunk case only)
   --    Corresponding_Function               (generate C code only)
   --    Linker_Section_Pragma
   --    Contract
   --    Import_Pragma                        (non-generic case only)
   --    Class_Postconditions
   --    Class_Preconditions
   --    Class_Preconditions_Subprogram
   --    Dynamic_Call_Helper
   --    Ignored_Class_Preconditions
   --    Ignored_Class_Postconditions
   --    Indirect_Call_Wrapper
   --    Static_Call_Helper
   --    Protected_Subprogram                 (non-generic case only)
   --    SPARK_Pragma
   --    Original_Protected_Subprogram
   --    Body_Needed_For_SAL
   --    Contains_Ignored_Ghost_Code
   --    Delay_Cleanups                      $$$Dup below
   --    Discard_Names                       $$$Dup below
   --    Elaboration_Entity_Required
   --    Default_Expressions_Processed
   --    Delay_Cleanups
   --    Discard_Names
   --    Has_Completion
   --    Has_Expanded_Contract                (non-generic case only)
   --    Has_Master_Entity
   --    Has_Nested_Block_With_Handler
   --    Has_Nested_Subprogram
   --    Has_Yield_Aspect
   --    Ignore_SPARK_Mode_Pragmas
   --    Is_Abstract_Subprogram               (non-generic case only)
   --    Is_Asynchronous
   --    Is_Called                            (non-generic case only)
   --    Is_Class_Wide_Wrapper
   --    Is_Constructor
   --    Is_CUDA_Kernel
   --    Is_DIC_Procedure                     (non-generic case only)
   --    Is_Elaboration_Checks_OK_Id
   --    Is_Elaboration_Warnings_OK_Id
   --    Is_Eliminated
   --    Is_Generic_Actual_Subprogram         (non-generic case only)
   --    Is_Hidden_Non_Overridden_Subpgm      (non-generic case only)
   --    Is_Initial_Condition_Procedure       (non-generic case only)
   --    Is_Inlined_Always                    (non-generic case only)
   --    Is_Instantiated                      (generic case only)
   --    Is_Interrupt_Handler
   --    Is_Intrinsic_Subprogram
   --    Is_Invariant_Procedure               (non-generic case only)
   --    Is_Machine_Code_Subprogram           (non-generic case only)
   --    Is_Null_Init_Proc
   --    Is_Partial_DIC_Procedure             (synth) (non-generic case only)
   --    Is_Partial_Invariant_Procedure       (non-generic case only)
   --    Is_Predicate_Function                (non-generic case only)
   --    Is_Primitive
   --    Is_Primitive_Wrapper                 (non-generic case only)
   --    Is_Private_Descendant
   --    Is_Private_Primitive                 (non-generic case only)
   --    Is_Pure
   --    Is_Wrapper
   --    Is_Valued_Procedure
   --    Is_Visible_Lib_Unit
   --    Needs_No_Actuals
   --    No_Return
   --    Requires_Overriding                  (non-generic case only)
   --    Sec_Stack_Needed_For_Return
   --    SPARK_Pragma_Inherited
   --    Entry_Parameters_Type $$$
   --    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
   --    Ignore_SPARK_Mode_Pragmas
   --    SPARK_Pragma_Inherited
   --    (any others??? First/Last Entity, Scope_Depth???)

   --  E_Protected_Object$$$No such thing

   --  E_Protected_Type
   --  E_Protected_Subtype
   --    Direct_Primitive_Operations
   --    First_Private_Entity
   --    First_Entity
   --    Corresponding_Record_Type
   --    Entry_Bodies_Array
   --    Last_Entity
   --    Discriminant_Constraint
   --    Scope_Depth_Value
   --    Stored_Constraint
   --    Anonymous_Object
   --    Contract
   --    Entry_Max_Queue_Lengths_Array
   --    SPARK_Aux_Pragma
   --    Ignore_SPARK_Mode_Pragmas
   --    SPARK_Aux_Pragma_Inherited
   --    Uses_Lock_Free
   --    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
   --    Renamed_Entity $$$ type
   --    Interface_Name $$$ type
   --    Direct_Primitive_Operations
   --    Access_Disp_Table                    (base type only)
   --    Cloned_Subtype                       (subtype case only)
   --    First_Entity
   --    Corresponding_Concurrent_Type
   --    Parent_Subtype                       (base type only)
   --    Last_Entity
   --    Discriminant_Constraint
   --    Corresponding_Remote_Type
   --    Stored_Constraint
   --    Interfaces
   --    Dispatch_Table_Wrappers              (base type only)
   --    Underlying_Record_View               (base type only)
   --    Access_Disp_Table_Elab_Flag          (base type only)
   --    Predicated_Parent                    (subtype only)
   --    Component_Alignment                  (special)  (base type only)
   --    C_Pass_By_Copy                       (base type only)
   --    Has_Dispatch_Table                   (base tagged type only)
   --    Has_Pragma_Pack                      (impl base type only)
   --    Has_Private_Ancestor
   --    Has_Private_Extension
   --    Has_Record_Rep_Clause                (base type only)
   --    Has_Static_Discriminants             (subtype only)
   --    Is_Class_Wide_Equivalent_Type
   --    Is_Concurrent_Record_Type
   --    Is_Constrained
   --    Is_Controlled_Active                 (base type only)
   --  $$$above in                            (plus type attributes)
   --    Is_Interface
   --    Is_Limited_Interface
   --    No_Reordering                        (base type only)
   --    Reverse_Bit_Order                    (base type only)
   --    Reverse_Storage_Order                (base type only)
   --    SSO_Set_High_By_Default              (base type only)
   --    SSO_Set_Low_By_Default               (base type only)
   --    First_Component                      (synth)
   --    First_Component_Or_Discriminant      (synth)
   --    (plus type attributes)

   --  E_Record_Type_With_Private
   --  E_Record_Subtype_With_Private
   --    Corresponding_Remote_Type $$$ E_Record_Subtype_With_Private
   --    Direct_Primitive_Operations
   --    First_Entity
   --    Private_Dependents
   --    Underlying_Full_View
   --    Last_Entity
   --    Discriminant_Constraint
   --    Stored_Constraint
   --    Interfaces
   --    Underlying_Record_View $$$           (base type only)
   --    Predicated_Parent                    (subtype only)
   --    Has_Completion
   --    Has_Private_Ancestor
   --    Has_Private_Extension
   --    Has_Record_Rep_Clause                (base type only)
   --    Is_Concurrent_Record_Type
   --    Is_Constrained
   --    Is_Controlled_Active                 (base type only)
   --  $$$above in                            (plus type attributes)
   --    Is_Interface
   --    Is_Limited_Interface
   --    No_Reordering                        (base type only)
   --    Reverse_Bit_Order                    (base type only)
   --    Reverse_Storage_Order                (base type only)
   --    SSO_Set_High_By_Default              (base type only)
   --    SSO_Set_Low_By_Default               (base type only)
   --    Corresponding_Remote_Type $$$ type
   --    First_Component                      (synth)
   --    First_Component_Or_Discriminant      (synth)
   --    (plus type attributes)

   --  E_Return_Statement
   --    Return_Applies_To
   --    First_Entity $$$
   --    Last_Entity $$$

   --  E_Signed_Integer_Type
   --  E_Signed_Integer_Subtype
   --    Renamed_Object $$$ subtype
   --    Interface_Name $$$ subtype
   --    Direct_Primitive_Operations $$$ type
   --    First_Entity $$$
   --    Default_Aspect_Value                 (base type only)
   --    Scalar_Range
   --    Static_Discrete_Predicate
   --    Has_Biased_Representation
   --    Has_Shift_Operator                   (base type only)
   --    No_Predicate_On_Actual
   --    No_Dynamic_Predicate_On_Actual
   --    Type_Low_Bound                       (synth)
   --    Type_High_Bound                      (synth)
   --    (plus type attributes)

   --  E_String_Literal_Subtype
   --    String_Literal_Length
   --    First_Index                          (always Empty)
   --    String_Literal_Low_Bound
   --    Packed_Array_Impl_Type
   --    (plus type attributes)

   --  E_Subprogram_Body
   --    Mechanism
   --    First_Entity
   --    Corresponding_Protected_Entry
   --    Last_Entity
   --    Scope_Depth_Value
   --    Extra_Formals
   --    Anonymous_Masters
   --    Contract
   --    SPARK_Pragma
   --    Contains_Ignored_Ghost_Code
   --    SPARK_Pragma_Inherited
   --    Interface_Name $$$
   --    Renamed_Entity $$$
   --    Scope_Depth                          (synth)

   --  E_Subprogram_Type
   --    Extra_Accessibility_Of_Result
   --    Directly_Designated_Type
   --    Extra_Formals
   --    Access_Subprogram_Wrapper
   --    First_Formal                         (synth)
   --    First_Formal_With_Extras             (synth)
   --    Last_Formal                          (synth)
   --    Number_Formals                       (synth)
   --    Returns_By_Ref
   --    First_Entity $$$
   --    Last_Entity $$$
   --    Interface_Name $$$
   --    (plus type attributes)

   --  E_Task_Body
   --    Contract
   --    SPARK_Pragma
   --    Ignore_SPARK_Mode_Pragmas
   --    SPARK_Pragma_Inherited
   --    First_Entity $$$
   --    (any others??? First/Last Entity, Scope_Depth???)

   --  E_Task_Type
   --  E_Task_Subtype
   --    Direct_Primitive_Operations
   --    First_Private_Entity
   --    First_Entity
   --    Corresponding_Record_Type
   --    Last_Entity
   --    Discriminant_Constraint
   --    Scope_Depth_Value
   --    Stored_Constraint
   --    Task_Body_Procedure
   --    Storage_Size_Variable                (base type only)
   --    Relative_Deadline_Variable           (base type only)
   --    Anonymous_Object
   --    Contract
   --    SPARK_Aux_Pragma
   --    Delay_Cleanups
   --    Has_Master_Entity
   --    Has_Storage_Size_Clause              (base type only)
   --    Ignore_SPARK_Mode_Pragmas
   --    Is_Elaboration_Checks_OK_Id
   --    Is_Elaboration_Warnings_OK_Id
   --    SPARK_Aux_Pragma_Inherited
   --    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
   --    Current_Value
   --    Part_Of_Constituents
   --    Part_Of_References
   --    Esize
   --    Extra_Accessibility
   --    Alignment
   --    Status_Flag_Or_Transient_Decl        (transient object only)
   --    Unset_Reference
   --    Actual_Subtype
   --    Renamed_Object
   --    Renamed_Entity $$$
   --    Discriminal_Link $$$
   --    Size_Check_Code
   --    Prival_Link
   --    Interface_Name
   --    Shared_Var_Procs_Instance
   --    Extra_Constrained
   --    Related_Expression
   --    Debug_Renaming_Link
   --    Last_Assignment
   --    Related_Type
   --    Initialization_Statements
   --    BIP_Initialization_Call
   --    Last_Aggregate_Assignment
   --    Activation_Record_Component
   --    Encapsulating_State
   --    Linker_Section_Pragma
   --    Contract
   --    Anonymous_Designated_Type
   --    Validated_Object
   --    SPARK_Pragma
   --    Has_Alignment_Clause
   --    Has_Atomic_Components
   --    Has_Biased_Representation
   --    Has_Independent_Components
   --    Has_Initial_Value
   --    Has_Size_Clause
   --    Has_Volatile_Components
   --    Is_Atomic
   --    Is_Elaboration_Checks_OK_Id
   --    Is_Elaboration_Warnings_OK_Id
   --    Is_Eliminated
   --    Is_Finalized_Transient
   --    Is_Ignored_Transient
   --    Is_Independent
   --    Is_Return_Object
   --    Is_Safe_To_Reevaluate
   --    Is_Shared_Passive
   --    Is_True_Constant
   --    Is_Uplevel_Referenced_Entity
   --    Is_Volatile
   --    Is_Volatile_Full_Access
   --    OK_To_Rename
   --    Optimize_Alignment_Space
   --    Optimize_Alignment_Time
   --    SPARK_Pragma_Inherited
   --    Suppress_Initialization
   --    Treat_As_Volatile
   --    Address_Clause                       (synth)
   --    Alignment_Clause                     (synth)
   --    Is_Elaboration_Target                (synth)
   --    Is_Full_Access                       (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.
   --
   --    The following are examples of getters and setters called with E_Void:
   --    Entry_Formal $$$
   --    Esize $$$
   --    First_Entity $$$
   --    Handler_Records $$$
   --    Interface_Name $$$
   --    Last_Entity $$$
   --    Renamed_Entity $$$
   --    Renamed_Object $$$
   --    Scalar_Range $$$
   --    Set_Associated_Node_For_Itype $$$
   --    Set_Debug_Renaming_Link $$$
   --    Set_Entry_Cancel_Parameter $$$
   --    Set_First_Entity $$$
   --    Set_Inner_Instances $$$
   --    Set_Last_Entity $$$
   --    Set_Scalar_Range $$$
   --    Set_Entry_Cancel_Parameter $$$

   ---------------
   -- 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.

end Einfo;
