OSDN Git Service

gcc/ada/
[pf3gnuchains/gcc-fork.git] / gcc / ada / sinfo.ads
index 8691ab6..ddf5c1f 100644 (file)
@@ -6,7 +6,7 @@
 --                                                                          --
 --                                 S p e c                                  --
 --                                                                          --
---          Copyright (C) 1992-2003, Free Software Foundation, Inc.         --
+--          Copyright (C) 1992-2008, 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- --
@@ -16,8 +16,8 @@
 -- 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 COPYING.  If not, write --
--- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
--- MA 02111-1307, USA.                                                      --
+-- to  the  Free Software Foundation,  51  Franklin  Street,  Fifth  Floor, --
+-- Boston, MA 02110-1301, USA.                                              --
 --                                                                          --
 -- As a special exception,  if other files  instantiate  generics from this --
 -- unit, or you link  this unit with other files  to produce an executable, --
 ------------------------------------------------------------------------------
 
 --  This package defines the structure of the abstract syntax tree. The Tree
---  package provides a basic tree structure. Sinfo describes how this
---  structure is used to represent the syntax of an Ada program.
+--  package provides a basic tree structure. Sinfo describes how this structure
+--  is used to represent the syntax of an Ada program.
 
---  Note: the grammar used here is taken from Version 5.95 of the RM, dated
---  November 1994. The grammar in the RM is followed very closely in the tree
+--  The grammar in the RM is followed very closely in the tree
 --  design, and is repeated as part of this source file.
 
 --  The tree contains not only the full syntactic representation of the
 --  program, but also the results of semantic analysis. In particular, the
 --  nodes for defining identifiers, defining character literals and defining
 --  operator symbols, collectively referred to as entities, represent what
---  would normally be regarded as the symbol table information. In addition
---  number of the tree nodes contain semantic information.
+--  would normally be regarded as the symbol table information. In addition a
+--  number of the tree nodes contain semantic information.
 
---  WARNING: There is a C version of this package. Any changes to this
---  source file must be properly reflected in this C header file sinfo.h
---  which is created automatically from sinfo.ads using xsinfo.spt.
+--  WARNING: Several files are automatically generated from this package.
+--  See below for details.
 
+with Namet;  use Namet;
 with Types;  use Types;
 with Uintp;  use Uintp;
 with Urealp; use Urealp;
@@ -61,8 +60,8 @@ package Sinfo is
    ---------------------------------
 
    --  If changes are made to this file, a number of related steps must be
-   --  carried out to ensure consistency. First, if a field access function
-   --  is added, it appears in seven places:
+   --  carried out to ensure consistency. First, if a field access function is
+   --  added, it appears in seven places:
 
    --    The documentation associated with the node
    --    The spec of the access function in sinfo.ads
@@ -72,12 +71,12 @@ package Sinfo is
    --    The body of the set procedure in sinfo.adb
    --    The pragma Inline at the end of sinfo.ads for the set procedure
 
-   --  The field chosen must be consistent in all places, and, for a node
-   --  that is a subexpression, must not overlap any of the standard
-   --  expression fields.
+   --  The field chosen must be consistent in all places, and, for a node that
+   --  is a subexpression, must not overlap any of the standard expression
+   --  fields.
 
    --  In addition, if any of the standard expression fields is changed, then
-   --  the utiliy program which creates the Treeprs spec (in file treeprs.ads)
+   --  the utility program which creates the Treeprs spec (in file treeprs.ads)
    --  must be updated appropriately, since it special cases expression fields.
 
    --  If a new tree node is added, then the following changes are made
@@ -90,61 +89,64 @@ package Sinfo is
    --     node in the checks.
    --    Add an appropriate section to the case statement in sprint.adb
    --    Add an appropriate section to the case statement in sem.adb
-   --    Add an appropraite section to the case statement in exp_util.adb
+   --    Add an appropriate section to the case statement in exp_util.adb
    --     (Insert_Actions procedure)
-   --    For a subexpression, add an appropriate sections to the case
+   --    For a subexpression, add an appropriate section to the case
    --     statement in sem_eval.adb
-   --    For a subexpression, add an appropriate sections to the case
+   --    For a subexpression, add an appropriate section to the case
    --     statement in sem_res.adb
 
    --  Finally, four utility programs must be run:
 
-   --    Run CSinfo to check that you have made the changes consistently.
-   --     It checks most of the rules given above, with clear error messages.
-   --     This utility reads sinfo.ads and sinfo.adb and generates a report
-   --     to standard output.
+   --    Run CSinfo to check that you have made the changes consistently. It
+   --     checks most of the rules given above, with clear error messages. This
+   --     utility reads sinfo.ads and sinfo.adb and generates a report to
+   --     standard output.
 
-   --    Run XSinfo to create a-sinfo.h, the corresponding C header. This
-   --     utility reads sinfo.ads and generates a-sinfo.h. Note that it
-   --     does not need to read sinfo.adb, since the contents of the body
-   --     are algorithmically determinable from the spec.
+   --    Run XSinfo to create sinfo.h, the corresponding C header. This
+   --     utility reads sinfo.ads and generates sinfo.h. Note that it does
+   --     not need to read sinfo.adb, since the contents of the body are
+   --     algorithmically determinable from the spec.
 
-   --    Run XTreeprs to create treeprs.ads, an updated version of
-   --     the module that is used to drive the tree print routine. This
-   --     utility reads (but does not modify) treeprs.adt, the template
-   --     that provides the basic structure of the file, and then fills
-   --     in the data from the comments in sinfo.ads.
+   --    Run XTreeprs to create treeprs.ads, an updated version of the module
+   --     that is used to drive the tree print routine. This utility reads (but
+   --     does not modify) treeprs.adt, the template that provides the basic
+   --     structure of the file, and then fills in the data from the comments
+   --     in sinfo.ads.
 
-   --    Run XNmake to create nmake.ads and nmake.adb, the package body
-   --     and spec of the Nmake package which contains functions for
-   --     constructing nodes.
+   --    Run XNmake to create nmake.ads and nmake.adb, the package body and
+   --     spec of the Nmake package which contains functions for constructing
+   --     nodes.
 
-   --  Note: sometime we could write a utility that actually generated the
-   --  body of sinfo from the spec instead of simply checking it, since, as
-   --  noted above, the contents of the body can be determined from the spec.
+   --  All of the above steps except CSinfo are done automatically by the
+   --  build scripts when you do a full bootstrap.
+
+   --  Note: sometime we could write a utility that actually generated the body
+   --  of sinfo from the spec instead of simply checking it, since, as noted
+   --  above, the contents of the body can be determined from the spec.
 
    --------------------------------
    -- Implicit Nodes in the Tree --
    --------------------------------
 
-   --  Generally the structure of the tree very closely follows the grammar
-   --  as defined in the RM. However, certain nodes are omitted to save
-   --  space and simplify semantic processing. Two general classes of such
-   --  omitted nodes are as follows:
+   --  Generally the structure of the tree very closely follows the grammar as
+   --  defined in the RM. However, certain nodes are omitted to save space and
+   --  simplify semantic processing. Two general classes of such omitted nodes
+   --  are as follows:
 
    --   If the only possibilities for a non-terminal are one or more other
-   --   non terminals (i.e. the rule is a "skinny" rule), then usually the
+   --   non-terminals (i.e. the rule is a "skinny" rule), then usually the
    --   corresponding node is omitted from the tree, and the target construct
-   --   appears directly. For example, a real type definition is either a
-   --   floating point definition or a fixed point definition. No explicit
-   --   node appears for real type definition. Instead either the floating
-   --   point definition or fixed point definition appears directly.
+   --   appears directly. For example, a real type definition is either
+   --   floating point definition or a fixed point definition. No explicit node
+   --   appears for real type definition. Instead either the floating point
+   --   definition or fixed point definition appears directly.
 
    --   If a non-terminal corresponds to a list of some other non-terminal
-   --   (possibly with separating punctuation), then usually it is omitted
-   --   from the tree, and a list of components appears instead. For
-   --   example, sequence of statements does not appear explicitly in the
-   --   tree. Instead a list of statements appears directly.
+   --   (possibly with separating punctuation), then usually it is omitted from
+   --   the tree, and a list of components appears instead. For example,
+   --   sequence of statements does not appear explicitly in the tree. Instead
+   --   a list of statements appears directly.
 
    --  Some additional cases of omitted nodes occur and are documented
    --  individually. In particular, many nodes are omitted in the tree
@@ -155,23 +157,22 @@ package Sinfo is
    -------------------------------------------
 
    --  In several declarative forms in the syntax, lists of defining
-   --  identifiers appear (object declarations, component declarations,
-   --  number declarations etc.)
+   --  identifiers appear (object declarations, component declarations, number
+   --  declarations etc.)
 
-   --  The semantics of such statements are equivalent to a series of
-   --  identical declarations of single defining identifiers (except that
-   --  conformance checks require the same grouping of identifiers in the
-   --  parameter case).
+   --  The semantics of such statements are equivalent to a series of identical
+   --  declarations of single defining identifiers (except that conformance
+   --  checks require the same grouping of identifiers in the parameter case).
 
    --  To simplify semantic processing, the parser breaks down such multiple
    --  declaration cases into sequences of single declarations, duplicating
-   --  type and initialization information as required. The flags More_Ids
-   --  and Prev_Ids are used to record the original form of the source in
-   --  the case where the original source used a list of names, More_Ids
-   --  being set on all but the last name and Prev_Ids being set on all
-   --  but the first name. These flags are used to reconstruct the original
-   --  source (e.g. in the Sprint package), and also are included in the
-   --  conformance checks, but otherwise have no semantic significance.
+   --  type and initialization information as required. The flags More_Ids and
+   --  Prev_Ids are used to record the original form of the source in the case
+   --  where the original source used a list of names, More_Ids being set on
+   --  all but the last name and Prev_Ids being set on all but the first name.
+   --  These flags are used to reconstruct the original source (e.g. in the
+   --  Sprint package), and also are included in the conformance checks, but
+   --  otherwise have no semantic significance.
 
    --  Note: the reason that we use More_Ids and Prev_Ids rather than
    --  First_Name and Last_Name flags is so that the flags are off in the
@@ -182,20 +183,20 @@ package Sinfo is
    -----------------------
 
    --  With a few exceptions, if a construction of the form {non-terminal}
-   --  appears in the tree, lists are used in the corresponding tree node
-   --  (see package Nlists for handling of node lists). In this case a field
-   --  of the parent node points to a list of nodes for the non-terminal. The
-   --  field name for such fields has a plural name which always ends in "s".
-   --  For example, a case statement has a field Alternatives pointing to a
-   --  list of case statement alternative nodes.
+   --  appears in the tree, lists are used in the corresponding tree node (see
+   --  package Nlists for handling of node lists). In this case a field of the
+   --  parent node points to a list of nodes for the non-terminal. The field
+   --  name for such fields has a plural name which always ends in "s". For
+   --  example, a case statement has a field Alternatives pointing to list of
+   --  case statement alternative nodes.
 
-   --  Only fields pointing to lists have names ending in "s", so generally
-   --  the structure is strongly typed, fields not ending in s point to
-   --  single nodes, and fields ending in s point to lists.
+   --  Only fields pointing to lists have names ending in "s", so generally the
+   --  structure is strongly typed, fields not ending in s point to single
+   --  nodes, and fields ending in s point to lists.
 
    --  The following example shows how a traversal of a list is written. We
-   --  suppose here that Stmt points to a N_Case_Statement node which has
-   --  list field called Alternatives:
+   --  suppose here that Stmt points to a N_Case_Statement node which has a
+   --  list field called Alternatives:
 
    --   Alt := First (Alternatives (Stmt));
    --   while Present (Alt) loop
@@ -205,8 +206,8 @@ package Sinfo is
    --      Alt := Next (Alt);
    --   end loop;
 
-   --  The Present function tests for Empty, which in this case signals the
-   --  end of the list. First returns Empty immediately if the list is empty.
+   --  The Present function tests for Empty, which in this case signals the end
+   --  of the list. First returns Empty immediately if the list is empty.
    --  Present is defined in Atree, First and Next are defined in Nlists.
 
    --  The exceptions to this rule occur with {DEFINING_IDENTIFIERS} in all
@@ -219,32 +220,32 @@ package Sinfo is
    -- Pragmas --
    -------------
 
-   --  Pragmas can appear in many different context, but are not included
-   --  in the grammar. Still they must appear in the tree, so they can be
-   --  properly processed.
+   --  Pragmas can appear in many different context, but are not included in
+   --  the grammar. Still they must appear in the tree, so they can be properly
+   --  processed.
 
-   --  Two approaches are used. In some cases, an extra field is defined
-   --  in an appropriate node that contains a list of pragmas appearing
-   --  in the expected context. For example pragmas can appear before an
+   --  Two approaches are used. In some cases, an extra field is defined in an
+   --  appropriate node that contains a list of pragmas appearing in the
+   --  expected context. For example pragmas can appear before an
    --  Accept_Alternative in a Selective_Accept_Statement, and these pragmas
    --  appear in the Pragmas_Before field of the N_Accept_Alternative node.
 
    --  The other approach is to simply allow pragmas to appear in syntactic
    --  lists where the grammar (of course) does not include the possibility.
-   --  For example, the Variants field of an N_Variant_Part node points to
-   --  list that can contain both N_Pragma and N_Variant nodes.
+   --  For example, the Variants field of an N_Variant_Part node points to a
+   --  list that can contain both N_Pragma and N_Variant nodes.
 
    --  To make processing easier in the latter case, the Nlists package
    --  provides a set of routines (First_Non_Pragma, Last_Non_Pragma,
-   --  Next_Non_Pragma, Prev_Non_Pragma) that allow such lists to be
-   --  handled ignoring all pragmas.
+   --  Next_Non_Pragma, Prev_Non_Pragma) that allow such lists to be handled
+   --  ignoring all pragmas.
 
    --  In the case of the variants list, we can either write:
 
    --      Variant := First (Variants (N));
    --      while Present (Variant) loop
    --         ...
-   --         Alt := Next (Alt);
+   --         Variant := Next (Variant);
    --      end loop;
 
    --  or
@@ -252,33 +253,33 @@ package Sinfo is
    --      Variant := First_Non_Pragma (Variants (N));
    --      while Present (Variant) loop
    --         ...
-   --         Alt := Next_Non_Pragma (Alt);
+   --         Variant := Next_Non_Pragma (Variant);
    --      end loop;
 
-   --  In the first form of the loop, Variant can either be an N_Pragma or
-   --  an N_Variant node. In the second form, Variant can only be N_Variant
-   --  since all pragmas are skipped.
+   --  In the first form of the loop, Variant can either be an N_Pragma or an
+   --  N_Variant node. In the second form, Variant can only be N_Variant since
+   --  all pragmas are skipped.
 
    ---------------------
    -- Optional Fields --
    ---------------------
 
    --  Fields which correspond to a section of the syntax enclosed in square
-   --  brackets are generally omitted (and the corresponding field set to
-   --  Empty for a node, or No_List for a list). The documentation of such
-   --  fields notes these cases. One exception to this rule occurs in the
-   --  case of possibly empty statement sequences (such as the sequence of
-   --  statements in an entry call alternative). Such cases appear in the
-   --  syntax rules as [SEQUENCE_OF_STATEMENTS] and the fields corresponding
-   --  to such optional statement sequences always contain an empty list (not
-   --  No_List) if no statements are present.
-
-   --  Note: the utility program that constructs the body and spec of the
-   --  Nmake package relies on the format of the comments to determine if
-   --  a field should have a default value in the corresponding make routine.
-   --  The rule is that if the first line of the description of the field
-   --  contains the string "(set to xxx if", then a default value of xxx is
-   --  provided for this field in the corresponding Make_yyy routine.
+   --  brackets are generally omitted (and the corresponding field set to Empty
+   --  for a node, or No_List for a list). The documentation of such fields
+   --  notes these cases. One exception to this rule occurs in the case of
+   --  possibly empty statement sequences (such as the sequence of statements
+   --  in an entry call alternative). Such cases appear in the syntax rules as
+   --  [SEQUENCE_OF_STATEMENTS] and the fields corresponding to such optional
+   --  statement sequences always contain an empty list (not No_List) if no
+   --  statements are present.
+
+   --  Note: the utility program that constructs the body and spec of the Nmake
+   --  package relies on the format of the comments to determine if a field
+   --  should have a default value in the corresponding make routine. The rule
+   --  is that if the first line of the description of the field contains the
+   --  string "(set to xxx if", then a default value of xxx is provided for
+   --  this field in the corresponding Make_yyy routine.
 
    -----------------------------------
    -- Note on Body/Spec Terminology --
@@ -287,33 +288,33 @@ package Sinfo is
    --  In informal discussions about Ada, it is customary to refer to package
    --  and subprogram specs and bodies. However, this is not technically
    --  correct, what is normally referred to as a spec or specification is in
-   --  fact a package declaration or subprogram declaration. We are careful
-   --  in GNAT to use the correct terminology and in particular, the full
-   --  word specification is never used as an incorrect substitute for
-   --  declaration. The structure and terminology used in the tree also
-   --  reflects the grammar and thus uses declaration and specification in
-   --  the technically correct manner.
-
-   --  However, there are contexts in which the informal terminology is
-   --  useful. We have the word "body" to refer to the Interp_Etype declared by
-   --  the declaration of a unit body, and in some contexts we need a
-   --  similar term to refer to the entity declared by the package or
-   --  subprogram declaration, and simply using declaration can be confusing
-   --  since the body also has a declaration.
-
-   --  An example of such a context is the link between the package body
-   --  and its declaration. With_Declaration is confusing, since
-   --  the package body itself is a declaration.
-
-   --  To deal with this problem, we reserve the informal term Spec, i.e.
-   --  the popular abbreviation used in this context, to refer to the entity
+   --  fact a package declaration or subprogram declaration. We are careful in
+   --  GNAT to use the correct terminology and in particular, the full word
+   --  specification is never used as an incorrect substitute for declaration.
+   --  The structure and terminology used in the tree also reflects the grammar
+   --  and thus uses declaration and specification in the technically correct
+   --  manner.
+
+   --  However, there are contexts in which the informal terminology is useful.
+   --  We have the word "body" to refer to the Interp_Etype declared by the
+   --  declaration of a unit body, and in some contexts we need similar term to
+   --  refer to the entity declared by the package or subprogram declaration,
+   --  and simply using declaration can be confusing since the body also has a
+   --  declaration.
+
+   --  An example of such a context is the link between the package body and
+   --  its declaration. With_Declaration is confusing, since the package body
+   --  itself is a declaration.
+
+   --  To deal with this problem, we reserve the informal term Spec, i.e. the
+   --  popular abbreviation used in this context, to refer to the entity
    --  declared by the package or subprogram declaration. So in the above
    --  example case, the field in the body is called With_Spec.
 
    --  Another important context for the use of the word Spec is in error
-   --  messages, where a hyper-correct use of declaration would be confusing
-   --  to a typical Ada programmer, and even for an expert programmer can
-   --  cause confusion since the body has a declaration as well.
+   --  messages, where a hyper-correct use of declaration would be confusing to
+   --  a typical Ada programmer, and even for an expert programmer can cause
+   --  confusion since the body has a declaration as well.
 
    --  So, to summarize:
 
@@ -340,8 +341,8 @@ package Sinfo is
    -- Internal Use Nodes --
    ------------------------
 
-   --  These are Node_Kind settings used in the internal implementation
-   --  which are not logically part of the specification.
+   --  These are Node_Kind settings used in the internal implementation which
+   --  are not logically part of the specification.
 
    --  N_Unused_At_Start
    --  Completely unused entry at the start of the enumeration type. This
@@ -352,24 +353,24 @@ package Sinfo is
    --  Completely unused entry at the end of the enumeration type. This is
    --  handy so that arrays with Node_Kind as the index type have an extra
    --  entry at the end (see for example the use of the Pchar_Pos_Array in
-   --  Treepr, where the extra entry provides the limit value when dealing
-   --  with the last used entry in the array).
+   --  Treepr, where the extra entry provides the limit value when dealing with
+   --  the last used entry in the array).
 
    -----------------------------------------
    -- Note on the settings of Sloc fields --
    -----------------------------------------
 
-   --  The Sloc field of nodes that come from the source is set by the
-   --  parser. For internal nodes, and nodes generated during expansion
-   --  the Sloc is usually set in the call to the constructor for the node.
-   --  In general the Sloc value chosen for an internal node is the Sloc of
-   --  the source node whose processing is responsible for the expansion. For
-   --  example, the Sloc of an inherited primitive operation is the Sloc of
-   --  the corresponding derived type declaration.
+   --  The Sloc field of nodes that come from the source is set by the parser.
+   --  For internal nodes, and nodes generated during expansion the Sloc is
+   --  usually set in the call to the constructor for the node. In general the
+   --  Sloc value chosen for an internal node is the Sloc of the source node
+   --  whose processing is responsible for the expansion. For example, the Sloc
+   --  of an inherited primitive operation is the Sloc of the corresponding
+   --  derived type declaration.
 
-   --  For the nodes of a generic instantiation, the Sloc value is encoded
-   --  to represent both the original Sloc in the generic unit, and the Sloc
-   --  of the instantiation itself. See Sinput.ads for details.
+   --  For the nodes of a generic instantiation, the Sloc value is encoded to
+   --  represent both the original Sloc in the generic unit, and the Sloc of
+   --  the instantiation itself. See Sinput.ads for details.
 
    --  Subprogram instances create two callable entities: one is the visible
    --  subprogram instance, and the other is an anonymous subprogram nested
@@ -383,12 +384,12 @@ package Sinfo is
 
    --  In the following node definitions, all fields, both syntactic and
    --  semantic, are documented. The one exception is in the case of entities
-   --  (defining indentifiers, character literals and operator symbols),
-   --  where the usage of the fields depends on the entity kind. Entity
-   --  fields are fully documented in the separate package Einfo.
+   --  (defining identifiers, character literals and operator symbols), where
+   --  the usage of the fields depends on the entity kind. Entity fields are
+   --  fully documented in the separate package Einfo.
 
-   --  In the node definitions, three common sets of fields are abbreviated
-   --  to save both space in the documentation, and also space in the string
+   --  In the node definitions, three common sets of fields are abbreviated to
+   --  save both space in the documentation, and also space in the string
    --  (defined in Tree_Print_Strings) used to print trees. The following
    --  abbreviations are used:
 
@@ -427,15 +428,14 @@ package Sinfo is
    --  Note: see under (EXPRESSION) for further details on the use of
    --  the Paren_Count field to record the number of parentheses levels.
 
-   --  Node_Kind is the type used in the Nkind field to indicate the node
-   --  kind. The actual definition of this type is given later (the reason
-   --  for this is that we want the descriptions ordered by logical chapter
-   --  in the RM, but the type definition is reordered to facilitate the
-   --  definition of some subtype ranges. The individual descriptions of
-   --  the nodes show how the various fields are used in each node kind,
-   --  as well as providing logical names for the fields. Functions and
-   --  procedures are provided for accessing and setting these fields
-   --  using these logical names.
+   --  Node_Kind is the type used in the Nkind field to indicate the node kind.
+   --  The actual definition of this type is given later (the reason for this
+   --  is that we want the descriptions ordered by logical chapter in the RM,
+   --  but the type definition is reordered to facilitate the definition of
+   --  some subtype ranges. The individual descriptions of the nodes show how
+   --  the various fields are used in each node kind, as well as providing
+   --  logical names for the fields. Functions and procedures are provided for
+   --  accessing and setting these fields using these logical names.
 
    -----------------------
    -- Gigi Restrictions --
@@ -457,108 +457,142 @@ package Sinfo is
 
    --  The following flag fields appear in all nodes
 
-   --  Analyzed
-   --    This flag is used to indicate that a node (and all its children
-   --    have been analyzed. It is used to avoid reanalysis of a node that
-   --    has already been analyzed, both for efficiency and functional
-   --    correctness reasons.
-
-   --  Error_Posted
-   --    This flag is used to avoid multiple error messages being posted
-   --    on or referring to the same node. This flag is set if an error
-   --    message refers to a node or is posted on its source location,
-   --    and has the effect of inhibiting further messages involving
-   --    this same node.
-
-   --  Comes_From_Source
-   --    This flag is on for any nodes built by the scanner or parser from
-   --    the source program, and off for any nodes built by the analyzer or
+   --  Analyzed (Flag1)
+   --    This flag is used to indicate that a node (and all its children have
+   --    been analyzed. It is used to avoid reanalysis of a node that has
+   --    already been analyzed, both for efficiency and functional correctness
+   --    reasons.
+
+   --  Comes_From_Source (Flag2)
+   --    This flag is on for any nodes built by the scanner or parser from the
+   --    source program, and off for any nodes built by the analyzer or
    --    expander. It indicates that a node comes from the original source.
    --    This flag is defined in Atree.
 
-   --  Has_Dynamic_Length_Check and Has_Dynamic_Range_Check also appear on
-   --  all nodes. They are fully described in the next section.
+   --  Error_Posted (Flag3)
+   --    This flag is used to avoid multiple error messages being posted on or
+   --    referring to the same node. This flag is set if an error message
+   --    refers to a node or is posted on its source location, and has the
+   --    effect of inhibiting further messages involving this same node.
+
+   --  Has_Dynamic_Length_Check (Flag10-Sem)
+   --    This flag is present on all nodes. It is set to indicate that one of
+   --    the routines in unit Checks has generated a length check action which
+   --    has been inserted at the flagged node. This is used to avoid the
+   --    generation of duplicate checks.
+
+   --  Has_Dynamic_Range_Check (Flag12-Sem)
+   --    This flag is present on all nodes. It is set to indicate that one of
+   --    the routines in unit Checks has generated a range check action which
+   --    has been inserted at the flagged node. This is used to avoid the
+   --    generation of duplicate checks.
+
+   --  Has_Local_Raise (Flag8-Sem)
+   --    Present in exception handler nodes. Set if the handler can be entered
+   --    via a local raise that gets transformed to a goto statement. This will
+   --    always be set if Local_Raise_Statements is non-empty, but can also be
+   --    set as a result of generation of N_Raise_xxx nodes, or flags set in
+   --    nodes requiring generation of back end checks.
 
    ------------------------------------
    -- Description of Semantic Fields --
    ------------------------------------
 
-   --  The meaning of the syntactic fields is generally clear from their
-   --  names without any further description, since the names are chosen
-   --  to correspond very closely to the syntax in the reference manual.
-   --  This section describes the usage of the semantic fields, which are
-   --  used to contain additional information determined during semantic
-   --  analysis.
+   --  The meaning of the syntactic fields is generally clear from their names
+   --  without any further description, since the names are chosen to
+   --  correspond very closely to the syntax in the reference manual. This
+   --  section describes the usage of the semantic fields, which are used to
+   --  contain additional information determined during semantic analysis.
 
    --  ABE_Is_Certain (Flag18-Sem)
-   --    This flag is set in an instantiation node or a call node is
-   --    determined to be sure to raise an ABE. This is used to trigger
-   --    special handling of such cases, particularly in the instantiation
-   --    case where we avoid instantiating the body if this flag is set.
-   --    This flag is also present in an N_Formal_Package_Declaration_Node
-   --    since formal package declarations are treated like instantiations,
-   --    but it is always set to False in this context.
+   --    This flag is set in an instantiation node or a call node is determined
+   --    to be sure to raise an ABE. This is used to trigger special handling
+   --    of such cases, particularly in the instantiation case where we avoid
+   --    instantiating the body if this flag is set. This flag is also present
+   --    in an N_Formal_Package_Declaration_Node since formal package
+   --    declarations are treated like instantiations, but it is always set to
+   --    False in this context.
 
    --  Accept_Handler_Records (List5-Sem)
-   --    This field is present only in an N_Accept_Alternative node. It is
-   --    used to temporarily hold the exception handler records from an
-   --    accept statement in a selective accept. These exception handlers
-   --    will eventually be placed in the Handler_Records list of the
-   --    procedure built for this accept (see Expand_N_Selective_Accept
-   --    procedure in Exp_Ch9 for further details).
+   --    This field is present only in an N_Accept_Alternative node. It is used
+   --    to temporarily hold the exception handler records from an accept
+   --    statement in a selective accept. These exception handlers will
+   --    eventually be placed in the Handler_Records list of the procedure
+   --    built for this accept (see Expand_N_Selective_Accept procedure in
+   --    Exp_Ch9 for further details).
 
    --  Access_Types_To_Process (Elist2-Sem)
    --    Present in N_Freeze_Entity nodes for Incomplete or private types.
-   --    Contains the list of access types which may require specific
-   --    treatment when the nature of the type completion is completely
-   --    known. An example of such treatement is the generation of the
-   --    associated_final_chain.
+   --    Contains the list of access types which may require specific treatment
+   --    when the nature of the type completion is completely known. An example
+   --    of such treatment is the generation of the associated_final_chain.
 
    --  Actions (List1-Sem)
-   --    This field contains a sequence of actions that are associated
-   --    with the node holding the field. See the individual node types
-   --    for details of how this field is used, as well as the description
-   --    of the specific use for a particular node type.
+   --    This field contains a sequence of actions that are associated with the
+   --    node holding the field. See the individual node types for details of
+   --    how this field is used, as well as the description of the specific use
+   --    for a particular node type.
 
    --  Activation_Chain_Entity (Node3-Sem)
    --    This is used in tree nodes representing task activators (blocks,
    --    subprogram bodies, package declarations, and task bodies). It is
    --    initially Empty, and then gets set to point to the entity for the
    --    declared Activation_Chain variable when the first task is declared.
-   --    When tasks are declared in the corresponding declarative region
-   --    this entity is located by name (its name is always _Chain) and
-   --    the declared tasks are added to the chain.
+   --    When tasks are declared in the corresponding declarative region this
+   --    entity is located by name (its name is always _Chain) and the declared
+   --    tasks are added to the chain. Note that N_Extended_Return_Statement
+   --    does not have this attribute, although it does have an activation
+   --    chain. This chain is used to store the tasks temporarily, and is not
+   --    used for activating them. On successful completion of the return
+   --    statement, the tasks are moved to the caller's chain, and the caller
+   --    activates them.
 
    --  Acts_As_Spec (Flag4-Sem)
-   --    A flag set in the N_Subprogram_Body node for a subprogram body
-   --    which is acting as its own spec. This flag also appears in the
-   --    compilation unit node at the library level for such a subprogram
-   --    (see further description in spec of Lib package).
+   --    A flag set in the N_Subprogram_Body node for a subprogram body which
+   --    is acting as its own spec, except in the case of a library level
+   --    subprogram, in which case the flag is set on the parent compilation
+   --    unit node instead (see further description in spec of Lib package).
+   --    ??? Above note about Lib is dubious since lib.ads does not mention
+   --    Acts_As_Spec at all.
+
+   --  Actual_Designated_Subtype (Node4-Sem)
+   --    Present in N_Free_Statement and N_Explicit_Dereference nodes. If gigi
+   --    needs to known the dynamic constrained subtype of the designated
+   --    object, this attribute is set to that type. This is done for
+   --    N_Free_Statements for access-to-classwide types and access to
+   --    unconstrained packed array types, and for N_Explicit_Dereference when
+   --    the designated type is an unconstrained packed array and the
+   --    dereference is the prefix of a 'Size attribute reference.
+
+   --  Address_Warning_Posted (Flag18-Sem)
+   --    Present in N_Attribute_Definition nodes. Set to indicate that we have
+   --    posted a warning for the address clause regarding size or alignment
+   --    issues. Used to inhibit multiple redundant messages.
 
    --  Aggregate_Bounds (Node3-Sem)
    --    Present in array N_Aggregate nodes. If the aggregate contains
    --    component associations this field points to an N_Range node whose
    --    bounds give the lowest and highest discrete choice values. If the
-   --    named aggregate contains a dynamic or null choice this field is
-   --    empty. If the aggregate contains positional elements this field
-   --    points to an N_Integer_Literal node giving the number of positional
-   --    elements. Note that if the aggregate contains positional elements
-   --    and an other choice the N_Integer_Literal only accounts for the
-   --    number of positional elements.
+   --    named aggregate contains a dynamic or null choice this field is empty.
+   --    If the aggregate contains positional elements this field points to an
+   --    N_Integer_Literal node giving the number of positional elements. Note
+   --    that if the aggregate contains positional elements and an other choice
+   --    the N_Integer_Literal only accounts for the number of positional
+   --    elements.
 
    --  All_Others (Flag11-Sem)
-   --    Present in an N_Others_Choice node. This flag is set in the case
-   --    of an others exception where all exceptions are to be caught, even
-   --    those that are not normally handled (in particular the tasking abort
-   --    signal). This is used for translation of the at end handler into
-   --    a normal exception handler.
+   --    Present in an N_Others_Choice node. This flag is set for an others
+   --    exception where all exceptions are to be caught, even those that are
+   --    not normally handled (in particular the tasking abort signal). This
+   --    is used for translation of the at end handler into a normal exception
+   --    handler.
 
    --  Assignment_OK (Flag15-Sem)
    --    This flag is set in a subexpression node for an object, indicating
    --    that the associated object can be modified, even if this would not
    --    normally be permissible (either by direct assignment, or by being
    --    passed as an out or in-out parameter). This is used by the expander
-   --    for a number of purposes, including initialzation of constants and
+   --    for a number of purposes, including initialization of constants and
    --    limited type objects (such as tasks), setting discriminant fields,
    --    setting tag values, etc. N_Object_Declaration nodes also have this
    --    flag defined. Here it is used to indicate that an initialization
@@ -569,30 +603,30 @@ package Sinfo is
    --    Present in nodes that can denote an entity: identifiers, character
    --    literals, operator symbols, expanded names, operator nodes, and
    --    attribute reference nodes (all these nodes have an Entity field).
-   --    This field is also present in N_Aggregate, N_Selected_Component,
-   --    and N_Extension_Aggregate nodes. This field is used in generic
-   --    processing to create links between the generic template and the
-   --    generic copy. See Sem_Ch12.Get_Associated_Node for full details.
-   --    Note that this field overlaps Entity, which is fine, since, as
-   --    explained in Sem_Ch12, the normal function of Entity is not
-   --    required at the point where the Associated_Node is set. Note
-   --    also, that in generic templates, this means that the Entity field
-   --    does not necessarily point to an Entity. Since the back end is
-   --    expected to ignore generic templates, this is harmless.
+   --    This field is also present in N_Aggregate, N_Selected_Component, and
+   --    N_Extension_Aggregate nodes. This field is used in generic processing
+   --    to create links between the generic template and the generic copy.
+   --    See Sem_Ch12.Get_Associated_Node for full details. Note that this
+   --    field overlaps Entity, which is fine, since, as explained in Sem_Ch12,
+   --    the normal function of Entity is not required at the point where the
+   --    Associated_Node is set. Note also, that in generic templates, this
+   --    means that the Entity field does not necessarily point to an Entity.
+   --    Since the back end is expected to ignore generic templates, this is
+   --    harmless.
 
    --  At_End_Proc (Node1)
    --    This field is present in an N_Handled_Sequence_Of_Statements node.
-   --    It contains an identifier reference for the cleanup procedure to
-   --    be called. See description of this node for further details.
+   --    It contains an identifier reference for the cleanup procedure to be
+   --    called. See description of this node for further details.
 
    --  Backwards_OK (Flag6-Sem)
    --    A flag present in the N_Assignment_Statement node. It is used only
    --    if the type being assigned is an array type, and is set if analysis
    --    determines that it is definitely safe to do the copy backwards, i.e.
-   --    starting at the highest addressed element. Note that if neither of
-   --    the flags Forwards_OK or Backwards_OK is set, it means that the
-   --    front end could not determine that either direction is definitely
-   --    safe, and a runtime check is required.
+   --    starting at the highest addressed element. Note that if neither of the
+   --    flags Forwards_OK or Backwards_OK is set, it means that the front end
+   --    could not determine that either direction is definitely safe, and a
+   --    runtime check may be required if the backend cannot figure it out.
 
    --  Body_To_Inline (Node3-Sem)
    --    present in subprogram declarations. Denotes analyzed but unexpanded
@@ -605,64 +639,75 @@ package Sinfo is
    --  Body_Required (Flag13-Sem)
    --    A flag that appears in the N_Compilation_Unit node indicating that
    --    the corresponding unit requires a body. For the package case, this
-   --    indicates that a completion is required. In Ada 95, if the flag
-   --    is not set for the package case, then a body may not be present.
-   --    In Ada 83, if the flag is not set for the package case, then a
-   --    body is optional. For a subprogram declaration, the flag is set
-   --    except in the case where a pragma Import or Interface applies,
-   --    in which case no body is permitted (in Ada 83 or Ada 95).
+   --    indicates that a completion is required. In Ada 95, if the flag is not
+   --    set for the package case, then a body may not be present. In Ada 83,
+   --    if the flag is not set for the package case, then body is optional.
+   --    For a subprogram declaration, the flag is set except in the case where
+   --    a pragma Import or Interface applies, in which case no body is
+   --    permitted (in Ada 83 or Ada 95).
 
    --  By_Ref (Flag5-Sem)
-   --    A flag present in the N_Return_Statement_Node. It is set when the
-   --    returned expression is already allocated on the secondary stack
-   --    and thus the result is passed by reference rather than copied
-   --    another time.
+   --    Present in N_Simple_Return_Statement and N_Extended_Return_Statement,
+   --    this flag is set when the returned expression is already allocated on
+   --    the secondary stack and thus the result is passed by reference rather
+   --    than copied another time.
 
    --  Check_Address_Alignment (Flag11-Sem)
    --    A flag present in N_Attribute_Definition clause for a 'Address
-   --    attribute definition. This flag is set if a dynamic check should
-   --    be generated at the freeze point for the entity to which this
-   --    address clause applies. The reason that we need this flag is that
-   --    we want to check for range checks being suppressed at the point
-   --    where the attribute definition clause is given, rather than
-   --    testing this at the freeze point.
+   --    attribute definition. This flag is set if a dynamic check should be
+   --    generated at the freeze point for the entity to which this address
+   --    clause applies. The reason that we need this flag is that we want to
+   --    check for range checks being suppressed at the point where the
+   --    attribute definition clause is given, rather than testing this at the
+   --    freeze point.
+
+   --  Coextensions (Elist4-Sem)
+   --    Present in allocators nodes. Points to list of allocators for the
+   --    access discriminants of the allocated object.
+
+   --  Comes_From_Extended_Return_Statement (Flag18-Sem)
+   --    Present in N_Simple_Return_Statement nodes. True if this node was
+   --    constructed as part of the N_Extended_Return_Statement expansion.
+   --    .
 
    --  Compile_Time_Known_Aggregate (Flag18-Sem)
-   --    Present in N_Aggregate nodes. Set for aggregates which can be
-   --    fully evaluated at compile time without raising constraint error.
-   --    Such aggregates can be passed as is to Gigi without any expansion.
-   --    See Sem_Aggr for the specific conditions under which an aggregate
-   --    has this flag set. See also the flag Static_Processing_OK.
+   --    Present in N_Aggregate nodes. Set for aggregates which can be fully
+   --    evaluated at compile time without raising constraint error. Such
+   --    aggregates can be passed as is to Gigi without any expansion. See
+   --    Sem_Aggr for the specific conditions under which an aggregate has this
+   --    flag set. See also the flag Static_Processing_OK.
 
    --  Condition_Actions (List3-Sem)
-   --    This field appears in else-if nodes and in the iteration scheme
-   --    node for while loops. This field is only used during semantic
-   --    processing to temporarily hold actions inserted into the tree.
-   --    In the tree passed to gigi, the condition actions field is always
-   --    set to No_List. For details on how this field is used, see the
-   --    routine Insert_Actions in package Exp_Util, and also the expansion
-   --    routines for the relevant nodes.
+   --    This field appears in else-if nodes and in the iteration scheme node
+   --    for while loops. This field is only used during semantic processing to
+   --    temporarily hold actions inserted into the tree. In the tree passed
+   --    to gigi, the condition actions field is always set to No_List. For
+   --    details on how this field is used, see the routine Insert_Actions in
+   --    package Exp_Util, and also the expansion routines for the relevant
+   --    nodes.
 
    --  Controlling_Argument (Node1-Sem)
    --    This field is set in procedure and function call nodes if the call
-   --    is a dispatching call (it is Empty for a non-dispatching call).
-   --    It indicates the source of the controlling tag for the call. For
-   --    Procedure calls, the Controlling_Argument is one of the actuals.
-   --    For a function that has a dispatching result, it is an entity in
-   --    the context of the call that can provide a tag, or else it is the
-   --    tag of the root type of the class.
+   --    is a dispatching call (it is Empty for a non-dispatching call). It
+   --    indicates the source of the call's controlling tag. For procedure
+   --    calls, the Controlling_Argument is one of the actuals. For function
+   --    that has a dispatching result, it is an entity in the context of the
+   --    call that can provide a tag, or else it is the tag of the root type
+   --    of the class. It can also specify a tag directly rather than being a
+   --    tagged object. The latter is needed by the implementations of AI-239
+   --    and AI-260.
 
    --  Conversion_OK (Flag14-Sem)
    --    A flag set on type conversion nodes to indicate that the conversion
    --    is to be considered as being valid, even though it is the case that
-   --    the conversion is not valid Ada. This is used for the Enum_Rep,
-   --    Fixed_Value and Integer_Value attributes, for internal conversions
-   --    done for fixed-point operations, and for certain conversions for
-   --    calls to initialization procedures. If Conversion_OK is set, then
-   --    Etype must be set (the analyzer assumes that Etype has been set).
-   --    For the case of fixed-point operands, it also indicates that the
-   --    conversion is to be a direct conversion of the underlying integer
-   --    result, with no regard to the small operand.
+   --    the conversion is not valid Ada. This is used for attributes Enum_Rep,
+   --    Fixed_Value and Integer_Value, for internal conversions done for
+   --    fixed-point operations, and for certain conversions for calls to
+   --    initialization procedures. If Conversion_OK is set, then Etype must be
+   --    set (the analyzer assumes that Etype has been set). For the case of
+   --    fixed-point operands, it also indicates that the conversion is to be
+   --    direct conversion of the underlying integer result, with no regard to
+   --    the small operand.
 
    --  Corresponding_Body (Node5-Sem)
    --    This field is set in subprogram declarations, package declarations,
@@ -670,10 +715,17 @@ package Sinfo is
    --    points to the defining entity for the corresponding body (NOT the
    --    node for the body itself).
 
+   --  Corresponding_Formal_Spec (Node3-Sem)
+   --    This field is set in subprogram renaming declarations, where it points
+   --    to the defining entity for a formal subprogram in the case where the
+   --    renaming corresponds to a generic formal subprogram association in an
+   --    instantiation. The field is Empty if the renaming does not correspond
+   --    to such a formal association.
+
    --  Corresponding_Generic_Association (Node5-Sem)
    --    This field is defined for object declarations and object renaming
    --    declarations. It is set for the declarations within an instance that
-   --    map generic formals to their actuals.  If set, the field points to
+   --    map generic formals to their actuals. If set, the field points to
    --    a generic_association which is the original parent of the expression
    --    or name appearing in the declaration. This simplifies ASIS queries.
 
@@ -687,15 +739,15 @@ package Sinfo is
    --  Corresponding_Spec (Node5-Sem)
    --    This field is set in subprogram, package, task, and protected body
    --    nodes, where it points to the defining entity in the corresponding
-   --    spec. The attribute is also set in N_With_Clause nodes, where
-   --    it points to the defining entity for the with'ed spec, and in
-   --    a subprogram renaming declaration when it is a Renaming_As_Body.
-   --    The field is Empty if there is no corresponding spec, as in the
-   --    case of a subprogram body that serves as its own spec.
+   --    spec. The attribute is also set in N_With_Clause nodes where it points
+   --    to the defining entity for the with'ed spec, and in a subprogram
+   --    renaming declaration when it is a Renaming_As_Body. The field is Empty
+   --    if there is no corresponding spec, as in the case of a subprogram body
+   --    that serves as its own spec.
 
    --  Corresponding_Stub (Node3-Sem)
    --    This field is present in an N_Subunit node. It holds the node in
-   --    the parent unit that is the stub declaration for the subunit. it is
+   --    the parent unit that is the stub declaration for the subunit. It is
    --    set when analysis of the stub forces loading of the proper body. If
    --    expansion of the proper body creates new declarative nodes, they are
    --    inserted at the point of the corresponding_stub.
@@ -705,29 +757,20 @@ package Sinfo is
    --    for the discriminant checking function for the variant.
 
    --  Debug_Statement (Node3)
-   --    This field is present in an N_Pragma node. It is used only for
-   --    a Debug pragma or pragma Assert with a second parameter. The
-   --    parameter is of the form of an expression, as required by the
-   --    pragma syntax, but is actually a procedure call. To simplify
+   --    This field is present in an N_Pragma node. It is used only for a Debug
+   --    pragma. The parameter is of the form of an expression, as required by
+   --    the pragma syntax, but is actually a procedure call. To simplify
    --    semantic processing, the parser creates a copy of the argument
    --    rearranged into a procedure call statement and places it in the
-   --    Debug_Statement field. Note that this field is considered a
-   --    syntactic field, since it is created by the parser.
+   --    Debug_Statement field. Note that this field is considered syntactic
+   --    field, since it is created by the parser.
 
    --  Default_Expression (Node5-Sem)
-   --    This field is Empty if there is no default expression. If there
-   --    is a simple default expression (one with no side effects), then
-   --    this field simply contains a copy of the Expression field (both
-   --    point to the tree for the default expression). Default_Expression
-   --    is used for conformance checking.
-
-   --  Delay_Finalize_Attach (Flag14-Sem)
-   --    This flag is present in an N_Object_Declaration node. If it is set,
-   --    then in the case of a controlled type being declared and initialized,
-   --    the normal code for attaching the result to the appropriate local
-   --    finalization list is suppressed. This is used for functions that
-   --    return controlled types without using the secondary stack, where
-   --    it is the caller who must do the attachment.
+   --    This field is Empty if there is no default expression. If there is a
+   --    simple default expression (one with no side effects), then this field
+   --    simply contains a copy of the Expression field (both point to the tree
+   --    for the default expression). Default_Expression is used for
+   --    conformance checking.
 
    --  Discr_Check_Funcs_Built (Flag11-Sem)
    --    This flag is present in N_Full_Type_Declaration nodes. It is set when
@@ -756,22 +799,21 @@ package Sinfo is
    --    is required. It is not determined who deals with this flag (???).
 
    --  Do_Overflow_Check (Flag17-Sem)
-   --    This flag is set on an operator where an overflow check is required
-   --    on the operation. The actual check is dealt with by the backend
-   --    (all the front end does is to set the flag). The other cases where
-   --    this flag is used is on a Type_Conversion node and for attribute
-   --    reference nodes. For a type conversion, it means that the conversion
-   --    is from one base type to another, and the value may not fit in the
-   --    target base type. See also the description of Do_Range_Check for
-   --    this case. The only attribute references which use this flag are
-   --    Pred and Succ, where it means that the result should be checked
-   --    for going outside the base range.
+   --    This flag is set on an operator where an overflow check is required on
+   --    the operation. The actual check is dealt with by the backend (all the
+   --    front end does is to set the flag). The other cases where this flag is
+   --    used is on a Type_Conversion node and for attribute reference nodes.
+   --    For a type conversion, it means that the conversion is from one base
+   --    type to another, and the value may not fit in the target base type.
+   --    See also the description of Do_Range_Check for this case. The only
+   --    attribute references which use this flag are Pred and Succ, where it
+   --    means that the result should be checked for going outside the base
+   --    range.
 
    --  Do_Range_Check (Flag9-Sem)
-   --    This flag is set on an expression which appears in a context where
-   --    a range check is required. The target type is clear from the
-   --    context. The contexts in which this flag can appear are limited to
-   --    the following.
+   --    This flag is set on an expression which appears in a context where a
+   --    range check is required. The target type is clear from the context.
+   --    The contexts in which this flag can appear are the following:
 
    --      Right side of an assignment. In this case the target type is
    --      taken from the left side of the assignment, which is referenced
@@ -781,27 +823,27 @@ package Sinfo is
    --      target type is determined from the type of the array, which is
    --      referenced by the Prefix of the N_Indexed_Component node.
 
-   --      Argument expression for a parameter, appearing either directly
-   --      in the Parameter_Associations list of a call or as the Expression
-   --      of an N_Parameter_Association node that appears in this list. In
-   --      either case, the check is against the type of the formal. Note
-   --      that the flag is relevant only in IN and IN OUT parameters, and
-   --      will be ignored for OUT parameters, where no check is required
-   --      in the call, and if a check is required on the return, it is
-   --      generated explicitly with a type conversion.
+   --      Argument expression for a parameter, appearing either directly in
+   --      the Parameter_Associations list of a call or as the Expression of an
+   --      N_Parameter_Association node that appears in this list. In either
+   --      case, the check is against the type of the formal. Note that the
+   --      flag is relevant only in IN and IN OUT parameters, and will be
+   --      ignored for OUT parameters, where no check is required in the call,
+   --      and if a check is required on the return, it is generated explicitly
+   --      with a type conversion.
 
    --      Initialization expression for the initial value in an object
    --      declaration. In this case the Do_Range_Check flag is set on
    --      the initialization expression, and the check is against the
    --      range of the type of the object being declared.
 
-   --      The expression of a type conversion. In this case the range check
-   --      is against the target type of the conversion. See also the use of
-   --      Do_Overflow_Check on a type conversion. The distinction is that
-   --      the overflow check protects against a value that is outside the
-   --      range of the target base type, whereas a range check checks that
-   --      the resulting value (which is a value of the base type of the
-   --      target type), satisfies the range constraint of the target type.
+   --      The expression of a type conversion. In this case the range check is
+   --      against the target type of the conversion. See also the use of
+   --      Do_Overflow_Check on a type conversion. The distinction is that the
+   --      overflow check protects against a value that is outside the range of
+   --      the target base type, whereas a range check checks that the
+   --      resulting value (which is a value of the base type of the target
+   --      type), satisfies the range constraint of the target type.
 
    --    Note: when a range check is required in contexts other than those
    --    listed above (e.g. in a return statement), an additional type
@@ -809,32 +851,43 @@ package Sinfo is
 
    --  Do_Storage_Check (Flag17-Sem)
    --    This flag is set in an N_Allocator node to indicate that a storage
-   --    check is required for the allocation, or in an N_Subprogram_Body
-   --    node to indicate that a stack check is required in the subprogram
-   --    prolog. The N_Allocator case is handled by the routine that expands
-   --    the call to the runtime routine. The N_Subprogram_Body case is
-   --    handled by the backend, and all the semantics does is set the flag.
+   --    check is required for the allocation, or in an N_Subprogram_Body node
+   --    to indicate that a stack check is required in the subprogram prolog.
+   --    The N_Allocator case is handled by the routine that expands the call
+   --    to the runtime routine. The N_Subprogram_Body case is handled by the
+   --    backend, and all the semantics does is set the flag.
 
    --  Do_Tag_Check (Flag13-Sem)
    --    This flag is set on an N_Assignment_Statement, N_Function_Call,
-   --    N_Procedure_Call_Statement, N_Type_Conversion or N_Return_Statememt
+   --    N_Procedure_Call_Statement, N_Type_Conversion,
+   --    N_Simple_Return_Statement, or N_Extended_Return_Statement
    --    node to indicate that the tag check can be suppressed. It is not
    --    yet decided how this flag is used (TBD ???).
 
    --  Elaborate_Present (Flag4-Sem)
-   --    This flag is set in the N_With_Clause node to indicate that a
-   --    pragma Elaborate pragma appears for the with'ed units.
+   --    This flag is set in the N_With_Clause node to indicate that pragma
+   --    Elaborate pragma appears for the with'ed units.
+
+   --  Elaborate_All_Desirable (Flag9-Sem)
+   --    This flag is set in the N_With_Clause mode to indicate that the static
+   --    elaboration processing has determined that an Elaborate_All pragma is
+   --    desirable for correct elaboration for this unit.
 
-   --  Elaborate_All_Present (Flag15-Sem)
+   --  Elaborate_All_Present (Flag14-Sem)
    --    This flag is set in the N_With_Clause node to indicate that a
    --    pragma Elaborate_All pragma appears for the with'ed units.
 
+   --  Elaborate_Desirable (Flag11-Sem)
+   --    This flag is set in the N_With_Clause mode to indicate that the static
+   --    elaboration processing has determined that an Elaborate pragma is
+   --    desirable for correct elaboration for this unit.
+
    --  Elaboration_Boolean (Node2-Sem)
-   --    This field is present in function and procedure specification
-   --    nodes. If set, it points to the entity for a Boolean flag that
-   --    must be tested for certain calls to check for access before
-   --    elaboration. See body of Sem_Elab for further details. This
-   --    field is Empty if no elaboration boolean is required.
+   --    This field is present in function and procedure specification nodes.
+   --    If set, it points to the entity for a Boolean flag that must be tested
+   --    for certain calls to check for access before elaboration. See body of
+   --    Sem_Elab for further details. This field is Empty if no elaboration
+   --    boolean is required.
 
    --  Else_Actions (List3-Sem)
    --    This field is present in conditional expression nodes. During code
@@ -842,75 +895,96 @@ package Sinfo is
    --    actions at an appropriate place in the tree to get elaborated at the
    --    right time. For conditional expressions, we have to be sure that the
    --    actions for the Else branch are only elaborated if the condition is
-   --    False. The Else_Actions field is used as a temporary parking place
-   --    for these actions. The final tree is always rewritten to eliminate
-   --    the need for this field, so in the tree passed to Gigi, this field
-   --    is always set to No_List.
+   --    False. The Else_Actions field is used as a temporary parking place for
+   --    these actions. The final tree is always rewritten to eliminate the
+   --    need for this field, so in the tree passed to Gigi, this field is
+   --    always set to No_List.
 
    --  Enclosing_Variant (Node2-Sem)
-   --    This field is present in the N_Variant node and identifies the
-   --    Node_Id corresponding to the immediately enclosing variant when
-   --    the variant is nested, and N_Empty otherwise. Set during semantic
-   --    processing of the variant part of a record type.
+   --    This field is present in the N_Variant node and identifies the Node_Id
+   --    corresponding to the immediately enclosing variant when the variant is
+   --    nested, and N_Empty otherwise. Set during semantic processing of the
+   --    variant part of a record type.
 
    --  Entity (Node4-Sem)
-   --    Appears in all direct names (identifier, character literal,
-   --    operator symbol), as well as expanded names, and attributes that
-   --    denote entities, such as 'Class. Points to the entity for the
-   --    corresponding defining occurrence. Set after name resolution.
-   --    In the case of identifiers in a WITH list, the corresponding
-   --    defining occurrence is in a separately compiled file, and this
-   --    pointer must be set using the library Load procedure. Note that
-   --    during name resolution, the value in Entity may be temporarily
-   --    incorrect (e.g. during overload resolution, Entity is initially
-   --    set to the first possible correct interpretation, and then later
-   --    modified if necessary to contain the correct value after resolution).
-   --    Note that this field overlaps Associated_Node, which is used during
+   --    Appears in all direct names (identifiers, character literals, and
+   --    operator symbols), as well as expanded names, and attributes that
+   --    denote entities, such as 'Class. Points to entity for corresponding
+   --    defining occurrence. Set after name resolution. For identifiers in a
+   --    WITH list, the corresponding defining occurrence is in a separately
+   --    compiled file, and Entity must be set by the library Load procedure.
+   --
+   --    Note: During name resolution, the value in Entity may be temporarily
+   --    incorrect (e.g. during overload resolution, Entity is initially set to
+   --    the first possible correct interpretation, and then later modified if
+   --    necessary to contain the correct value after resolution).
+   --
+   --    Note: This field overlaps Associated_Node, which is used during
    --    generic processing (see Sem_Ch12 for details). Note also that in
    --    generic templates, this means that the Entity field does not always
-   --    point to an Entity. Since the back end is expected to ignore
-   --    generic templates, this is harmless.
+   --    point to an Entity. Since the back end is expected to ignore generic
+   --    templates, this is harmless.
+   --
+   --    Note: This field also appears in N_Attribute_Definition_Clause nodes.
+   --    It is used only for stream attributes definition clauses. In this
+   --    case, it denotes a (possibly dummy) subprogram entity that is declared
+   --    conceptually at the point of the clause. Thus the visibility of the
+   --    attribute definition clause (in the sense of 8.3(23) as amended by
+   --    AI-195) can be checked by testing the visibility of that subprogram.
+   --
+   --    Note: Normally the Entity field of an identifier points to the entity
+   --    for the corresponding defining identifier, and hence the Chars field
+   --    of an identifier will match the Chars field of the entity. However,
+   --    there is no requirement that these match, and there are obscure cases
+   --    of generated code where they do not match.
 
    --  Entity_Or_Associated_Node (Node4-Sem)
-   --    A synonym for both Entity and Asasociated_Node. Used by convention
-   --    in the code when referencing this field in cases where it is not
-   --    known whether the field contains an Entity or an Associated_Node.
+   --    A synonym for both Entity and Associated_Node. Used by convention in
+   --    the code when referencing this field in cases where it is not known
+   --    whether the field contains an Entity or an Associated_Node.
 
    --  Etype (Node5-Sem)
-   --    Appears in all expression nodes, all direct names, and all
-   --    entities. Points to the entity for the related type. Set after
-   --    type resolution. Normally this is the actual subtype of the
-   --    expression. However, in certain contexts such as the right side
-   --    of an assignment, subscripts, arguments to calls, returned value
-   --    in a function, initial value etc. it is the desired target type.
-   --    In the event that this is different from the actual type, the
-   --    Do_Range_Check flag will be set if a range check is required.
-   --    Note: if the Is_Overloaded flag is set, then Etype points to
-   --    an essentially arbitrary choice from the possible set of types.
-
-   --  Exception_Junk (Flag11-Sem)
-   --    This flag is set in a various nodes appearing in a statement
-   --    sequence to indicate that the corresponding node is an artifact
-   --    of the generated code for exception handling, and should be
-   --    ignored when analyzing the control flow of the relevant sequence
-   --    of statements (e.g. to check that it does not end with a bad
-   --    return statement).
+   --    Appears in all expression nodes, all direct names, and all entities.
+   --    Points to the entity for the related type. Set after type resolution.
+   --    Normally this is the actual subtype of the expression. However, in
+   --    certain contexts such as the right side of an assignment, subscripts,
+   --    arguments to calls, returned value in a function, initial value etc.
+   --    it is the desired target type. In the event that this is different
+   --    from the actual type, the Do_Range_Check flag will be set if a range
+   --    check is required. Note: if the Is_Overloaded flag is set, then Etype
+   --    points to an essentially arbitrary choice from the possible set of
+   --    types.
+
+   --  Exception_Junk (Flag8-Sem)
+   --    This flag is set in a various nodes appearing in a statement sequence
+   --    to indicate that the corresponding node is an artifact of the
+   --    generated code for exception handling, and should be ignored when
+   --    analyzing the control flow of the relevant sequence of statements
+   --    (e.g. to check that it does not end with a bad return statement).
+
+   --  Exception_Label (Node5-Sem)
+   --    Appears in N_Push_xxx_Label nodes. Points to the entity of the label
+   --    to be used for transforming the corresponding exception into a goto,
+   --    or contains Empty, if this exception is not to be transformed. Also
+   --    appears in N_Exception_Handler nodes, where, if set, it indicates
+   --    that there may be a local raise for the handler, so that expansion
+   --    to allow a goto is required (and this field contains the label for
+   --    this goto). See Exp_Ch11.Expand_Local_Exception_Handlers for details.
 
    --  Expansion_Delayed (Flag11-Sem)
-   --    Set on aggregates and extension aggregates that need a top-down
-   --    rather than bottom up expansion. Typically aggregate expansion
-   --    happens bottom up. For nested aggregates the expansion is delayed
-   --    until the enclosing aggregate itself is expanded, e.g. in the context
-   --    of a declaration. To delay it we set this flag. This is done to
-   --    avoid creating a temporary for each level of a nested aggregates,
-   --    and also to prevent the premature generation of constraint checks.
-   --    This is also a requirement if we want to generate the proper
-   --    attachment to the internal finalization lists (for record with
-   --    controlled components). Top down expansion of aggregates is also
-   --    used for in-place array aggregate assignment or initialization.
-   --    When the full context is known, the target of the assignment or
-   --    initialization is used to generate the left-hand side of individual
-   --    assignment to each sub-component.
+   --    Set on aggregates and extension aggregates that need a top-down rather
+   --    than bottom up expansion. Typically aggregate expansion happens bottom
+   --    up. For nested aggregates the expansion is delayed until the enclosing
+   --    aggregate itself is expanded, e.g. in the context of a declaration. To
+   --    delay it we set this flag. This is done to avoid creating a temporary
+   --    for each level of a nested aggregates, and also to prevent the
+   --    premature generation of constraint checks. This is also a requirement
+   --    if we want to generate the proper attachment to the internal
+   --    finalization lists (for record with controlled components). Top down
+   --    expansion of aggregates is also used for in-place array aggregate
+   --    assignment or initialization. When the full context is known, the
+   --    target of the assignment or initialization is used to generate the
+   --    left-hand side of individual assignment to each sub-component.
 
    --  First_Inlined_Subprogram (Node3-Sem)
    --    Present in the N_Compilation_Unit node for the main program. Points
@@ -920,69 +994,81 @@ package Sinfo is
    --    if there are no inlined subprograms or inlining is not active.
 
    --  First_Named_Actual (Node4-Sem)
-   --    Present in procedure call statement and function call nodes, and
-   --    also in Intrinsic nodes. Set during semantic analysis to point to
-   --    the first named parameter where parameters are ordered by declaration
-   --    order (as opposed to the actual order in the call which may be
-   --    different due to named associations). Note: this field points to the
-   --    explicit actual parameter itself, not the N_Parameter_Association
-   --    node (its parent).
+   --    Present in procedure call statement and function call nodes, and also
+   --    in Intrinsic nodes. Set during semantic analysis to point to the first
+   --    named parameter where parameters are ordered by declaration order (as
+   --    opposed to the actual order in the call which may be different due to
+   --    named associations). Note: this field points to the explicit actual
+   --    parameter itself, not the N_Parameter_Association node (its parent).
 
    --  First_Real_Statement (Node2-Sem)
    --    Present in N_Handled_Sequence_Of_Statements node. Normally set to
-   --    Empty. Used only when declarations are moved into the statement
-   --    part of a construct as a result of wrapping an AT END handler that
-   --    is required to cover the declarations. In this case, this field is
-   --    used to remember the location in the statements list of the first
-   --    real statement, i.e. the statement that used to be first in the
-   --    statement list before the declarations were prepended.
+   --    Empty. Used only when declarations are moved into the statement part
+   --    of a construct as a result of wrapping an AT END handler that is
+   --    required to cover the declarations. In this case, this field is used
+   --    to remember the location in the statements list of the first real
+   --    statement, i.e. the statement that used to be first in the statement
+   --    list before the declarations were prepended.
 
    --  First_Subtype_Link (Node5-Sem)
-   --    Present in N_Freeze_Entity node for an anonymous base type that
-   --    is implicitly created by the declaration of a first subtype. It
-   --    points to the entity for the first subtype.
+   --    Present in N_Freeze_Entity node for an anonymous base type that is
+   --    implicitly created by the declaration of a first subtype. It points
+   --    to the entity for the first subtype.
 
    --  Float_Truncate (Flag11-Sem)
-   --    A flag present in type conversion nodes. This is used for float
-   --    to integer conversions where truncation is required rather than
-   --    rounding. Note that Gigi does not handle type conversions from real
-   --    to integer with rounding (see Expand_N_Type_Conversion).
+   --    A flag present in type conversion nodes. This is used for float to
+   --    integer conversions where truncation is required rather than rounding.
+   --    Note that Gigi does not handle type conversions from real to integer
+   --    with rounding (see Expand_N_Type_Conversion).
 
    --  Forwards_OK (Flag5-Sem)
    --    A flag present in the N_Assignment_Statement node. It is used only
    --    if the type being assigned is an array type, and is set if analysis
    --    determines that it is definitely safe to do the copy forwards, i.e.
-   --    starting at the lowest addressed element. Note that if neither of
-   --    the flags Forwards_OK or Backwards_OK is set, it means that the
-   --    front end could not determine that either direction is definitely
-   --    safe, and a runtime check is required.
+   --    starting at the lowest addressed element. Note that if neither of the
+   --    flags Forwards_OK or Backwards_OK is set, it means that the front end
+   --    could not determine that either direction is definitely safe, and a
+   --    runtime check is required.
+
+   --  From_At_End (Flag4-Sem)
+   --    This flag is set on an N_Raise_Statement node if it corresponds to
+   --    the reraise statement generated as the last statement of an AT END
+   --    handler when SJLJ exception handling is active. It is used to stop
+   --    a bogus violation of restriction (No_Exception_Propagation), bogus
+   --    because if the restriction is set, the reraise is not generated.
 
    --  From_At_Mod (Flag4-Sem)
    --    This flag is set on the attribute definition clause node that is
    --    generated by a transformation of an at mod phrase in a record
-   --    representation clause. This is used to give slightly different
-   --    (Ada 83 compatible) semantics to such a clause, namely it is
-   --    used to specify a minimum acceptable alignment for the base type
-   --    and all subtypes. In Ada 95 terms, the actual alignment of the
-   --    base type and all subtypes must be a multiple of the given value,
-   --    and the representation clause is considered to be type specific
-   --    instead of subtype specific.
+   --    representation clause. This is used to give slightly different (Ada 83
+   --    compatible) semantics to such a clause, namely it is used to specify a
+   --    minimum acceptable alignment for the base type and all subtypes. In
+   --    Ada 95 terms, the actual alignment of the base type and all subtypes
+   --    must be a multiple of the given value, and the representation clause
+   --    is considered to be type specific instead of subtype specific.
+
+   --  From_Default (Flag6-Sem)
+   --    This flag is set on the subprogram renaming declaration created in an
+   --    instance for a formal subprogram, when the formal is declared with a
+   --    box, and there is no explicit actual. If the flag is present, the
+   --    declaration is treated as an implicit reference to the formal in the
+   --    ali file.
 
    --  Generic_Parent (Node5-Sem)
-   --    Generic_parent is defined on declaration nodes that are instances.
-   --    The value of Generic_Parent is the generic entity from which the
-   --    instance is obtained. Generic_Parent is also defined for the renaming
+   --    Generic_Parent is defined on declaration nodes that are instances. The
+   --    value of Generic_Parent is the generic entity from which the instance
+   --    is obtained. Generic_Parent is also defined for the renaming
    --    declarations and object declarations created for the actuals in an
    --    instantiation. The generic parent of such a declaration is the
    --    corresponding generic association in the Instantiation node.
 
    --  Generic_Parent_Type (Node4-Sem)
-   --    Generic_Parent_Type is defined on Subtype_Declaration nodes for
-   --    the actuals of formal private and derived types. Within the instance,
-   --    the operations on the actual are those inherited from the parent.
-   --    For a formal private type, the parent type is the generic type
-   --    itself. The Generic_Parent_Type is also used in an instance to
-   --    determine whether a private operation overrides an inherited one.
+   --    Generic_Parent_Type is defined on Subtype_Declaration nodes for the
+   --    actuals of formal private and derived types. Within the instance, the
+   --    operations on the actual are those inherited from the parent. For a
+   --    formal private type, the parent type is the generic type itself. The
+   --    Generic_Parent_Type is also used in an instance to determine whether a
+   --    private operation overrides an inherited one.
 
    --  Handler_List_Entry (Node2-Sem)
    --    This field is present in N_Object_Declaration nodes. It is set only
@@ -992,88 +1078,86 @@ package Sinfo is
    --    handler is deleted during optimization. For further details on why
    --    this is required, see Exp_Ch11.Remove_Handler_Entries.
 
-   --  Has_Dynamic_Length_Check (Flag10-Sem)
-   --    This flag is present on all nodes. It is set to indicate that one
-   --    of the routines in unit Checks has generated a length check action
-   --    which has been inserted at the flagged node. This is used to avoid
-   --    the generation of duplicate checks.
-
-   --  Has_Dynamic_Range_Check (Flag12-Sem)
-   --    This flag is present on all nodes. It is set to indicate that one
-   --    of the routines in unit Checks has generated a range check action
-   --    which has been inserted at the flagged node. This is used to avoid
-   --    the generation of duplicate checks.
-
    --  Has_No_Elaboration_Code (Flag17-Sem)
-   --    A flag that appears in the N_Compilation_Unit node to indicate
-   --    whether or not elaboration code is present for this unit. It is
-   --    initially set true for subprogram specs and bodies and for all
-   --    generic units and false for non-generic package specs and bodies.
-   --    Gigi may set the flag in the non-generic package case if it
-   --    determines that no elaboration code is generated. Note that this
-   --    flag is not related to the Is_Preelaborated status, there can be
-   --    preelaborated packages that generate elaboration code, and non-
-   --    preelaborated packages which do not generate elaboration code.
+   --    A flag that appears in the N_Compilation_Unit node to indicate whether
+   --    or not elaboration code is present for this unit. It is initially set
+   --    true for subprogram specs and bodies and for all generic units and
+   --    false for non-generic package specs and bodies. Gigi may set the flag
+   --    in the non-generic package case if it determines that no elaboration
+   --    code is generated. Note that this flag is not related to the
+   --    Is_Preelaborated status, there can be preelaborated packages that
+   --    generate elaboration code, and non-preelaborated packages which do
+   --    not generate elaboration code.
 
    --  Has_Priority_Pragma (Flag6-Sem)
    --    A flag present in N_Subprogram_Body, N_Task_Definition and
-   --    N_Protected_Definition nodes to flag the presence of either
-   --    a Priority or Interrupt_Priority pragma in the declaration
-   --    sequence (public or private in the task and protected cases)
+   --    N_Protected_Definition nodes to flag the presence of either a Priority
+   --    or Interrupt_Priority pragma in the declaration sequence (public or
+   --    private in the task and protected cases)
 
    --  Has_Private_View (Flag11-Sem)
-   --    A flag present in generic nodes that have an entity, to indicate
-   --    that the node has a private type. Used to exchange private
-   --    and full declarations if the visibility at instantiation is
-   --    different from the visibility at generic definition.
+   --    A flag present in generic nodes that have an entity, to indicate that
+   --    the node has a private type. Used to exchange private and full
+   --    declarations if the visibility at instantiation is different from the
+   --    visibility at generic definition.
+
+   --  Has_Relative_Deadline_Pragma (Flag9-Sem)
+   --    A flag present in N_Subprogram_Body and N_Task_Definition nodes to
+   --    flag the presence of a pragma Relative_Deadline.
+
+   --  Has_Self_Reference (Flag13-Sem)
+   --    Present in N_Aggregate and N_Extension_Aggregate. Indicates that one
+   --    of the expressions contains an access attribute reference to the
+   --    enclosing type. Such a self-reference can only appear in default-
+   --    initialized aggregate for a record type.
 
    --  Has_Storage_Size_Pragma (Flag5-Sem)
-   --    A flag present in an N_Task_Definition node to flag the presence
-   --    of a Storage_Size pragma
+   --    A flag present in an N_Task_Definition node to flag the presence of a
+   --    Storage_Size pragma.
 
    --  Has_Task_Info_Pragma (Flag7-Sem)
-   --    A flag present in an N_Task_Definition node to flag the presence
-   --    of a Task_Info pragma. Used to detect duplicate pragmas.
+   --    A flag present in an N_Task_Definition node to flag the presence of a
+   --    Task_Info pragma. Used to detect duplicate pragmas.
 
    --  Has_Task_Name_Pragma (Flag8-Sem)
-   --    A flag present in N_Task_Definition nodes to flag the presence
-   --    of a Task_Name pragma in the declaration sequence for the task.
+   --    A flag present in N_Task_Definition nodes to flag the presence of a
+   --    Task_Name pragma in the declaration sequence for the task.
 
    --  Has_Wide_Character (Flag11-Sem)
-   --    Present in string literals, set if any wide character (i.e. a
-   --    character code outside the Character range) appears in the string.
+   --    Present in string literals, set if any wide character (i.e. character
+   --    code outside the Character range) appears in the string.
 
    --  Hidden_By_Use_Clause (Elist4-Sem)
    --     An entity list present in use clauses that appear within
    --     instantiations. For the resolution of local entities, entities
-   --     introduced by these use clauses have priority over global ones,
-   --     and outer entities must be explicitly hidden/restored on exit.
+   --     introduced by these use clauses have priority over global ones, and
+   --     outer entities must be explicitly hidden/restored on exit.
 
    --  Implicit_With (Flag16-Sem)
    --    This flag is set in the N_With_Clause node that is implicitly
-   --    generated for runtime units that are loaded by the expander, and
-   --    also for package System, if it is loaded implicitly by a use of
-   --    the 'Address or 'Tag attribute
+   --    generated for runtime units that are loaded by the expander, and also
+   --    for package System, if it is loaded implicitly by a use of the
+   --    'Address or 'Tag attribute.
 
    --  Includes_Infinities (Flag11-Sem)
-   --    This flag is present in N_Range nodes. It is set for the range
-   --    of unconstrained float types defined in Standard, which include
-   --    not only the given range of values, but also legtitimately can
-   --    include infinite values. This flag is false for any float type
-   --    for which an explicit range is given by the programmer, even if
-   --    that range is identical to the range for float.
+   --    This flag is present in N_Range nodes. It is set for the range of
+   --    unconstrained float types defined in Standard, which include not only
+   --    the given range of values, but also legitimately can include infinite
+   --    values. This flag is false for any float type for which an explicit
+   --    range is given by the programmer, even if that range is identical to
+   --    the range for Float.
 
    --  Instance_Spec (Node5-Sem)
    --    This field is present in generic instantiation nodes, and also in
    --    formal package declaration nodes (formal package declarations are
-   --    treated in a manner very similar to package instantiations). It
-   --    points to the node for the spec of the instance, inserted as part
-   --    of the semantic processing for instantiations in Sem_Ch12.
+   --    treated in a manner very similar to package instantiations). It points
+   --    to the node for the spec of the instance, inserted as part of the
+   --    semantic processing for instantiations in Sem_Ch12.
 
    --  Is_Asynchronous_Call_Block (Flag7-Sem)
    --    A flag set in a Block_Statement node to indicate that it is the
-   --    expansion of an asynchronous entry call. Such a block needs a
-   --    cleanup handler to assure that the call is cancelled.
+   --    expansion of an asynchronous entry call. Such a block needs cleanup
+   --    handler to assure that the call is cancelled.
 
    --  Is_Component_Left_Opnd  (Flag13-Sem)
    --  Is_Component_Right_Opnd (Flag14-Sem)
@@ -1082,54 +1166,74 @@ package Sinfo is
    --    concatenation nodes in instances.
 
    --  Is_Controlling_Actual (Flag16-Sem)
-   --    This flag is set on in an expression that is a controlling argument
-   --    in a dispatching call. It is off in all other cases. See Sem_Disp
-   --    for details of its use.
+   --    This flag is set on in an expression that is a controlling argument in
+   --    a dispatching call. It is off in all other cases. See Sem_Disp for
+   --    details of its use.
+
+   --  Is_Dynamic_Coextension (Flag18-Sem)
+   --    Present in allocator nodes, to indicate that this is an allocator
+   --    for an access discriminant of a dynamically allocated object. The
+   --    coextension must be deallocated and finalized at the same time as
+   --    the enclosing object.
+
+   --  Is_Entry_Barrier_Function (Flag8-Sem)
+   --    This flag is set in an N_Subprogram_Body node which is the expansion
+   --    of an entry barrier from a protected entry body. It is used for the
+   --    circuitry checking for incorrect use of Current_Task.
+
+   --  Is_Expanded_Build_In_Place_Call (Flag11-Sem)
+   --    This flag is set in an N_Function_Call node to indicate that the extra
+   --    actuals to support a build-in-place style of call have been added to
+   --    the call.
 
    --  Is_In_Discriminant_Check (Flag11-Sem)
-   --    This flag is present in a selected component, and is used to
-   --    indicate that the reference occurs within a discriminant check.
-   --    The significance is that optimizations based on assuming that
-   --    the discriminant check has a correct value cannot be performed
-   --    in this case (or the disriminant check may be optimized away!)
+   --    This flag is present in a selected component, and is used to indicate
+   --    that the reference occurs within a discriminant check. The
+   --    significance is that optimizations based on assuming that the
+   --    discriminant check has a correct value cannot be performed in this
+   --    case (or the discriminant check may be optimized away!)
 
    --  Is_Machine_Number (Flag11-Sem)
-   --    This flag is set in an N_Real_Literal node to indicate that the
-   --    value is a machine number. This avoids some unnecessary cases
-   --    of converting real literals to machine numbers.
+   --    This flag is set in an N_Real_Literal node to indicate that the value
+   --    is a machine number. This avoids some unnecessary cases of converting
+   --    real literals to machine numbers.
 
    --  Is_Null_Loop (Flag16-Sem)
-   --    This flag is set in an N_Loop_Statement node if the corresponding
-   --    loop can be determined to be null at compile time. This is used to
-   --    suppress any warnings that would otherwise be issued inside the
-   --    loop since they are probably not useful.
+   --    This flag is set in an N_Loop_Statement node if the corresponding loop
+   --    can be determined to be null at compile time. This is used to suppress
+   --    any warnings that would otherwise be issued inside the loop since they
+   --    are probably not useful.
+
+   --  Is_Overloaded (Flag5-Sem)
+   --    A flag present in all expression nodes. Used temporarily during
+   --    overloading determination. The setting of this flag is not relevant
+   --    once overloading analysis is complete.
 
    --  Is_Power_Of_2_For_Shift (Flag13-Sem)
    --    A flag present only in N_Op_Expon nodes. It is set when the
-   --    exponentiation is of the forma 2 ** N, where the type of N is
-   --    an unsigned integral subtype whose size does not exceed the size
-   --    of Standard_Integer (i.e. a type that can be safely converted to
-   --    Natural), and the exponentiation appears as the right operand of
-   --    an integer multiplication or an integer division where the dividend
-   --    is unsigned. It is also required that overflow checking is off for
-   --    both the exponentiation and the multiply/divide node. If this set
-   --    of conditions holds, and the flag is set, then the division or
+   --    exponentiation is of the form 2 ** N, where the type of N is an
+   --    unsigned integral subtype whose size does not exceed the size of
+   --    Standard_Integer (i.e. a type that can be safely converted to
+   --    Natural), and the exponentiation appears as the right operand of an
+   --    integer multiplication or an integer division where the dividend is
+   --    unsigned. It is also required that overflow checking is off for both
+   --    the exponentiation and the multiply/divide node. If this set of
+   --    conditions holds, and the flag is set, then the division or
    --    multiplication can be (and is) converted to a shift.
 
-   --  Is_Overloaded (Flag5-Sem)
-   --    A flag present in all expression nodes. Used temporarily during
-   --    overloading determination. The setting of this flag is not
-   --    relevant once overloading analysis is complete.
-
    --  Is_Protected_Subprogram_Body (Flag7-Sem)
    --    A flag set in a Subprogram_Body block to indicate that it is the
-   --    implemenation of a protected subprogram. Such a body needs a
-   --    cleanup handler to make sure that the associated protected object
-   --    is unlocked when the subprogram completes.
+   --    implementation of a protected subprogram. Such a body needs cleanup
+   --    handler to make sure that the associated protected object is unlocked
+   --    when the subprogram completes.
+
+   --  Is_Static_Coextension (Flag14-Sem)
+   --    Present in N_Allocator nodes. Set if the allocator is a coextension
+   --    of an object allocated on the stack rather than the heap.
 
    --  Is_Static_Expression (Flag6-Sem)
-   --    Indicates that an expression is a static expression (RM 4.9). See
-   --    spec of package Sem_Eval for full details on the use of this flag.
+   --    Indicates that an expression is a static expression (RM 4.9). See spec
+   --    of package Sem_Eval for full details on the use of this flag.
 
    --  Is_Subprogram_Descriptor (Flag16-Sem)
    --    Present in N_Object_Declaration, and set only for the object
@@ -1140,61 +1244,73 @@ package Sinfo is
    --    A flag set in a Block_Statement node to indicate that it is the
    --    expansion of a task allocator, or the allocator of an object
    --    containing tasks. Such a block requires a cleanup handler to call
-   --    Expunge_Unactivted_Tasks to complete any tasks that have been
+   --    Expunge_Unactivated_Tasks to complete any tasks that have been
    --    allocated but not activated when the allocator completes abnormally.
 
    --  Is_Task_Master (Flag5-Sem)
-   --    A flag set in a Subprogram_Body, Block_Statement or Task_Body node
-   --    to indicate that the construct is a task master (i.e. has declared
-   --    tasks or declares an access to a task type).
+   --    A flag set in a Subprogram_Body, Block_Statement or Task_Body node to
+   --    indicate that the construct is a task master (i.e. has declared tasks
+   --    or declares an access to a task type).
 
    --  Itype (Node1-Sem)
-   --    Used in N_Itype_Reference node to reference an itype for which it
-   --    is important to ensure that it is defined. See description of this
-   --    node for further details.
+   --    Used in N_Itype_Reference node to reference an itype for which it is
+   --    important to ensure that it is defined. See description of this node
+   --    for further details.
 
    --  Kill_Range_Check (Flag11-Sem)
    --    Used in an N_Unchecked_Type_Conversion node to indicate that the
-   --    result should not be subjected to range checks. This is used for
-   --    the implementation of Normalize_Scalars.
+   --    result should not be subjected to range checks. This is used for the
+   --    implementation of Normalize_Scalars.
 
    --  Label_Construct (Node2-Sem)
    --    Used in an N_Implicit_Label_Declaration node. Refers to an N_Label,
    --    N_Block_Statement or N_Loop_Statement node to which the label
    --    declaration applies. This is not currently used in the compiler
    --    itself, but it is useful in the implementation of ASIS queries.
+   --    This field is left empty for the special labels generated as part
+   --    of expanding raise statements with a local exception handler.
 
    --  Library_Unit (Node4-Sem)
-   --    In a stub node, the Library_Unit field points to the compilation unit
-   --    node of the corresponding subunit.
+   --    In a stub node, Library_Unit points to the compilation unit node of
+   --    the corresponding subunit.
    --
-   --    In a with clause node, the Library_Unit field points to the spec
-   --    of the with'ed unit.
+   --    In a with clause node, Library_Unit points to the spec of the with'ed
+   --    unit.
    --
-   --    In a compilation unit node, the use of this field depends on
-   --    the unit type:
+   --    In a compilation unit node, the usage depends on the unit type:
    --
-   --     For a subprogram body, the Library_Unit field points to the
-   --     compilation unit node of the corresponding spec, unless
-   --     Acts_As_Spec is set, in which case it points to itself.
+   --     For a subprogram body, Library_Unit points to the compilation unit
+   --     node of the corresponding spec, unless Acts_As_Spec is set, in which
+   --     case it points to itself.
    --
-   --     For a package body, the Library_Unit field points to the
-   --     compilation unit node of the corresponding spec.
+   --     For a package body, Library_Unit points to the compilation unit of
+   --     the corresponding package spec.
    --
-   --     For a subprogram spec to which pragma Inline applies, the
-   --     Library_Unit field points to the compilation unit node of
-   --     the corresponding body, if inlining is active.
+   --     For a subprogram spec to which pragma Inline applies, Library_Unit
+   --     points to the compilation unit node of the corresponding body, if
+   --     inlining is active.
    --
-   --     For a generic declaration, the Library_Unit field points
-   --     to the compilation unit node of the corresponding generic body.
+   --     For a generic declaration, Library_Unit points to the compilation
+   --     unit node of the corresponding generic body.
    --
-   --     For a subunit, the Library_Unit field points to the compilation
-   --     unit node of the parent body.
+   --     For a subunit, Library_Unit points to the compilation unit node of
+   --     the parent body.
    --
-   --    Note that this field is not used to hold the parent pointer for a
-   --    child unit (which might in any case need to use it for some other
-   --    purpose as described above). Instead for a child unit, implicit
-   --    with's are generated for all parents.
+   --    Note that this field is not used to hold the parent pointer for child
+   --    unit (which might in any case need to use it for some other purpose as
+   --    described above). Instead for a child unit, implicit with's are
+   --    generated for all parents.
+
+   --  Local_Raise_Statements (Elist1)
+   --    This field is present in exception handler nodes. It is set to
+   --    No_Elist in the normal case. If there is at least one raise statement
+   --    which can potentially be handled as a local raise, then this field
+   --    points to a list of raise nodes, which are calls to a routine to raise
+   --    an exception. These are raise nodes which can be optimized into gotos
+   --    if the handler turns out to meet the conditions which permit this
+   --    transformation. Note that this does NOT include instances of the
+   --    N_Raise_xxx_Error nodes since the transformation of these nodes is
+   --    handled by the back end (using the N_Push/N_Pop mechanism).
 
    --  Loop_Actions (List2-Sem)
    --    A list present in Component_Association nodes in array aggregates.
@@ -1202,70 +1318,93 @@ package Sinfo is
    --    they may need to be evaluated anew each time through.
 
    --  Limited_View_Installed (Flag18-Sem)
-   --    Present in With_Clauses and in package specifications. If set on a
+   --    Present in With_Clauses and in package specifications. If set on
    --    with_clause, it indicates that this clause has created the current
-   --    limited view of the designated package. On a package specification,
-   --    it indicates that the limited view has already been created because
-   --    the package is mentioned in a limited_with_clause in the closure of
-   --    the unit being compiled.
+   --    limited view of the designated package. On a package specification, it
+   --    indicates that the limited view has already been created because the
+   --    package is mentioned in a limited_with_clause in the closure of the
+   --    unit being compiled.
+
+   --  Local_Raise_Not_OK (Flag7-Sem)
+   --    Present in N_Exception_Handler nodes. Set if the handler contains
+   --    a construct (reraise statement, or call to subprogram in package
+   --    GNAT.Current_Exception) that makes the handler unsuitable as a target
+   --    for a local raise (one that could otherwise be converted to a goto).
 
    --  Must_Be_Byte_Aligned (Flag14-Sem)
    --    This flag is present in N_Attribute_Reference nodes. It can be set
    --    only for the Address and Unrestricted_Access attributes. If set it
-   --    means that the object for which the address/access is given must be
-   --    on a byte (more accurately a storage unit) boundary. If necessary,
-   --    a copy of the object is to be made before taking the address (this
-   --    copy is in the current scope on the stack frame). This is used for
-   --    certain cases of code generated by the expander that passes
-   --    parameters by address.
+   --    means that the object for which the address/access is given must be on
+   --    a byte (more accurately a storage unit) boundary. If necessary, a copy
+   --    of the object is to be made before taking the address (this copy is in
+   --    the current scope on the stack frame). This is used for certain cases
+   --    of code generated by the expander that passes parameters by address.
    --
-   --    The reason the copy is not made by the front end is that the back
-   --    end has more information about type layout and may be able to (but
-   --    is not guaranteed to) prevent making unnecessary copies.
+   --    The reason the copy is not made by the front end is that the back end
+   --    has more information about type layout and may be able to (but is not
+   --    guaranteed to) prevent making unnecessary copies.
 
    --  Must_Not_Freeze (Flag8-Sem)
    --    A flag present in all expression nodes. Normally expressions cause
-   --    freezing as described in the RM. If this flag is set, then this
-   --    is inhibited. This is used by the analyzer and expander to label
-   --    nodes that are created by semantic analysis or expansion and which
-   --    must not cause freezing even though they normally would. This flag
-   --    is also present in an N_Subtype_Indication node, since we also use
-   --    these in calls to Freeze_Expression.
+   --    freezing as described in the RM. If this flag is set, then this is
+   --    inhibited. This is used by the analyzer and expander to label nodes
+   --    that are created by semantic analysis or expansion and which must not
+   --    cause freezing even though they normally would. This flag is also
+   --    present in an N_Subtype_Indication node, since we also use these in
+   --    calls to Freeze_Expression.
 
    --  Next_Entity (Node2-Sem)
    --    Present in defining identifiers, defining character literals and
-   --    defining operator symbols (i.e. in all entities). The entities of
-   --    a scope are chained, and this field is used as the forward pointer
-   --    for this list. See Einfo for further details.
+   --    defining operator symbols (i.e. in all entities). The entities of a
+   --    scope are chained, and this field is used as the forward pointer for
+   --    this list. See Einfo for further details.
 
    --  Next_Named_Actual (Node4-Sem)
-   --    Present in parameter association node. Set during semantic
-   --    analysis to point to the next named parameter, where parameters
-   --    are ordered by declaration order (as opposed to the actual order
-   --    in the call, which may be different due to named associations).
-   --    Not that this field points to the explicit actual parameter itself,
-   --    not to the N_Parameter_Association node (its parent).
-
-   --  Next_Rep_Item (Node4-Sem)
-   --    Present in pragma nodes and attribute definition nodes. Used to
-   --    link representation items that apply to an entity. See description
-   --    of First_Rep_Item field in Einfo for full details.
+   --    Present in parameter association node. Set during semantic analysis to
+   --    point to the next named parameter, where parameters are ordered by
+   --    declaration order (as opposed to the actual order in the call, which
+   --    may be different due to named associations). Not that this field
+   --    points to the explicit actual parameter itself, not to the
+   --    N_Parameter_Association node (its parent).
+
+   --  Next_Pragma (Node1-Sem)
+   --    Present in N_Pragma nodes. Used to create a linked list of pragma
+   --    nodes. Currently used for two purposes:
+   --
+   --      Create a list of linked Check_Policy pragmas. The head of this list
+   --      is stored in Opt.Check_Policy_List (which has further details).
+   --
+   --      Used by processing for Pre/Postcondition pragmas to store a list of
+   --      pragmas associated with the spec of a subprogram (see Sem_Prag for
+   --      details).
+
+   --  Next_Rep_Item (Node5-Sem)
+   --    Present in pragma nodes and attribute definition nodes. Used to link
+   --    representation items that apply to an entity. See description of
+   --    First_Rep_Item field in Einfo for full details.
 
    --  Next_Use_Clause (Node3-Sem)
-   --    While use clauses are active during semantic processing, they
-   --    are chained from the scope stack entry, using Next_Use_Clause
-   --    as a link pointer, with Empty marking the end of the list. The
-   --    head pointer is in the scope stack entry (First_Use_Clause). At
-   --    the end of semantic processing (i.e. when Gigi sees the tree,
-   --    the contents of this field is undefined and should not be read).
+   --    While use clauses are active during semantic processing, they are
+   --    chained from the scope stack entry, using Next_Use_Clause as a link
+   --    pointer, with Empty marking the end of the list. The head pointer is
+   --    in the scope stack entry (First_Use_Clause). At the end of semantic
+   --    processing (i.e. when Gigi sees the tree, the contents of this field
+   --    is undefined and should not be read).
 
    --  No_Ctrl_Actions (Flag7-Sem)
    --    Present in N_Assignment_Statement to indicate that no finalize nor
-   --    nor adjust should take place on this assignment eventhough the rhs
-   --    is controlled. This is used in init procs and aggregate expansions
-   --    where the generated assignments are more initialisations than real
+   --    adjust should take place on this assignment even though the rhs is
+   --    controlled. This is used in init procs and aggregate expansions where
+   --    the generated assignments are more initialisations than real
    --    assignments.
 
+   --  No_Elaboration_Check (Flag14-Sem)
+   --    Present in N_Function_Call and N_Procedure_Call_Statement. Indicates
+   --    that no elaboration check is needed on the call, because it appears in
+   --    the context of a local Suppress pragma. This is used on calls within
+   --    task bodies, where the actual elaboration checks are applied after
+   --    analysis, when the local scope stack is not present.
+
    --  No_Entities_Ref_In_Spec (Flag8-Sem)
    --    Present in N_With_Clause nodes. Set if the with clause is on the
    --    package or subprogram spec where the main unit is the corresponding
@@ -1275,12 +1414,12 @@ package Sinfo is
    --    full details)
 
    --  No_Initialization (Flag13-Sem)
-   --    Present in N_Object_Declaration & N_Allocator to indicate
-   --    that the object must not be initialized (by Initialize or a
-   --    call to an init proc). This is needed for controlled aggregates.
-   --    When the Object declaration has an expression, this flag means
-   --    that this expression should not be taken into account (needed
-   --    for in place initialization with aggregates)
+   --    Present in N_Object_Declaration and N_Allocator to indicate that the
+   --    object must not be initialized (by Initialize or call to an init
+   --    proc). This is needed for controlled aggregates. When the Object
+   --    declaration has an expression, this flag means that this expression
+   --    should not be taken into account (needed for in place initialization
+   --    with aggregates).
 
    --  No_Truncation (Flag17-Sem)
    --    Present in N_Unchecked_Type_Conversion node. This flag has an effect
@@ -1288,61 +1427,51 @@ package Sinfo is
    --    target for scalar operands. Normally in such a case we truncate some
    --    higher order bits of the source, and then sign/zero extend the result
    --    to form the output value. But if this flag is set, then we do not do
-   --    any truncation, so for example, if an 8 bit input is converted to a
-   --    bit result which is in fact stored in 8 bits, then the high order
+   --    any truncation, so for example, if an 8 bit input is converted to 5
+   --    bit result which is in fact stored in 8 bits, then the high order
    --    three bits of the target result will be copied from the source. This
    --    is used for properly setting out of range values for use by pragmas
    --    Initialize_Scalars and Normalize_Scalars.
 
-   --  OK_For_Stream (Flag4-Sem)
-   --    Present in N_Attribute_Definition clauses for stream attributes. If
-   --    set, indicates that the attribute is permitted even though the type
-   --    involved is a limited type. In the case of a protected type, the
-   --    result is to stream all components (including discriminants) in
-   --    lexical order. For other limited types, the effect is simply to
-   --    use the corresponding stream routine for the full type. This flag
-   --    is used for internally generated code, where the streaming of these
-   --    types is required, even though not normally allowed by the language.
-
    --  Original_Discriminant (Node2-Sem)
    --    Present in identifiers. Used in references to discriminants that
-   --    appear in generic units. Because the names of the discriminants
-   --    may be different in an instance, we use this field to recover the
-   --    position of the discriminant in the original type, and replace it
-   --    with the discriminant at the same position in the instantiated type.
+   --    appear in generic units. Because the names of the discriminants may be
+   --    different in an instance, we use this field to recover the position of
+   --    the discriminant in the original type, and replace it with the
+   --    discriminant at the same position in the instantiated type.
 
    --  Original_Entity (Node2-Sem)
-   --    Present in numeric literals. Used to denote the named number that
-   --    has been constant-folded into the given literal. If literal is from
+   --    Present in numeric literals. Used to denote the named number that has
+   --    been constant-folded into the given literal. If literal is from
    --    source, or the result of some other constant-folding operation, then
    --    Original_Entity is empty. This field is needed to handle properly
    --    named numbers in generic units, where the Associated_Node field
-   --    interferes with the Entity field, making it impossible to preserve
-   --    the original entity at the point of instantiation (ASIS problem).
+   --    interferes with the Entity field, making it impossible to preserve the
+   --    original entity at the point of instantiation (ASIS problem).
 
    --  Others_Discrete_Choices (List1-Sem)
    --    When a case statement or variant is analyzed, the semantic checks
    --    determine the actual list of choices that correspond to an others
-   --    choice. This list is materialized for later use by the expander
-   --    and the Others_Discrete_Choices field of an N_Others_Choice node
-   --    points to this materialized list of choices, which is in standard
-   --    format for a list of discrete choices, except that of course it
-   --    cannot contain an N_Others_Choice entry.
+   --    choice. This list is materialized for later use by the expander and
+   --    the Others_Discrete_Choices field of an N_Others_Choice node points to
+   --    this materialized list of choices, which is in standard format for a
+   --    list of discrete choices, except that of course it cannot contain an
+   --    N_Others_Choice entry.
 
    --  Parameter_List_Truncated (Flag17-Sem)
-   --    Present in N_Function_Call and N_Procedure_Call_Statement nodes.
-   --    Set (for OpenVMS ports of GNAT only) if the parameter list is
-   --    truncated as a result of a First_Optional_Parameter specification
-   --    in an Import_Function, Import_Procedure, or Import_Valued_Procedure
-   --    pragma. The truncation is done by the expander by removing trailing
-   --    parameters from the argument list, in accordance with the set of
-   --    rules allowing such parameter removal. In particular, parameters
-   --    can be removed working from the end of the parameter list backwards
-   --    up to and including the entry designated by First_Optional_Parameter
-   --    in the Import pragma. Parameters can be removed if they are implicit
-   --    and the default value is a known-at-compile-time value, including
-   --    the use of the Null_Parameter attribute, or if explicit parameter
-   --    values are present that match the corresponding defaults.
+   --    Present in N_Function_Call and N_Procedure_Call_Statement nodes. Set
+   --    (for OpenVMS ports of GNAT only) if the parameter list is truncated as
+   --    a result of a First_Optional_Parameter specification in an
+   --    Import_Function, Import_Procedure, or Import_Valued_Procedure pragma.
+   --    The truncation is done by the expander by removing trailing parameters
+   --    from the argument list, in accordance with the set of rules allowing
+   --    such parameter removal. In particular, parameters can be removed
+   --    working from the end of the parameter list backwards up to and
+   --    including the entry designated by First_Optional_Parameter in the
+   --    Import pragma. Parameters can be removed if they are implicit and the
+   --    default value is a known-at-compile-time value, including the use of
+   --    the Null_Parameter attribute, or if explicit parameter values are
+   --    present that match the corresponding defaults.
 
    --  Parent_Spec (Node4-Sem)
    --    For a library unit that is a child unit spec (package or subprogram
@@ -1351,69 +1480,89 @@ package Sinfo is
    --    package specification. This field is Empty for library bodies (the
    --    parent spec in this case can be found from the corresponding spec).
 
+   --  PPC_Enabled (Flag5-Sem)
+   --    Present in N_Pragma nodes. This flag is relevant only for precondition
+   --    and postcondition nodes. It is true if the check corresponding to the
+   --    pragma type is enabled at the point where the pragma appears.
+
    --  Present_Expr (Uint3-Sem)
    --    Present in an N_Variant node. This has a meaningful value only after
-   --    Gigi has back annotated the tree with representation information.
-   --    At this point, it contains a reference to a gcc expression that
-   --    depends on the values of one or more discriminants. Give a set of
-   --    discriminant values, this expression evaluates to False (zero) if
-   --    variant is not present, and True (non-zero) if it is present. See
-   --    unit Repinfo for further details on gigi back annotation. This
-   --    field is used during ASIS processing (data decomposition annex)
-   --    to determine if a field is present or not.
+   --    Gigi has back annotated the tree with representation information. At
+   --    this point, it contains a reference to a gcc expression that depends
+   --    on the values of one or more discriminants. Give a set of discriminant
+   --    values, this expression evaluates to False (zero) if variant is not
+   --    present, and True (non-zero) if it is present. See unit Repinfo for
+   --    further details on gigi back annotation. This field is used during
+   --    ASIS processing (data decomposition annex) to determine if a field is
+   --    present or not.
 
    --  Print_In_Hex (Flag13-Sem)
-   --    Set on an N_Integer_Literal node to indicate that the value should
-   --    be printed in hexadecimal in the sprint listing. Has no effect on
-   --    legality or semantics of program, only on the displayed output.
-   --    This is used to clarify output from the packed array cases.
-
-   --  Procedure_To_Call (Node4-Sem)
-   --    Present in N_Allocator. N_Free_Statement, and N_Return_Statement
-   --    nodes. References the entity for the declaration of the procedure
-   --    to be called to accomplish the required operation (i.e. for the
-   --    Allocate procedure in the case of N_Allocator and N_Return_Statement
-   --    (for allocating the return value), and for the Deallocate procedure
-   --    in the case of N_Free_Statement.
+   --    Set on an N_Integer_Literal node to indicate that the value should be
+   --    printed in hexadecimal in the sprint listing. Has no effect on
+   --    legality or semantics of program, only on the displayed output. This
+   --    is used to clarify output from the packed array cases.
+
+   --  Procedure_To_Call (Node2-Sem)
+   --    Present in N_Allocator, N_Free_Statement, N_Simple_Return_Statement,
+   --    and N_Extended_Return_Statement nodes. References the entity for the
+   --    declaration of the procedure to be called to accomplish the required
+   --    operation (i.e. for the Allocate procedure in the case of N_Allocator
+   --    and N_Simple_Return_Statement and N_Extended_Return_Statement (for
+   --    allocating the return value), and for the Deallocate procedure in the
+   --    case of N_Free_Statement.
 
    --  Raises_Constraint_Error (Flag7-Sem)
-   --    Set on an expression whose evaluation will definitely fail a
-   --    constraint error check. In the case of static expressions, this
-   --    flag must be set accurately (and if it is set, the expression is
-   --    typically illegal unless it appears as a non-elaborated branch of
-   --    a short-circuit form). For a non-static expression, this flag may
-   --    be set whenever an expression (e.g. an aggregate) is known to raise
-   --    constraint error. If set, the expression definitely will raise CE
-   --    if elaborated at runtime. If not set, the expression may or may
-   --    not raise CE. In other words, on static expressions, the flag is
-   --    set accurately, on non-static expressions it is set conservatively.
+   --    Set on an expression whose evaluation will definitely fail constraint
+   --    error check. In the case of static expressions, this flag must be set
+   --    accurately (and if it is set, the expression is typically illegal
+   --    unless it appears as a non-elaborated branch of a short-circuit form).
+   --    For a non-static expression, this flag may be set whenever an
+   --    expression (e.g. an aggregate) is known to raise constraint error. If
+   --    set, the expression definitely will raise CE if elaborated at runtime.
+   --    If not set, the expression may or may not raise CE. In other words, on
+   --    static expressions, the flag is set accurately, on non-static
+   --    expressions it is set conservatively.
 
    --  Redundant_Use (Flag13-Sem)
-   --    A flag present in nodes that can appear as an operand in a use
-   --    clause or use type clause (identifiers, expanded names, attribute
-   --    references). Set to indicate that a use is redundant (and therefore
-   --    need not be undone on scope exit).
-
-   --  Return_Type (Node2-Sem)
-   --    Present in N_Return_Statement node. For a procedure, this is set
-   --    to Standard_Void_Type. For a function it references the entity
-   --    for the returned type.
+   --    Present in nodes that can appear as an operand in a use clause or use
+   --    type clause (identifiers, expanded names, attribute references). Set
+   --    to indicate that a use is redundant (and therefore need not be undone
+   --    on scope exit).
+
+   --  Renaming_Exception (Node2-Sem)
+   --    Present in N_Exception_Declaration node. Used to point back to the
+   --    exception renaming for an exception declared within a subprogram.
+   --    What happens is that an exception declared in a subprogram is moved
+   --    to the library level with a unique name, and the original exception
+   --    becomes a renaming. This link from the library level exception to the
+   --    renaming declaration allows registering of the proper exception name.
+
+   --  Return_Statement_Entity (Node5-Sem)
+   --    Present in N_Simple_Return_Statement and N_Extended_Return_Statement.
+   --    Points to an E_Return_Statement representing the return statement.
+
+   --  Return_Object_Declarations (List3)
+   --    Present in N_Extended_Return_Statement.
+   --    Points to a list initially containing a single
+   --    N_Object_Declaration representing the return object.
+   --    We use a list (instead of just a pointer to the object decl)
+   --    because Analyze wants to insert extra actions on this list.
 
    --  Rounded_Result (Flag18-Sem)
    --    Present in N_Type_Conversion, N_Op_Divide and N_Op_Multiply nodes.
    --    Used in the fixed-point cases to indicate that the result must be
-   --    rounded as a result of the use of the 'Round attribute. Also used
-   --    for integer N_Op_Divide nodes to indicate that the result should
-   --    be rounded to the nearest integer (breaking ties away from zero),
-   --    rather than truncated towards zero as usual. These rounded integer
-   --    operations are the result of expansion of rounded fixed-point
-   --    divide, conersion and multiplication operations.
+   --    rounded as a result of the use of the 'Round attribute. Also used for
+   --    integer N_Op_Divide nodes to indicate that the result should be
+   --    rounded to the nearest integer (breaking ties away from zero), rather
+   --    than truncated towards zero as usual. These rounded integer operations
+   --    are the result of expansion of rounded fixed-point divide, conversion
+   --    and multiplication operations.
 
    --  Scope (Node3-Sem)
    --    Present in defining identifiers, defining character literals and
-   --    defining operator symbols (i.e. in all entities). The entities of
-   --    a scope all use this field to reference the corresponding scope
-   --    entity. See Einfo for further details.
+   --    defining operator symbols (i.e. in all entities). The entities of a
+   --    scope all use this field to reference the corresponding scope entity.
+   --    See Einfo for further details.
 
    --  Shift_Count_OK (Flag4-Sem)
    --    A flag present in shift nodes to indicate that the shift count is
@@ -1432,33 +1581,26 @@ package Sinfo is
    --    flag is set, the full value of the aggregate can be determined at
    --    compile time and the aggregate can be passed as is to the back-end.
    --    In this event it is irrelevant whether this flag is set or not.
-   --    However, if the Compile_Time_Known_Aggregate flag is not set but
+   --    However, if the flag Compile_Time_Known_Aggregate is not set but
    --    Static_Processing_OK is set, the aggregate can (but need not) be
-   --    converted into a compile time known aggregate by the expander.
-   --    See Sem_Aggr for the specific conditions under which an aggregate
-   --    has its Static_Processing_OK flag set.
+   --    converted into a compile time known aggregate by the expander. See
+   --    Sem_Aggr for the specific conditions under which an aggregate has its
+   --    Static_Processing_OK flag set.
 
    --  Storage_Pool (Node1-Sem)
-   --    Present in N_Allocator, N_Free_Statement and N_Return_Statement
-   --    nodes. References the entity for the storage pool to be used for
-   --    the allocate or free call or for the allocation of the returned
-   --    value from a function. Empty indicates that the global default
-   --    default pool is to be used. Note that in the case of a return
-   --    statement, this field is set only if the function returns a
+   --    Present in N_Allocator, N_Free_Statement, N_Simple_Return_Statement,
+   --    and N_Extended_Return_Statement nodes. References the entity for the
+   --    storage pool to be used for the allocate or free call or for the
+   --    allocation of the returned value from function. Empty indicates that
+   --    the global default pool is to be used. Note that in the case
+   --    of a return statement, this field is set only if the function returns
    --    value of a type whose size is not known at compile time on the
-   --    secondary stack. It is never set on targets for which the target
-   --    parameter Targparm.Functions_Return_By_DSP_On_Target is True.
+   --    secondary stack.
 
    --  Target_Type (Node2-Sem)
-   --    Used in an N_Validate_Unchecked_Conversion node to point to the
-   --    target type entity for the unchecked conversion instantiation
-   --    which gigi must do size validation for.
-
-   --  Task_Body_Procedure (Node2-Sem)
-   --    Present in task type declaration nodes. Points to the entity for
-   --    the 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.
+   --    Used in an N_Validate_Unchecked_Conversion node to point to the target
+   --    type entity for the unchecked conversion instantiation which gigi must
+   --    do size validation for.
 
    --  Then_Actions (List3-Sem)
    --    This field is present in conditional expression nodes. During code
@@ -1466,55 +1608,55 @@ package Sinfo is
    --    actions at an appropriate place in the tree to get elaborated at the
    --    right time. For conditional expressions, we have to be sure that the
    --    actions for the Then branch are only elaborated if the condition is
-   --    True. The Then_Actions field is used as a temporary parking place
-   --    for these actions. The final tree is always rewritten to eliminate
-   --    the need for this field, so in the tree passed to Gigi, this field
-   --    is always set to No_List.
+   --    True. The Then_Actions field is used as a temporary parking place for
+   --    these actions. The final tree is always rewritten to eliminate the
+   --    need for this field, so in the tree passed to Gigi, this field is
+   --    always set to No_List.
 
    --  Treat_Fixed_As_Integer (Flag14-Sem)
-   --    This flag appears in operator nodes for divide, multiply, mod and
-   --    rem on fixed-point operands. It indicates that the operands are
-   --    to be treated as integer values, ignoring small values. This flag
-   --    is only set as a result of expansion of fixed-point operations.
-   --    Typically a fixed-point multplication in the source generates
-   --    subsidiary multiplication and division operations that work with
-   --    the underlying integer values and have this flag set. Note that
-   --    this flag is not needed on other arithmetic operations (add, neg,
-   --    subtract etc) since in these cases it is always the case that fixed
-   --    is treated as integer. The Etype field MUST be set if this flag
-   --    is set. The analyzer knows to leave such nodes alone, and whoever
-   --    makes them must set the correct Etype value.
+   --    This flag appears in operator nodes for divide, multiply, mod and rem
+   --    on fixed-point operands. It indicates that the operands are to be
+   --    treated as integer values, ignoring small values. This flag is only
+   --    set as a result of expansion of fixed-point operations. Typically a
+   --    fixed-point multiplication in the source generates subsidiary
+   --    multiplication and division operations that work with the underlying
+   --    integer values and have this flag set. Note that this flag is not
+   --    needed on other arithmetic operations (add, neg, subtract etc.) since
+   --    in these cases it is always the case that fixed is treated as integer.
+   --    The Etype field MUST be set if this flag is set. The analyzer knows to
+   --    leave such nodes alone, and whoever makes them must set the correct
+   --    Etype value.
 
    --  TSS_Elist (Elist3-Sem)
    --    Present in N_Freeze_Entity nodes. Holds an element list containing
    --    entries for each TSS (type support subprogram) associated with the
    --    frozen type. The elements of the list are the entities for the
-   --    subprograms (see package Exp_TSS for further details). Set to
-   --    No_Elist if there are no type support subprograms for the type
-   --    or if the freeze node is not for a type.
+   --    subprograms (see package Exp_TSS for further details). Set to No_Elist
+   --    if there are no type support subprograms for the type or if the freeze
+   --    node is not for a type.
 
    --  Unreferenced_In_Spec (Flag7-Sem)
    --    Present in N_With_Clause nodes. Set if the with clause is on the
    --    package or subprogram spec where the main unit is the corresponding
-   --    body, and is not referenced by the spec (it may still be referenced
-   --    by the body, so this flag is used to generate the proper message
-   --    (see Sem_Util.Check_Unused_Withs for details)
+   --    body, and is not referenced by the spec (it may still be referenced by
+   --    the body, so this flag is used to generate the proper message (see
+   --    Sem_Util.Check_Unused_Withs for details)
 
    --  Was_Originally_Stub (Flag13-Sem)
-   --    This flag is set in the node for a proper body that replaces a
-   --    stub. During the analysis procedure, stubs in some situations
-   --    get rewritten by the corresponding bodies, and we set this flag
-   --    to remember that this happened. Note that it is not good enough
-   --    to rely on the use of Original_Tree here because of the case of
-   --    nested instantiations where the substituted node can be copied.
+   --    This flag is set in the node for a proper body that replaces stub.
+   --    During the analysis procedure, stubs in some situations get rewritten
+   --    by the corresponding bodies, and we set this flag to remember that
+   --    this happened. Note that it is not good enough to rely on the use of
+   --    Original_Node here because of the case of nested instantiations where
+   --    the substituted node can be copied.
 
    --  Zero_Cost_Handling (Flag5-Sem)
    --    This flag is set in all handled sequence of statement and exception
-   --    handler nodes if eceptions are to be handled using the zero-cost
+   --    handler nodes if exceptions are to be handled using the zero-cost
    --    mechanism (see Ada.Exceptions and System.Exceptions in files
-   --    a-except.ads/adb and s-except.ads for full details). What gigi
-   --    needs to do for such a handler is simply to put the code in the
-   --    handler somewhere. The front end has generated all necessary labels.
+   --    a-except.ads/adb and s-except.ads for full details). What gigi needs
+   --    to do for such a handler is simply to put the code in the handler
+   --    somewhere. The front end has generated all necessary labels.
 
    --------------------------------------------------
    -- Note on Use of End_Label and End_Span Fields --
@@ -1541,46 +1683,43 @@ package Sinfo is
    --    Record Definition          end record;
    --    Enumeration Definition     );
 
-   --  The End_Label and End_Span fields are used to mark the locations
-   --  of these lines, and also keep track of the label in the case where
-   --  a label is present.
-
-   --  For the first group above, the End_Label field of the corresponding
-   --  node is used to point to the label identifier. In the case where
-   --  there is no label in the source, the parser supplies a dummy
-   --  identifier (with Comes_From_Source set to False), and the Sloc
-   --  of this dummy identifier marks the location of the token following
-   --  the END token.
-
-   --  For the second group, the use of End_Label is similar, but the
-   --  End_Label is found in the N_Handled_Sequence_Of_Statements node.
-   --  This is done simply because in some cases there is no room in
-   --  the parent node.
-
-   --  For the third group, there is never any label, and instead of
-   --  using End_Label, we use the End_Span field which gives the
-   --  location of the token following END, relative to the starting
-   --  Sloc of the construct, i.e. add Sloc (Node) + End_Span (Node)
-   --  to get the Sloc of the IF or CASE following the End_Label.
-
-   --  The record definition case is handled specially, we treat it
-   --  as though it required an optional label which is never present,
-   --  and so the parser always builds a dummy identifier with Comes
-   --  From Source set False. The reason we do this, rather than using
-   --  End_Span in this case, is that we want to generate a cross-ref
-   --  entry for the end of a record, since it represents a scope for
-   --  name declaration purposes.
-
-   --  The enumeration definition case is handled in an exactly similar
-   --  manner, building a dummy identifier to get a cross-reference.
-
-   --  Note: the reason we store the difference as a Uint, instead of
-   --  storing the Source_Ptr value directly, is that Source_Ptr values
-   --  cannot be distinguished from other types of values, and we count
-   --  on all general use fields being self describing. To make things
-   --  easier for clients, note that we provide function End_Location,
-   --  and procedure Set_End_Location to allow access to the logical
-   --  value (which is the Source_Ptr value for the end token).
+   --  The End_Label and End_Span fields are used to mark the locations of
+   --  these lines, and also keep track of the label in the case where a label
+   --  is present.
+
+   --  For the first group above, the End_Label field of the corresponding node
+   --  is used to point to the label identifier. In the case where there is no
+   --  label in the source, the parser supplies a dummy identifier (with
+   --  Comes_From_Source set to False), and the Sloc of this dummy identifier
+   --  marks the location of the token following the END token.
+
+   --  For the second group, the use of End_Label is similar, but the End_Label
+   --  is found in the N_Handled_Sequence_Of_Statements node. This is done
+   --  simply because in some cases there is no room in the parent node.
+
+   --  For the third group, there is never any label, and instead of using
+   --  End_Label, we use the End_Span field which gives the location of the
+   --  token following END, relative to the starting Sloc of the construct,
+   --  i.e. add Sloc (Node) + End_Span (Node) to get the Sloc of the IF or CASE
+   --  following the End_Label.
+
+   --  The record definition case is handled specially, we treat it as though
+   --  it required an optional label which is never present, and so the parser
+   --  always builds a dummy identifier with Comes From Source set False. The
+   --  reason we do this, rather than using End_Span in this case, is that we
+   --  want to generate a cross-ref entry for the end of a record, since it
+   --  represents a scope for name declaration purposes.
+
+   --  The enumeration definition case is handled in an exactly similar manner,
+   --  building a dummy identifier to get a cross-reference.
+
+   --  Note: the reason we store the difference as a Uint, instead of storing
+   --  the Source_Ptr value directly, is that Source_Ptr values cannot be
+   --  distinguished from other types of values, and we count on all general
+   --  use fields being self describing. To make things easier for clients,
+   --  note that we provide function End_Location, and procedure
+   --  Set_End_Location to allow access to the logical value (which is the
+   --  Source_Ptr value for the end token).
 
    ---------------------
    -- Syntactic Nodes --
@@ -1595,23 +1734,23 @@ package Sinfo is
 
       --  An IDENTIFIER shall not be a reserved word
 
-      --  In the Ada grammar identifiers are the bottom level tokens which
-      --  have very few semantics. Actual program identifiers are direct
-      --  names. If we were being 100% honest with the grammar, then we would
-      --  have a node called N_Direct_Name which would point to an identifier.
-      --  However, that's too many extra nodes, so we just use the N_Identifier
-      --  node directly as a direct name, and it contains the expression fields
-      --  and Entity field that correspond to its use as a direct name. In
-      --  those few cases where identifiers appear in contexts where they are
-      --  not direct names (pragmas, pragma argument associations, attribute
+      --  In the Ada grammar identifiers are the bottom level tokens which have
+      --  very few semantics. Actual program identifiers are direct names. If
+      --  we were being 100% honest with the grammar, then we would have a node
+      --  called N_Direct_Name which would point to an identifier. However,
+      --  that's too many extra nodes, so we just use the N_Identifier node
+      --  directly as a direct name, and it contains the expression fields and
+      --  Entity field that correspond to its use as a direct name. In those
+      --  few cases where identifiers appear in contexts where they are not
+      --  direct names (pragmas, pragma argument associations, attribute
       --  references and attribute definition clauses), the Chars field of the
       --  node contains the Name_Id for the identifier name.
 
-      --  Note: in GNAT, a reserved word can be treated as an identifier
-      --  in two cases. First, an incorrect use of a reserved word as an
-      --  identifier is diagnosed and then treated as a normal identifier.
-      --  Second, an attribute designator of the form of a reserved word
-      --  (access, delta, digits, range) is treated as an identifier.
+      --  Note: in GNAT, a reserved word can be treated as an identifier in two
+      --  cases. First, an incorrect use of a reserved word as an identifier is
+      --  diagnosed and then treated as a normal identifier. Second, an
+      --  attribute designator of the form of a reserved word (access, delta,
+      --  digits, range) is treated as an identifier.
 
       --  Note: The set of letters that is permitted in an identifier depends
       --  on the character set in use. See package Csets for full details.
@@ -1652,6 +1791,12 @@ package Sinfo is
       --  using the standard literal format. Such literals are listed by
       --  Sprint using the notation [numerator / denominator].
 
+      --  Note: the value of an integer literal node created by the front end
+      --  is never outside the range of values of the base type. However, it
+      --  can be the case that the value is outside the range of the
+      --  particular subtype. This happens in the case of integer overflows
+      --  with checks suppressed.
+
       --  N_Integer_Literal
       --  Sloc points to literal
       --  Original_Entity (Node2-Sem) If not Empty, holds Named_Number that
@@ -1695,18 +1840,18 @@ package Sinfo is
       --  N_Character_Literal
       --  Sloc points to literal
       --  Chars (Name1) contains the Name_Id for the identifier
-      --  Char_Literal_Value (Char_Code2) contains the literal value
+      --  Char_Literal_Value (Uint2) contains the literal value
       --  Entity (Node4-Sem)
       --  Associated_Node (Node4-Sem)
       --  Has_Private_View (Flag11-Sem) set in generic units.
       --  plus fields for expression
 
-      --  Note: the Entity field will be missing (and set to Empty) for
-      --  character literals whose type is Standard.Wide_Character or
-      --  Standard.Character or a type derived from one of these two.
-      --  In this case the character literal stands for its own coding.
-      --  The reason we take this irregular short cut is to avoid the
-      --  need to build lots of junk defining character literal nodes.
+      --  Note: the Entity field will be missing (set to Empty) for character
+      --  literals whose type is Standard.Wide_Character or Standard.Character
+      --  or a type derived from one of these two. In this case the character
+      --  literal stands for its own coding. The reason we take this irregular
+      --  short cut is to avoid the need to build lots of junk defining
+      --  character literal nodes.
 
       -------------------------
       -- 2.6  String Literal --
@@ -1716,11 +1861,19 @@ package Sinfo is
 
       --  A STRING_ELEMENT is either a pair of quotation marks ("), or a
       --  single GRAPHIC_CHARACTER other than a quotation mark.
+      --
+      --  Is_Folded_In_Parser is True if the parser created this literal by
+      --  folding a sequence of "&" operators. For example, if the source code
+      --  says "aaa" & "bbb" & "ccc", and this produces "aaabbbccc", the flag
+      --  is set. This flag is needed because the parser doesn't know about
+      --  visibility, so the folded result might be wrong, and semantic
+      --  analysis needs to check for that.
 
       --  N_String_Literal
       --  Sloc points to literal
       --  Strval (Str3) contains Id of string value
       --  Has_Wide_Character (Flag11-Sem)
+      --  Is_Folded_In_Parser (Flag4)
       --  plus fields for expression
 
       ------------------
@@ -1747,11 +1900,21 @@ package Sinfo is
       --  which are explicitly documented.
 
       --  N_Pragma
-      --  Sloc points to PRAGMA
-      --  Chars (Name1) identifier name from pragma identifier
+      --  Sloc points to pragma identifier
+      --  Next_Pragma (Node1-Sem)
       --  Pragma_Argument_Associations (List2) (set to No_List if none)
       --  Debug_Statement (Node3) (set to Empty if not Debug, Assert)
-      --  Next_Rep_Item (Node4-Sem)
+      --  Pragma_Identifier (Node4)
+      --  Next_Rep_Item (Node5-Sem)
+      --  PPC_Enabled (Flag5-Sem)
+
+      --  Note: we should have a section on what pragmas are passed on to
+      --  the back end to be processed. This section should note that pragma
+      --  Psect_Object is always converted to Common_Object, but there are
+      --  undoubtedly many other similar notes required ???
+
+      --  Note: a utility function Pragma_Name may be applied to pragma nodes
+      --  to conveniently obtain the Chars field of the Pragma_Identifier.
 
       --------------------------------------
       -- 2.8  Pragma Argument Association --
@@ -1854,14 +2017,14 @@ package Sinfo is
       --    ENUMERATION_TYPE_DEFINITION  | INTEGER_TYPE_DEFINITION
       --  | REAL_TYPE_DEFINITION         | ARRAY_TYPE_DEFINITION
       --  | RECORD_TYPE_DEFINITION       | ACCESS_TYPE_DEFINITION
-      --  | DERIVED_TYPE_DEFINITION
+      --  | DERIVED_TYPE_DEFINITION      | INTERFACE_TYPE_DEFINITION
 
       --------------------------------
       -- 3.2.2  Subtype Declaration --
       --------------------------------
 
       --  SUBTYPE_DECLARATION ::=
-      --    subtype DEFINING_IDENTIFIER is SUBTYPE_INDICATION;
+      --    subtype DEFINING_IDENTIFIER is [NULL_EXCLUSION] SUBTYPE_INDICATION;
 
       --  The subtype indication field is set to Empty for subtypes
       --  declared in package Standard (Positive, Natural).
@@ -1869,9 +2032,10 @@ package Sinfo is
       --  N_Subtype_Declaration
       --  Sloc points to SUBTYPE
       --  Defining_Identifier (Node1)
+      --  Null_Exclusion_Present (Flag11)
       --  Subtype_Indication (Node5)
       --  Generic_Parent_Type (Node4-Sem) (set for an actual derived type).
-      --  Exception_Junk (Flag11-Sem)
+      --  Exception_Junk (Flag8-Sem)
 
       -------------------------------
       -- 3.2.2  Subtype Indication --
@@ -1883,6 +2047,11 @@ package Sinfo is
       --  directly in the tree as a subtype mark. The N_Subtype_Indication
       --  node is used only if a constraint is present.
 
+      --  Note: [For Ada 2005 (AI-231)]: Because Ada 2005 extends this rule
+      --  with the null-exclusion part (see AI-231), we had to introduce a new
+      --  attribute in all the parents of subtype_indication nodes to indicate
+      --  if the null-exclusion is present.
+
       --  Note: the reason that this node has expression fields is that a
       --  subtype indication can appear as an operand of a membership test.
 
@@ -1932,7 +2101,9 @@ package Sinfo is
 
       --  OBJECT_DECLARATION ::=
       --    DEFINING_IDENTIFIER_LIST : [aliased] [constant]
-      --      SUBTYPE_INDICATION [:= EXPRESSION];
+      --      [NULL_EXCLUSION] SUBTYPE_INDICATION [:= EXPRESSION];
+      --  | DEFINING_IDENTIFIER_LIST : [aliased] [constant]
+      --      ACCESS_DEFINITION [:= EXPRESSION];
       --  | DEFINING_IDENTIFIER_LIST : [aliased] [constant]
       --      ARRAY_TYPE_DEFINITION [:= EXPRESSION];
       --  | SINGLE_TASK_DECLARATION
@@ -1952,6 +2123,13 @@ package Sinfo is
       --  Prev_Ids flags to preserve the original source form as described
       --  in the section on "Handling of Defining Identifier Lists".
 
+      --  The flag Has_Init_Expression is set if an initializing expression
+      --  is present. Normally it is set if and only if Expression contains
+      --  a non-empty value, but there is an exception to this. When the
+      --  initializing expression is an aggregate which requires explicit
+      --  assignments, the Expression field gets set to Empty, but this flag
+      --  is still set, so we don't forget we had an initializing expression.
+
       --  Note: if a range check is required for the initialization
       --  expression then the Do_Range_Check flag is set in the Expression,
       --  with the check being done against the type given by the object
@@ -1965,17 +2143,22 @@ package Sinfo is
       --  the Expression may not have the form of an aggregate (since this
       --  might cause the back end to generate separate assignments). It
       --  also cannot be a reference to an object marked as a true constant
-      --  (Is_True_Constant flag set), where the object is itself initalized
+      --  (Is_True_Constant flag set), where the object is itself initialized
       --  with an aggregate. If necessary the front end must generate an
       --  extra temporary (with Is_True_Constant set False), and initialize
       --  this temporary as required (the temporary itself is not atomic).
 
+      --  Note: there is not node kind for object definition. Instead, the
+      --  corresponding field holds a subtype indication, an array type
+      --  definition, or (Ada 2005, AI-406) an access definition.
+
       --  N_Object_Declaration
       --  Sloc points to first identifier
       --  Defining_Identifier (Node1)
       --  Aliased_Present (Flag4) set if ALIASED appears
       --  Constant_Present (Flag17) set if CONSTANT appears
-      --  Object_Definition (Node4) subtype indication/array type definition
+      --  Null_Exclusion_Present (Flag11)
+      --  Object_Definition (Node4) subtype indic./array type def./ access def.
       --  Expression (Node3) (set to Empty if not present)
       --  Handler_List_Entry (Node2-Sem)
       --  Corresponding_Generic_Association (Node5-Sem)
@@ -1983,9 +2166,9 @@ package Sinfo is
       --  Prev_Ids (Flag6) (set to False if no previous identifiers in list)
       --  No_Initialization (Flag13-Sem)
       --  Assignment_OK (Flag15-Sem)
-      --  Exception_Junk (Flag11-Sem)
-      --  Delay_Finalize_Attach (Flag14-Sem)
+      --  Exception_Junk (Flag8-Sem)
       --  Is_Subprogram_Descriptor (Flag16-Sem)
+      --  Has_Init_Expression (Flag14)
 
       -------------------------------------
       -- 3.3.1  Defining Identifier List --
@@ -2021,17 +2204,30 @@ package Sinfo is
       ----------------------------------
 
       --  DERIVED_TYPE_DEFINITION ::=
-      --    [abstract] new parent_SUBTYPE_INDICATION [RECORD_EXTENSION_PART]
+      --    [abstract] [limited] new [NULL_EXCLUSION] parent_SUBTYPE_INDICATION
+      --    [[and INTERFACE_LIST] RECORD_EXTENSION_PART]
 
-      --  Note: ABSTRACT, record extension part not permitted in Ada 83 mode
+      --  Note: ABSTRACT, LIMITED and record extension part are not permitted
+      --  in Ada 83 mode
 
       --  Note: a record extension part is required if ABSTRACT is present
 
       --  N_Derived_Type_Definition
       --  Sloc points to NEW
       --  Abstract_Present (Flag4)
+      --  Null_Exclusion_Present (Flag11) (set to False if not present)
       --  Subtype_Indication (Node5)
       --  Record_Extension_Part (Node3) (set to Empty if not present)
+      --  Limited_Present (Flag17)
+      --  Task_Present (Flag5) set in task interfaces
+      --  Protected_Present (Flag6) set in protected interfaces
+      --  Synchronized_Present (Flag7) set in interfaces
+      --  Interface_List (List2) (set to No_List if none)
+      --  Interface_Present (Flag16) set in abstract interfaces
+
+      --  Note: Task_Present, Protected_Present, Synchronized_Present,
+      --        Interface_List, and Interface_Present are used for abstract
+      --        interfaces (see comments for INTERFACE_TYPE_DEFINITION).
 
       ---------------------------
       -- 3.5  Range Constraint --
@@ -2131,7 +2327,7 @@ package Sinfo is
 
       --  INTEGER_TYPE_DEFINITION ::=
       --    SIGNED_INTEGER_TYPE_DEFINITION
-      --    MODULAR_TYPE_DEFINITION
+      --  | MODULAR_TYPE_DEFINITION
 
       -------------------------------------------
       -- 3.5.4  Signed Integer Type Definition --
@@ -2140,17 +2336,17 @@ package Sinfo is
       --  SIGNED_INTEGER_TYPE_DEFINITION ::=
       --    range static_SIMPLE_EXPRESSION .. static_SIMPLE_EXPRESSION
 
-      --  Note: the Low_Bound and High_Bound fields are set to Empty for
-      --  integer types defined in package Standard.
+      --  Note: the Low_Bound and High_Bound fields are set to Empty
+      --  for integer types defined in package Standard.
 
       --  N_Signed_Integer_Type_Definition
       --  Sloc points to RANGE
       --  Low_Bound (Node1)
       --  High_Bound (Node2)
 
-      -----------------------------------------
-      -- 3.5.4  Unsigned Range Specification --
-      -----------------------------------------
+      ------------------------------------
+      -- 3.5.4  Modular Type Definition --
+      ------------------------------------
 
       --  MODULAR_TYPE_DEFINITION ::= mod static_EXPRESSION
 
@@ -2208,9 +2404,6 @@ package Sinfo is
 
       --  Note: In Ada 83, the EXPRESSION must be a SIMPLE_EXPRESSION
 
-      --  Note: the Delta_Expression and Real_Range_Specification fields
-      --  are set to Empty for fixed point types declared in Standard.
-
       --  N_Ordinary_Fixed_Point_Definition
       --  Sloc points to DELTA
       --  Delta_Expression (Node3)
@@ -2268,8 +2461,7 @@ package Sinfo is
       --  N_Unconstrained_Array_Definition
       --  Sloc points to ARRAY
       --  Subtype_Marks (List2)
-      --  Aliased_Present (Flag4) from component definition
-      --  Subtype_Indication (Node5) from component definition
+      --  Component_Definition (Node4)
 
       -----------------------------------
       -- 3.6  Index Subtype Definition --
@@ -2297,8 +2489,7 @@ package Sinfo is
       --  N_Constrained_Array_Definition
       --  Sloc points to ARRAY
       --  Discrete_Subtype_Definitions (List2)
-      --  Aliased_Present (Flag4) from component definition
-      --  Subtype_Indication (Node5) from component definition
+      --  Component_Definition (Node4)
 
       --------------------------------------
       -- 3.6  Discrete Subtype Definition --
@@ -2311,17 +2502,24 @@ package Sinfo is
       -- 3.6  Component Definition --
       -------------------------------
 
-      --  COMPONENT_DEFINITION ::= [aliased] SUBTYPE_INDICATION
-
-      --  There is no explicit node in the tree for a component definition.
-      --  Instead the subtype indication appears directly, and the ALIASED
-      --  indication (Aliased_Present flag) is in the parent node.
+      --  COMPONENT_DEFINITION ::=
+      --    [aliased] [NULL_EXCLUSION] SUBTYPE_INDICATION | ACCESS_DEFINITION
 
       --  Note: although the syntax does not permit a component definition to
       --  be an anonymous array (and the parser will diagnose such an attempt
       --  with an appropriate message), it is possible for anonymous arrays
       --  to appear as component definitions. The semantics and back end handle
       --  this case properly, and the expander in fact generates such cases.
+      --  Access_Definition is an optional field that gives support to
+      --  Ada 2005 (AI-230). The parser generates nodes that have either the
+      --  Subtype_Indication field or else the Access_Definition field.
+
+      --  N_Component_Definition
+      --  Sloc points to ALIASED, ACCESS or to first token of subtype mark
+      --  Aliased_Present (Flag4)
+      --  Null_Exclusion_Present (Flag11)
+      --  Subtype_Indication (Node5) (set to Empty if not present)
+      --  Access_Definition (Node3) (set to Empty if not present)
 
       -----------------------------
       -- 3.6.1  Index Constraint --
@@ -2376,7 +2574,7 @@ package Sinfo is
       -------------------------------------
 
       --  DISCRIMINANT_SPECIFICATION ::=
-      --    DEFINING_IDENTIFIER_LIST : SUBTYPE_MARK
+      --    DEFINING_IDENTIFIER_LIST : [NULL_EXCLUSION] SUBTYPE_MARK
       --      [:= DEFAULT_EXPRESSION]
       --  | DEFINING_IDENTIFIER_LIST : ACCESS_DEFINITION
       --      [:= DEFAULT_EXPRESSION]
@@ -2392,8 +2590,8 @@ package Sinfo is
       --  N_Discriminant_Specification
       --  Sloc points to first identifier
       --  Defining_Identifier (Node1)
-      --  Discriminant_Type (Node5) subtype mark or
-      --    access parameter definition
+      --  Null_Exclusion_Present (Flag11)
+      --  Discriminant_Type (Node5) subtype mark or access parameter definition
       --  Expression (Node3) (set to Empty if no default expression)
       --  More_Ids (Flag5) (set to False if no more identifiers in list)
       --  Prev_Ids (Flag6) (set to False if no previous identifiers in list)
@@ -2479,6 +2677,15 @@ package Sinfo is
       --  Limited_Present (Flag17)
       --  Component_List (Node1) empty in null record case
       --  Null_Present (Flag13) set in null record case
+      --  Task_Present (Flag5) set in task interfaces
+      --  Protected_Present (Flag6) set in protected interfaces
+      --  Synchronized_Present (Flag7) set in interfaces
+      --  Interface_Present (Flag16) set in abstract interfaces
+      --  Interface_List (List2) (set to No_List if none)
+
+      --  Note: Task_Present, Protected_Present, Synchronized _Present,
+      --        Interface_List and Interface_Present are used for abstract
+      --        interfaces (see comments for INTERFACE_TYPE_DEFINITION).
 
       -------------------------
       -- 3.8  Component List --
@@ -2530,8 +2737,7 @@ package Sinfo is
       --  N_Component_Declaration
       --  Sloc points to first identifier
       --  Defining_Identifier (Node1)
-      --  Aliased_Present (Flag4) from component definition
-      --  Subtype_Indication (Node5) from component definition
+      --  Component_Definition (Node4)
       --  Expression (Node3) (set to Empty if no default expression)
       --  More_Ids (Flag5) (set to False if no more identifiers in list)
       --  Prev_Ids (Flag6) (set to False if no previous identifiers in list)
@@ -2606,6 +2812,19 @@ package Sinfo is
 
       --  Note: record extension parts are not permitted in Ada 83 mode
 
+      --------------------------------------
+      -- 3.9.4  Interface Type Definition --
+      --------------------------------------
+
+      --  INTERFACE_TYPE_DEFINITION ::=
+      --    [limited | task | protected | synchronized]
+      --    interface [interface_list]
+
+      --  Note: Interfaces are implemented with N_Record_Definition and
+      --        N_Derived_Type_Definition nodes because most of the support
+      --        for the analysis of abstract types has been reused to
+      --        analyze abstract interfaces.
+
       ----------------------------------
       -- 3.10  Access Type Definition --
       ----------------------------------
@@ -2614,16 +2833,24 @@ package Sinfo is
       --    ACCESS_TO_OBJECT_DEFINITION
       --  | ACCESS_TO_SUBPROGRAM_DEFINITION
 
+      --------------------------
+      -- 3.10  Null Exclusion --
+      --------------------------
+
+      --  NULL_EXCLUSION ::= not null
+
       ---------------------------------------
       -- 3.10  Access To Object Definition --
       ---------------------------------------
 
       --  ACCESS_TO_OBJECT_DEFINITION ::=
-      --    access [GENERAL_ACCESS_MODIFIER] SUBTYPE_INDICATION
+      --    [NULL_EXCLUSION] access [GENERAL_ACCESS_MODIFIER]
+      --    SUBTYPE_INDICATION
 
       --  N_Access_To_Object_Definition
       --  Sloc points to ACCESS
       --  All_Present (Flag15)
+      --  Null_Exclusion_Present (Flag11)
       --  Subtype_Indication (Node5)
       --  Constant_Present (Flag17)
 
@@ -2644,38 +2871,49 @@ package Sinfo is
       -------------------------------------------
 
       --  ACCESS_TO_SUBPROGRAM_DEFINITION
-      --    access [protected] procedure PARAMETER_PROFILE
-      --  | access [protected] function PARAMETER_AND_RESULT_PROFILE
+      --    [NULL_EXCLUSION] access [protected] procedure PARAMETER_PROFILE
+      --  | [NULL_EXCLUSION] access [protected] function
+      --    PARAMETER_AND_RESULT_PROFILE
 
       --  Note: access to subprograms are not permitted in Ada 83 mode
 
       --  N_Access_Function_Definition
       --  Sloc points to ACCESS
-      --  Protected_Present (Flag15)
+      --  Null_Exclusion_Present (Flag11)
+      --  Protected_Present (Flag6)
       --  Parameter_Specifications (List3) (set to No_List if no formal part)
-      --  Subtype_Mark (Node4) result subtype
+      --  Result_Definition (Node4) result subtype (subtype mark or access def)
 
       --  N_Access_Procedure_Definition
       --  Sloc points to ACCESS
-      --  Protected_Present (Flag15)
+      --  Null_Exclusion_Present (Flag11)
+      --  Protected_Present (Flag6)
       --  Parameter_Specifications (List3) (set to No_List if no formal part)
 
       -----------------------------
       -- 3.10  Access Definition --
       -----------------------------
 
-      --  ACCESS_DEFINITION ::= access SUBTYPE_MARK
+      --  ACCESS_DEFINITION ::=
+      --    [NULL_EXCLUSION] access [GENERAL_ACCESS_MODIFIER] SUBTYPE_MARK
+      --  | ACCESS_TO_SUBPROGRAM_DEFINITION
+
+      --  Note: access to subprograms are an Ada 2005 (AI-254) extension
 
       --  N_Access_Definition
       --  Sloc points to ACCESS
+      --  Null_Exclusion_Present (Flag11)
+      --  All_Present (Flag15)
+      --  Constant_Present (Flag17)
       --  Subtype_Mark (Node4)
+      --  Access_To_Subprogram_Definition (Node3) (set to Empty if not present)
 
       -----------------------------------------
       -- 3.10.1  Incomplete Type Declaration --
       -----------------------------------------
 
       --  INCOMPLETE_TYPE_DECLARATION ::=
-      --    type DEFINING_IDENTIFIER [DISCRIMINANT_PART];
+      --    type DEFINING_IDENTIFIER [DISCRIMINANT_PART] [IS TAGGED];
 
       --  N_Incomplete_Type_Declaration
       --  Sloc points to TYPE
@@ -2684,6 +2922,7 @@ package Sinfo is
       --   discriminant part, or if the discriminant part is an
       --   unknown discriminant part)
       --  Unknown_Discriminants_Present (Flag13) set if (<>) discriminant
+      --  Tagged_Present (Flag15)
 
       ----------------------------
       -- 3.11  Declarative Part --
@@ -2755,6 +2994,7 @@ package Sinfo is
       --  N_Explicit_Dereference
       --  Sloc points to ALL
       --  Prefix (Node3)
+      --  Actual_Designated_Subtype (Node4-Sem)
       --  plus fields for expression
 
       -------------------------------
@@ -2869,11 +3109,11 @@ package Sinfo is
       --  i.e. digits, access, delta, range, the Attribute_Name field contains
       --  the corresponding name, even though no identifier is involved.
 
-      --  The flag OK_For_Stream is used in generated code to indicate that
-      --  a stream attribute is permissible for a limited type, and results
-      --  in the use of the stream attribute for the underlying full type,
-      --  or in the case of a protected type, the components (including any
-      --  disriminants) are merely streamed in order.
+      --  Note: the generated code may contain stream attributes applied to
+      --  limited types for which no stream routines exist officially. In such
+      --  case, the result is to use the stream attribute for the underlying
+      --  full type, or in the case of a protected type, the components
+      --  (including any discriminants) are merely streamed in order.
 
       --  See Exp_Attr for a complete description of which attributes are
       --  passed onto Gigi, and which are handled entirely by the front end.
@@ -2882,6 +3122,10 @@ package Sinfo is
       --  a non-standard enumeration type or a nonzero/zero semantics
       --  boolean type, so the value is simply the stored representation.
 
+      --  Gigi requirement: For the Mechanism_Code attribute, if the prefix
+      --  references a subprogram that is a renaming, then the front end must
+      --  rewrite the attribute to refer directly to the renamed entity.
+
       --  Note: In generated code, the Address and Unrestricted_Access
       --  attributes can be applied to any expression, and the meaning is
       --  to create an object containing the value (the object is in the
@@ -2900,7 +3144,6 @@ package Sinfo is
       --  Associated_Node (Node4-Sem)
       --  Do_Overflow_Check (Flag17-Sem)
       --  Redundant_Use (Flag13-Sem)
-      --  OK_For_Stream (Flag4-Sem)
       --  Must_Be_Byte_Aligned (Flag14)
       --  plus fields for expression
 
@@ -2961,6 +3204,7 @@ package Sinfo is
       --  Static_Processing_OK (Flag4-Sem)
       --  Compile_Time_Known_Aggregate (Flag18-Sem)
       --  Expansion_Delayed (Flag11-Sem)
+      --  Has_Self_Reference (Flag13-Sem)
       --  plus fields for expression
 
       --  Note: this structure is used for both record and array aggregates
@@ -2971,12 +3215,15 @@ package Sinfo is
       --  syntax. In particular, for a record aggregate, the expressions
       --  field will be set if there are positional associations.
 
+      --  Note: N_Aggregate is not used for all aggregates; in particular,
+      --  there is a separate node kind for extension aggregates.
+
       --  Note: gigi/gcc can handle array aggregates correctly providing that
       --  they are entirely positional, and the array subtype involved has a
       --  known at compile time length and is not bit packed, or a convention
       --  Fortran array with more than one dimension. If these conditions
       --  are not met, then the front end must translate the aggregate into
-      --  an appropriate set  of assignments into a temporary.
+      --  an appropriate set of assignments into a temporary.
 
       --  Note: for the record aggregate case, gigi/gcc can handle all cases
       --  of record aggregates, including those for packed, and rep-claused
@@ -3016,19 +3263,19 @@ package Sinfo is
       --  list of selector names in the record aggregate case, or a list of
       --  discrete choices in the array aggregate case or an N_Others_Choice
       --  node (which appears as a singleton list). Box_Present gives support
-      --  to Ada0Y (AI-287).
+      --  to Ada 2005 (AI-287).
 
-      ------------------------------------
-      --  4.3.1  Commponent Choice List --
-      ------------------------------------
+      ----------------------------------
+      -- 4.3.1  Component Choice List --
+      ----------------------------------
 
       --  COMPONENT_CHOICE_LIST ::=
       --    component_SELECTOR_NAME {| component_SELECTOR_NAME}
       --  | others
 
-      --  The entries of a component choice list appear in the Choices list
-      --  of the associated N_Component_Association, as either selector
-      --  names, or as an N_Others_Choice node.
+      --  The entries of a component choice list appear in the Choices list of
+      --  the associated N_Component_Association, as either selector names, or
+      --  as an N_Others_Choice node.
 
       --------------------------------
       -- 4.3.2  Extension Aggregate --
@@ -3047,6 +3294,7 @@ package Sinfo is
       --  Component_Associations (List2) (set to No_List if none)
       --  Null_Record_Present (Flag17)
       --  Expansion_Delayed (Flag11-Sem)
+      --  Has_Self_Reference (Flag13-Sem)
       --  plus fields for expression
 
       --------------------------
@@ -3114,7 +3362,7 @@ package Sinfo is
       --  No nodes are generated for any of these constructs. Instead, the
       --  node for the operator appears directly. When we refer to an
       --  expression in this description, we mean any of the possible
-      --  consistuent components of an expression (e.g. identifier is
+      --  constituent components of an expression (e.g. identifier is
       --  an example of an expression).
 
       ------------------
@@ -3146,8 +3394,8 @@ package Sinfo is
       --  subexpression node (it is actually present in all nodes, but only
       --  used in subexpression nodes). This count records the number of
       --  levels of parentheses. If the number of levels in the source exceeds
-      --  the maximum accomodated by this count, then the count is simply left
-      --  at the maximum value. This means that there are some pathalogical
+      --  the maximum accommodated by this count, then the count is simply left
+      --  at the maximum value. This means that there are some pathological
       --  cases of failure to detect conformance failures (e.g. an expression
       --  with 500 levels of parens will conform with one with 501 levels),
       --  but we do not need to lose sleep over this.
@@ -3457,7 +3705,7 @@ package Sinfo is
       --------------------
 
       --  ALLOCATOR ::=
-      --    new SUBTYPE_INDICATION | new QUALIFIED_EXPRESSION
+      --    new [NULL_EXCLUSION] SUBTYPE_INDICATION | new QUALIFIED_EXPRESSION
 
       --  Sprint syntax (when storage pool present)
       --    new xxx (storage_pool = pool)
@@ -3466,9 +3714,13 @@ package Sinfo is
       --  Sloc points to NEW
       --  Expression (Node3) subtype indication or qualified expression
       --  Storage_Pool (Node1-Sem)
-      --  Procedure_To_Call (Node4-Sem)
+      --  Procedure_To_Call (Node2-Sem)
+      --  Coextensions (Elist4-Sem)
+      --  Null_Exclusion_Present (Flag11)
       --  No_Initialization (Flag13-Sem)
+      --  Is_Static_Coextension (Flag14-Sem)
       --  Do_Storage_Check (Flag17-Sem)
+      --  Is_Dynamic_Coextension (Flag18-Sem)
       --  plus fields for expression
 
       ---------------------------------
@@ -3480,7 +3732,7 @@ package Sinfo is
       --  Note: Although the parser will not accept a declaration as a
       --  statement, the semantic analyzer may insert declarations (e.g.
       --  declarations of implicit types needed for execution of other
-      --  statements) into a sequence of statements, so the code genmerator
+      --  statements) into a sequence of statements, so the code generator
       --  should be prepared to accept a declaration where a statement is
       --  expected. Note also that pragmas can appear as statements.
 
@@ -3501,12 +3753,12 @@ package Sinfo is
       -- 5.1  Simple Statement --
       ---------------------------
 
-      --  SIMPLE_STATEMENT ::=      NULL_STATEMENT
-      --  | ASSIGNMENT_STATEMENT  | EXIT_STATEMENT
-      --  | GOTO_STATEMENT        | PROCEDURE_CALL_STATEMENT
-      --  | RETURN_STATEMENT      | ENTRY_CALL_STATEMENT
-      --  | REQUEUE_STATEMENT     | DELAY_STATEMENT
-      --  | ABORT_STATEMENT       | RAISE_STATEMENT
+      --  SIMPLE_STATEMENT ::=        NULL_STATEMENT
+      --  | ASSIGNMENT_STATEMENT    | EXIT_STATEMENT
+      --  | GOTO_STATEMENT          | PROCEDURE_CALL_STATEMENT
+      --  | SIMPLE_RETURN_STATEMENT | ENTRY_CALL_STATEMENT
+      --  | REQUEUE_STATEMENT       | DELAY_STATEMENT
+      --  | ABORT_STATEMENT         | RAISE_STATEMENT
       --  | CODE_STATEMENT
 
       -----------------------------
@@ -3514,9 +3766,10 @@ package Sinfo is
       -----------------------------
 
       --  COMPOUND_STATEMENT ::=
-      --    IF_STATEMENT         | CASE_STATEMENT
-      --  | LOOP_STATEMENT       | BLOCK_STATEMENT
-      --  | ACCEPT_STATEMENT     | SELECT_STATEMENT
+      --    IF_STATEMENT              | CASE_STATEMENT
+      --  | LOOP_STATEMENT            | BLOCK_STATEMENT
+      --  | EXTENDED_RETURN_STATEMENT
+      --  | ACCEPT_STATEMENT          | SELECT_STATEMENT
 
       -------------------------
       -- 5.1  Null Statement --
@@ -3541,13 +3794,13 @@ package Sinfo is
       --  N_Label
       --  Sloc points to <<
       --  Identifier (Node1) direct name of statement identifier
-      --  Exception_Junk (Flag11-Sem)
+      --  Exception_Junk (Flag8-Sem)
 
       -------------------------------
       -- 5.1  Statement Identifier --
       -------------------------------
 
-      --  STATEMENT_INDENTIFIER ::= DIRECT_NAME
+      --  STATEMENT_IDENTIFIER ::= DIRECT_NAME
 
       --  The IDENTIFIER of a STATEMENT_IDENTIFIER shall be an identifier
       --  (not an OPERATOR_SYMBOL)
@@ -3578,7 +3831,7 @@ package Sinfo is
       --  the Expression may not have the form of an aggregate (since this
       --  might cause the back end to generate separate assignments). It
       --  also cannot be a reference to an object marked as a true constant
-      --  (Is_True_Constant flag set), where the object is itself initalized
+      --  (Is_True_Constant flag set), where the object is itself initialized
       --  with an aggregate. If necessary the front end must generate an
       --  extra temporary (with Is_True_Constant set False), and initialize
       --  this temporary as required (the temporary itself is not atomic).
@@ -3732,19 +3985,24 @@ package Sinfo is
 
       --  Note that the occurrence of a block identifier is not a defining
       --  identifier, but rather a referencing occurrence. The defining
-      --  occurrence is in the implicit label declaration which occurs in
-      --  the innermost enclosing block.
+      --  occurrence is an E_Block entity declared by the implicit label
+      --  declaration which occurs in the innermost enclosing block statement
+      --  or body; the block identifier denotes that E_Block.
 
-      --  Note: there is always a block statement identifier present in
-      --  the tree, even if none was given in the source. In the case where
-      --  no block identifier is given in the source, the parser creates
-      --  a name of the form _Block_n, where n is a decimal integer (the
-      --  two underlines ensure that the block names created in this manner
-      --  do not conflict with any user defined identifiers), and the flag
-      --  Has_Created_Identifier is set to True. The only exception to the
-      --  rule that all loop statement nodes have identifiers occurs for
-      --  blocks constructed by the expander, and the semantic analyzer
-      --  creates and supplies dummy names for the blocks).
+      --  For block statements that come from source code, there is always a
+      --  block statement identifier present in the tree, denoting an
+      --  E_Block. In the case where no block identifier is given in the
+      --  source, the parser creates a name of the form B_n, where n is a
+      --  decimal integer, and the flag Has_Created_Identifier is set to
+      --  True. Blocks constructed by the expander usually have no identifier,
+      --  and no corresponding entity.
+
+      --  Note: the block statement created for an extended return statement
+      --  has an entity, and this entity is an E_Return_Statement, rather than
+      --  the usual E_Block.
+
+      --  Note: Exception_Junk is set for the wrapping blocks created during
+      --  local raise optimization (Exp_Ch11.Expand_Local_Exception_Handlers).
 
       --  N_Block_Statement
       --  Sloc points to DECLARE or BEGIN
@@ -3756,6 +4014,7 @@ package Sinfo is
       --  Has_Created_Identifier (Flag15)
       --  Is_Task_Allocation_Block (Flag6)
       --  Is_Asynchronous_Call_Block (Flag7)
+      --  Exception_Junk (Flag8-Sem)
 
       -------------------------
       -- 5.7  Exit Statement --
@@ -3781,7 +4040,7 @@ package Sinfo is
       --  N_Goto_Statement
       --  Sloc points to GOTO
       --  Name (Node2)
-      --  Exception_Junk (Flag11-Sem)
+      --  Exception_Junk (Flag8-Sem)
 
       ---------------------------------
       -- 6.1  Subprogram Declaration --
@@ -3812,8 +4071,10 @@ package Sinfo is
       -----------------------------------
 
       --  SUBPROGRAM_SPECIFICATION ::=
+      --    [[not] overriding]
       --    procedure DEFINING_PROGRAM_UNIT_NAME PARAMETER_PROFILE
-      --  | function DEFINING_DESIGNATOR PARAMETER_AND_RESULT_PROFILE
+      --  | [[not] overriding]
+      --    function DEFINING_DESIGNATOR PARAMETER_AND_RESULT_PROFILE
 
       --  Note: there are no separate nodes for the profiles, instead the
       --  information appears directly in the following nodes.
@@ -3823,8 +4084,11 @@ package Sinfo is
       --  Defining_Unit_Name (Node1) (the designator)
       --  Elaboration_Boolean (Node2-Sem)
       --  Parameter_Specifications (List3) (set to No_List if no formal part)
-      --  Subtype_Mark (Node4) for return type
+      --  Null_Exclusion_Present (Flag11)
+      --  Result_Definition (Node4) for result subtype
       --  Generic_Parent (Node5-Sem)
+      --  Must_Override (Flag14) set if overriding indicator present
+      --  Must_Not_Override (Flag15) set if not_overriding indicator present
 
       --  N_Procedure_Specification
       --  Sloc points to PROCEDURE
@@ -3832,6 +4096,11 @@ package Sinfo is
       --  Elaboration_Boolean (Node2-Sem)
       --  Parameter_Specifications (List3) (set to No_List if no formal part)
       --  Generic_Parent (Node5-Sem)
+      --  Null_Present (Flag13) set for null procedure case (Ada 2005 feature)
+      --  Must_Override (Flag14) set if overriding indicator present
+      --  Must_Not_Override (Flag15) set if not_overriding indicator present
+
+      --  Note: overriding indicator is an Ada 2005 feature
 
       ---------------------
       -- 6.1  Designator --
@@ -3851,7 +4120,7 @@ package Sinfo is
       --   parent library unit package name is present.
       --  Identifier (Node1)
 
-      --  Note that the identifier can also be an operator symbol here.
+      --  Note that the identifier can also be an operator symbol here
 
       ------------------------------
       -- 6.1  Defining Designator --
@@ -3944,7 +4213,9 @@ package Sinfo is
       -- 6.1  Parameter and Result Profile --
       ---------------------------------------
 
-      --  PARAMETER_AND_RESULT_PROFILE ::= [FORMAL_PART] return SUBTYPE_MARK
+      --  PARAMETER_AND_RESULT_PROFILE ::=
+      --    [FORMAL_PART] return [NULL_EXCLUSION] SUBTYPE_MARK
+      --  | [FORMAL_PART] return ACCESS_DEFINITION
 
       --  There is no explicit node in the tree for a parameter and result
       --  profile. Instead the information appears directly in the parent.
@@ -3961,7 +4232,7 @@ package Sinfo is
       ----------------------------------
 
       --  PARAMETER_SPECIFICATION ::=
-      --    DEFINING_IDENTIFIER_LIST : MODE SUBTYPE_MARK
+      --    DEFINING_IDENTIFIER_LIST : MODE [NULL_EXCLUSION] SUBTYPE_MARK
       --      [:= DEFAULT_EXPRESSION]
       --  | DEFINING_IDENTIFIER_LIST : ACCESS_DEFINITION
       --      [:= DEFAULT_EXPRESSION]
@@ -3979,6 +4250,7 @@ package Sinfo is
       --  Defining_Identifier (Node1)
       --  In_Present (Flag15)
       --  Out_Present (Flag17)
+      --  Null_Exclusion_Present (Flag11)
       --  Parameter_Type (Node2) subtype mark or access definition
       --  Expression (Node3) (set to Empty if no default expression present)
       --  Do_Accessibility_Check (Flag13-Sem)
@@ -4019,8 +4291,10 @@ package Sinfo is
       --  Do_Storage_Check (Flag17-Sem)
       --  Has_Priority_Pragma (Flag6-Sem)
       --  Is_Protected_Subprogram_Body (Flag7-Sem)
+      --  Is_Entry_Barrier_Function (Flag8-Sem)
       --  Is_Task_Master (Flag5-Sem)
       --  Was_Originally_Stub (Flag13-Sem)
+      --  Has_Relative_Deadline_Pragma (Flag9-Sem)
 
       -----------------------------------
       -- 6.4  Procedure Call Statement --
@@ -4043,6 +4317,7 @@ package Sinfo is
       --  First_Named_Actual (Node4-Sem)
       --  Controlling_Argument (Node1-Sem) (set to Empty if not dispatching)
       --  Do_Tag_Check (Flag13-Sem)
+      --  No_Elaboration_Check (Flag14-Sem)
       --  Parameter_List_Truncated (Flag17-Sem)
       --  ABE_Is_Certain (Flag18-Sem)
       --  plus fields for expression
@@ -4072,7 +4347,9 @@ package Sinfo is
       --   actual parameter part)
       --  First_Named_Actual (Node4-Sem)
       --  Controlling_Argument (Node1-Sem) (set to Empty if not dispatching)
+      --  Is_Expanded_Build_In_Place_Call (Flag11-Sem)
       --  Do_Tag_Check (Flag13-Sem)
+      --  No_Elaboration_Check (Flag14-Sem)
       --  Parameter_List_Truncated (Flag17-Sem)
       --  ABE_Is_Certain (Flag18-Sem)
       --  plus fields for expression
@@ -4098,8 +4375,7 @@ package Sinfo is
 
       --  N_Parameter_Association
       --  Sloc points to formal parameter
-      --  Selector_Name (Node2) (always non-Empty, since this node is
-      --   only used if a formal parameter selector name is present)
+      --  Selector_Name (Node2) (always non-Empty)
       --  Explicit_Actual_Parameter (Node3)
       --  Next_Named_Actual (Node4-Sem)
 
@@ -4113,19 +4389,70 @@ package Sinfo is
       -- 6.5  Return Statement --
       ---------------------------
 
-      --  RETURN_STATEMENT ::= return [EXPRESSION];
+      --  RETURN_STATEMENT ::= return [EXPRESSION]; -- Ada 95
+
+      --  In Ada 2005, we have:
+
+      --  SIMPLE_RETURN_STATEMENT ::= return [EXPRESSION];
+
+      --  EXTENDED_RETURN_STATEMENT ::=
+      --    return DEFINING_IDENTIFIER : [aliased] RETURN_SUBTYPE_INDICATION
+      --                                           [:= EXPRESSION] [do
+      --      HANDLED_SEQUENCE_OF_STATEMENTS
+      --    end return];
+
+      --  RETURN_SUBTYPE_INDICATION ::= SUBTYPE_INDICATION | ACCESS_DEFINITION
+
+      --  So in Ada 2005, RETURN_STATEMENT is no longer a nonterminal, but
+      --  "return statement" is defined in 6.5 to mean a
+      --  SIMPLE_RETURN_STATEMENT or an EXTENDED_RETURN_STATEMENT.
 
       --  N_Return_Statement
       --  Sloc points to RETURN
+      --  Return_Statement_Entity (Node5-Sem)
       --  Expression (Node3) (set to Empty if no expression present)
       --  Storage_Pool (Node1-Sem)
-      --  Procedure_To_Call (Node4-Sem)
+      --  Procedure_To_Call (Node2-Sem)
+      --  Do_Tag_Check (Flag13-Sem)
+      --  By_Ref (Flag5-Sem)
+      --  Comes_From_Extended_Return_Statement (Flag18-Sem)
+
+      --  N_Return_Statement represents a simple_return_statement, and is
+      --  renamed to be N_Simple_Return_Statement below. Clients should refer
+      --  to N_Simple_Return_Statement. We retain N_Return_Statement because
+      --  that's how gigi knows it. See also renaming of Make_Return_Statement
+      --  as Make_Simple_Return_Statement in Sem_Util.
+
+      --  Note: Return_Statement_Entity points to an E_Return_Statement
+
+      --  If a range check is required, then Do_Range_Check is set on the
+      --  Expression. The check is against the return subtype of the function.
+
+      --  N_Extended_Return_Statement
+      --  Sloc points to RETURN
+      --  Return_Statement_Entity (Node5-Sem)
+      --  Return_Object_Declarations (List3)
+      --  Handled_Statement_Sequence (Node4) (set to Empty if not present)
+      --  Storage_Pool (Node1-Sem)
+      --  Procedure_To_Call (Node2-Sem)
       --  Do_Tag_Check (Flag13-Sem)
-      --  Return_Type (Node2-Sem)
       --  By_Ref (Flag5-Sem)
 
-      --  Note: if a range check is required, then Do_Range_Check is set
-      --  on the Expression. The range check is against Return_Type.
+      --  Note: Return_Statement_Entity points to an E_Return_Statement.
+      --  Note that Return_Object_Declarations is a list containing the
+      --  N_Object_Declaration -- see comment on this field above.
+      --  The declared object will have Is_Return_Object = True.
+      --  There is no such syntactic category as return_object_declaration
+      --  in the RM. Return_Object_Declarations represents this portion of
+      --  the syntax for EXTENDED_RETURN_STATEMENT:
+      --      DEFINING_IDENTIFIER : [aliased] RETURN_SUBTYPE_INDICATION
+      --                                      [:= EXPRESSION]
+
+      --  There are two entities associated with an extended_return_statement:
+      --  the Return_Statement_Entity represents the statement itself, and the
+      --  Defining_Identifier of the Object_Declaration in
+      --  Return_Object_Declarations represents the object being
+      --  returned. N_Simple_Return_Statement has only the former.
 
       ------------------------------
       -- 7.1  Package Declaration --
@@ -4215,9 +4542,12 @@ package Sinfo is
 
       --  PRIVATE_EXTENSION_DECLARATION ::=
       --    type DEFINING_IDENTIFIER [DISCRIMINANT_PART] is
-      --      [abstract] new ancestor_SUBTYPE_INDICATION with private;
+      --      [abstract] [limited | synchronized]
+      --        new ancestor_SUBTYPE_INDICATION [and INTERFACE_LIST]
+      --           with private;
 
-      --  Note: private extension declarations are not allowed in Ada 83 mode
+      --  Note: LIMITED, and private extension declarations are not allowed
+      --        in Ada 83 mode.
 
       --  N_Private_Extension_Declaration
       --  Sloc points to TYPE
@@ -4226,7 +4556,10 @@ package Sinfo is
       --   discriminant part)
       --  Unknown_Discriminants_Present (Flag13) set if (<>) discriminant
       --  Abstract_Present (Flag4)
+      --  Limited_Present (Flag17)
+      --  Synchronized_Present (Flag7)
       --  Subtype_Indication (Node5)
+      --  Interface_List (List2) (set to No_List if none)
 
       ---------------------
       -- 8.4  Use Clause --
@@ -4276,12 +4609,21 @@ package Sinfo is
       --------------------------------------
 
       --  OBJECT_RENAMING_DECLARATION ::=
-      --    DEFINING_IDENTIFIER : SUBTYPE_MARK renames object_NAME;
+      --    DEFINING_IDENTIFIER :
+      --      [NULL_EXCLUSION] SUBTYPE_MARK renames object_NAME;
+      --  | DEFINING_IDENTIFIER :
+      --      ACCESS_DEFINITION renames object_NAME;
+
+      --  Note: Access_Definition is an optional field that gives support to
+      --  Ada 2005 (AI-230). The parser generates nodes that have either the
+      --  Subtype_Indication field or else the Access_Definition field.
 
       --  N_Object_Renaming_Declaration
       --  Sloc points to first identifier
       --  Defining_Identifier (Node1)
-      --  Subtype_Mark (Node4)
+      --  Null_Exclusion_Present (Flag11) (set to False if not present)
+      --  Subtype_Mark (Node4) (set to Empty if not present)
+      --  Access_Definition (Node3) (set to Empty if not present)
       --  Name (Node2)
       --  Corresponding_Generic_Association (Node5-Sem)
 
@@ -4323,6 +4665,8 @@ package Sinfo is
       --  Name (Node2)
       --  Parent_Spec (Node4-Sem)
       --  Corresponding_Spec (Node5-Sem)
+      --  Corresponding_Formal_Spec (Node3-Sem)
+      --  From_Default (Flag6-Sem)
 
       -----------------------------------------
       -- 8.5.5  Generic Renaming Declaration --
@@ -4360,14 +4704,14 @@ package Sinfo is
 
       --  TASK_TYPE_DECLARATION ::=
       --    task type DEFINING_IDENTIFIER [KNOWN_DISCRIMINANT_PART]
-      --      [is TASK_DEFINITITION];
+      --      [is [new INTERFACE_LIST with] TASK_DEFINITION];
 
       --  N_Task_Type_Declaration
       --  Sloc points to TASK
       --  Defining_Identifier (Node1)
-      --  Task_Body_Procedure (Node2-Sem)
       --  Discriminant_Specifications (List4) (set to No_List if no
       --   discriminant part)
+      --  Interface_List (List2) (set to No_List if none)
       --  Task_Definition (Node3) (set to Empty if not present)
       --  Corresponding_Body (Node5-Sem)
 
@@ -4376,11 +4720,13 @@ package Sinfo is
       ----------------------------------
 
       --  SINGLE_TASK_DECLARATION ::=
-      --    task DEFINING_IDENTIFIER [is TASK_DEFINITION];
+      --    task DEFINING_IDENTIFIER
+      --      [is [new INTERFACE_LIST with] TASK_DEFINITION];
 
       --  N_Single_Task_Declaration
       --  Sloc points to TASK
       --  Defining_Identifier (Node1)
+      --  Interface_List (List2) (set to No_List if none)
       --  Task_Definition (Node3) (set to Empty if not present)
 
       --------------------------
@@ -4405,6 +4751,7 @@ package Sinfo is
       --  Has_Storage_Size_Pragma (Flag5-Sem)
       --  Has_Task_Info_Pragma (Flag7-Sem)
       --  Has_Task_Name_Pragma (Flag8-Sem)
+      --  Has_Relative_Deadline_Pragma (Flag9-Sem)
 
       --------------------
       -- 9.1  Task Item --
@@ -4423,7 +4770,7 @@ package Sinfo is
       --      HANDLED_SEQUENCE_OF_STATEMENTS
       --    end [task_IDENTIFIER];
 
-      --  Gigi restriction: This node never appears.
+      --  Gigi restriction: This node never appears
 
       --  N_Task_Body
       --  Sloc points to TASK
@@ -4441,7 +4788,7 @@ package Sinfo is
 
       --  PROTECTED_TYPE_DECLARATION ::=
       --    protected type DEFINING_IDENTIFIER [KNOWN_DISCRIMINANT_PART]
-      --      is PROTECTED_DEFINITION;
+      --      is [new INTERFACE_LIST with] PROTECTED_DEFINITION;
 
       --  Note: protected type declarations are not permitted in Ada 83 mode
 
@@ -4450,6 +4797,7 @@ package Sinfo is
       --  Defining_Identifier (Node1)
       --  Discriminant_Specifications (List4) (set to No_List if no
       --   discriminant part)
+      --  Interface_List (List2) (set to No_List if none)
       --  Protected_Definition (Node3)
       --  Corresponding_Body (Node5-Sem)
 
@@ -4458,13 +4806,15 @@ package Sinfo is
       ---------------------------------------
 
       --  SINGLE_PROTECTED_DECLARATION ::=
-      --    protected DEFINING_IDENTIFIER is PROTECTED_DEFINITION;
+      --    protected DEFINING_IDENTIFIER
+      --      is [new INTERFACE_LIST with] PROTECTED_DEFINITION;
 
       --  Note: single protected declarations are not allowed in Ada 83 mode
 
       --  N_Single_Protected_Declaration
       --  Sloc points to PROTECTED
       --  Defining_Identifier (Node1)
+      --  Interface_List (List2) (set to No_List if none)
       --  Protected_Definition (Node3)
 
       -------------------------------
@@ -4511,7 +4861,7 @@ package Sinfo is
 
       --  Note: protected bodies are not allowed in Ada 83 mode
 
-      --  Gigi restriction: This node never appears.
+      --  Gigi restriction: This node never appears
 
       --  N_Protected_Body
       --  Sloc points to PROTECTED
@@ -4536,6 +4886,7 @@ package Sinfo is
       ------------------------------
 
       --  ENTRY_DECLARATION ::=
+      --    [[not] overriding]
       --    entry DEFINING_IDENTIFIER
       --      [(DISCRETE_SUBTYPE_DEFINITION)] PARAMETER_PROFILE;
 
@@ -4545,6 +4896,10 @@ package Sinfo is
       --  Discrete_Subtype_Definition (Node4) (set to Empty if not present)
       --  Parameter_Specifications (List3) (set to No_List if no formal part)
       --  Corresponding_Body (Node5-Sem)
+      --  Must_Override (Flag14) set if overriding indicator present
+      --  Must_Not_Override (Flag15) set if not_overriding indicator present
+
+      --  Note: overriding indicator is an Ada 2005 feature
 
       -----------------------------
       -- 9.5.2  Accept statement --
@@ -4556,7 +4911,7 @@ package Sinfo is
       --        HANDLED_SEQUENCE_OF_STATEMENTS
       --    end [entry_IDENTIFIER]];
 
-      --  Gigi restriction: This node never appears.
+      --  Gigi restriction: This node never appears
 
       --  Note: there are no explicit declarations allowed in an accept
       --  statement. However, the implicit declarations for any statement
@@ -4595,7 +4950,7 @@ package Sinfo is
       --  the ENTRY_BODY_FORMAL_PART to avoid the N_Entry_Body node getting
       --  too full (it would otherwise have too many fields)
 
-      --  Gigi restriction: This node never appears.
+      --  Gigi restriction: This node never appears
 
       --  N_Entry_Body
       --  Sloc points to ENTRY
@@ -4618,7 +4973,7 @@ package Sinfo is
       --  formal part itself. Also this means that the barrier condition
       --  always has somewhere to be stored.
 
-      --  Gigi restriction: This node never appears.
+      --  Gigi restriction: This node never appears
 
       --  N_Entry_Body_Formal_Part
       --  Sloc points to first token
@@ -4639,7 +4994,7 @@ package Sinfo is
       --  ENTRY_INDEX_SPECIFICATION ::=
       --    for DEFINING_IDENTIFIER in DISCRETE_SUBTYPE_DEFINITION
 
-      --  Gigi restriction: This node never appears.
+      --  Gigi restriction: This node never appears
 
       --  N_Entry_Index_Specification
       --  Sloc points to FOR
@@ -4655,7 +5010,7 @@ package Sinfo is
       --  The parser may generate a procedure call for this construct. The
       --  semantic pass must correct this misidentification where needed.
 
-      --  Gigi restriction: This node never appears.
+      --  Gigi restriction: This node never appears
 
       --  N_Entry_Call_Statement
       --  Sloc points to first token of name
@@ -4672,7 +5027,7 @@ package Sinfo is
 
       --  Note: requeue statements are not permitted in Ada 83 mode
 
-      --  Gigi restriction: This node never appears.
+      --  Gigi restriction: This node never appears
 
       --  N_Requeue_Statement
       --  Sloc points to REQUEUE
@@ -4695,7 +5050,7 @@ package Sinfo is
 
       --  Note: delay until statements are not permitted in Ada 83 mode
 
-      --  Gigi restriction: This node never appears.
+      --  Gigi restriction: This node never appears
 
       --  N_Delay_Until_Statement
       --  Sloc points to DELAY
@@ -4707,7 +5062,7 @@ package Sinfo is
 
       --  DELAY_RELATIVE_STATEMENT ::= delay delay_EXPRESSION;
 
-      --  Gigi restriction: This node never appears.
+      --  Gigi restriction: This node never appears
 
       --  N_Delay_Relative_Statement
       --  Sloc points to DELAY
@@ -4738,7 +5093,7 @@ package Sinfo is
       --      SEQUENCE_OF_STATEMENTS]
       --    end select;
 
-      --  Gigi restriction: This node never appears.
+      --  Gigi restriction: This node never appears
 
       --  Note: the guard expression, if present, appears in the node for
       --  the select alternative.
@@ -4755,7 +5110,7 @@ package Sinfo is
       --  GUARD ::= when CONDITION =>
 
       --  As noted above, the CONDITION that is part of a GUARD is included
-      --  in the node for the select alernative for convenience.
+      --  in the node for the select alternative for convenience.
 
       -------------------------------
       -- 9.7.1  Select Alternative --
@@ -4773,7 +5128,7 @@ package Sinfo is
       --  ACCEPT_ALTERNATIVE ::=
       --    ACCEPT_STATEMENT [SEQUENCE_OF_STATEMENTS]
 
-      --  Gigi restriction: This node never appears.
+      --  Gigi restriction: This node never appears
 
       --  N_Accept_Alternative
       --  Sloc points to ACCEPT
@@ -4790,7 +5145,7 @@ package Sinfo is
       --  DELAY_ALTERNATIVE ::=
       --    DELAY_STATEMENT [SEQUENCE_OF_STATEMENTS]
 
-      --  Gigi restriction: This node never appears.
+      --  Gigi restriction: This node never appears
 
       --  N_Delay_Alternative
       --  Sloc points to DELAY
@@ -4805,7 +5160,7 @@ package Sinfo is
 
       --  TERMINATE_ALTERNATIVE ::= terminate;
 
-      --  Gigi restriction: This node never appears.
+      --  Gigi restriction: This node never appears
 
       --  N_Terminate_Alternative
       --  Sloc points to TERMINATE
@@ -4824,7 +5179,7 @@ package Sinfo is
       --      DELAY_ALTERNATIVE
       --    end select;
 
-      --  Gigi restriction: This node never appears.
+      --  Gigi restriction: This node never appears
 
       --  N_Timed_Entry_Call
       --  Sloc points to SELECT
@@ -4836,9 +5191,12 @@ package Sinfo is
       -----------------------------------
 
       --  ENTRY_CALL_ALTERNATIVE ::=
-      --    ENTRY_CALL_STATEMENT [SEQUENCE_OF_STATEMENTS]
+      --    PROCEDURE_OR_ENTRY_CALL [SEQUENCE_OF_STATEMENTS]
+
+      --  PROCEDURE_OR_ENTRY_CALL ::=
+      --    PROCEDURE_CALL_STATEMENT | ENTRY_CALL_STATEMENT
 
-      --  Gigi restriction: This node never appears.
+      --  Gigi restriction: This node never appears
 
       --  N_Entry_Call_Alternative
       --  Sloc points to first token of entry call statement
@@ -4857,7 +5215,7 @@ package Sinfo is
       --      SEQUENCE_OF_STATEMENTS
       --    end select;
 
-      --  Gigi restriction: This node never appears.
+      --  Gigi restriction: This node never appears
 
       --  N_Conditional_Entry_Call
       --  Sloc points to SELECT
@@ -4877,7 +5235,7 @@ package Sinfo is
 
       --  Note: asynchronous select is not permitted in Ada 83 mode
 
-      --  Gigi restriction: This node never appears.
+      --  Gigi restriction: This node never appears
 
       --  N_Asynchronous_Select
       --  Sloc points to SELECT
@@ -4891,7 +5249,7 @@ package Sinfo is
       --  TRIGGERING_ALTERNATIVE ::=
       --    TRIGGERING_STATEMENT [SEQUENCE_OF_STATEMENTS]
 
-      --  Gigi restriction: This node never appears.
+      --  Gigi restriction: This node never appears
 
       --  N_Triggering_Alternative
       --  Sloc points to first token of triggering statement
@@ -4903,7 +5261,7 @@ package Sinfo is
       -- 9.7.4  Triggering Statement --
       ---------------------------------
 
-      --  TRIGGERING_STATEMENT ::= ENTRY_CALL_STATEMENT | DELAY_STATEMENT
+      --  TRIGGERING_STATEMENT ::= PROCEDURE_OR_ENTRY_CALL | DELAY_STATEMENT
 
       ---------------------------
       -- 9.7.4  Abortable Part --
@@ -4911,7 +5269,7 @@ package Sinfo is
 
       --  ABORTABLE_PART ::= SEQUENCE_OF_STATEMENTS
 
-      --  Gigi restriction: This node never appears.
+      --  Gigi restriction: This node never appears
 
       --  N_Abortable_Part
       --  Sloc points to ABORT
@@ -4923,7 +5281,7 @@ package Sinfo is
 
       --  ABORT_STATEMENT ::= abort task_NAME {, task_NAME};
 
-      --  Gigi restriction: This node never appears.
+      --  Gigi restriction: This node never appears
 
       --  N_Abort_Statement
       --  Sloc points to ABORT
@@ -4948,7 +5306,7 @@ package Sinfo is
       --    CONTEXT_CLAUSE LIBRARY_ITEM
       --  | CONTEXT_CLAUSE SUBUNIT
 
-      --  The N_Compilation_Unit node itself respresents the above syntax.
+      --  The N_Compilation_Unit node itself represents the above syntax.
       --  However, there are two additional items not reflected in the above
       --  syntax. First we have the global declarations that are added by the
       --  code generator. These are outer level declarations (so they cannot
@@ -5010,17 +5368,17 @@ package Sinfo is
       --  the declaration or body, and the flag for private if present,
       --  appear in the N_Compilation_Unit clause.
 
-      ----------------------------------------
-      -- 10.1.1  Library Unit Declararation --
-      ----------------------------------------
+      --------------------------------------
+      -- 10.1.1  Library Unit Declaration --
+      --------------------------------------
 
       --  LIBRARY_UNIT_DECLARATION ::=
       --    SUBPROGRAM_DECLARATION | PACKAGE_DECLARATION
       --  | GENERIC_DECLARATION    | GENERIC_INSTANTIATION
 
-      -------------------------------------------------
-      -- 10.1.1  Library Unit Renaming Declararation --
-      -------------------------------------------------
+      -----------------------------------------------
+      -- 10.1.1  Library Unit Renaming Declaration --
+      -----------------------------------------------
 
       --  LIBRARY_UNIT_RENAMING_DECLARATION ::=
       --    PACKAGE_RENAMING_DECLARATION
@@ -5084,7 +5442,10 @@ package Sinfo is
       --  Last_Name (Flag6) (set to True if last name or only one name)
       --  Context_Installed (Flag13-Sem)
       --  Elaborate_Present (Flag4-Sem)
-      --  Elaborate_All_Present (Flag15-Sem)
+      --  Elaborate_All_Present (Flag14-Sem)
+      --  Elaborate_All_Desirable (Flag9-Sem)
+      --  Elaborate_Desirable (Flag11-Sem)
+      --  Private_Present (Flag15) set if with_clause has private keyword
       --  Implicit_With (Flag16-Sem)
       --  Limited_Present (Flag17)  set if LIMITED is present
       --  Limited_View_Installed (Flag18-Sem)
@@ -5092,7 +5453,8 @@ package Sinfo is
       --  No_Entities_Ref_In_Spec (Flag8-Sem)
 
       --  Note: Limited_Present and Limited_View_Installed give support to
-      --        Ada0Y (AI-50217).
+      --        Ada 2005 (AI-50217).
+      --  Similarly, Private_Present gives support to AI-50262.
 
       ----------------------
       -- With_Type clause --
@@ -5100,14 +5462,8 @@ package Sinfo is
 
       --  This is a GNAT extension, used to implement mutually recursive
       --  types declared in different packages.
-
-      --  WITH_TYPE_CLAUSE ::=
-      --    with type type_NAME is access | with type type_NAME is tagged
-
-      --  N_With_Type_Clause
-      --  Sloc points to first token of type name
-      --  Name (Node2)
-      --  Tagged_Present (Flag15)
+      --  Note: this is now obsolete. The functionality of this construct
+      --  is now implemented by the Ada 2005 Limited_with_Clause.
 
       ---------------------
       -- 10.2  Body stub --
@@ -5191,16 +5547,17 @@ package Sinfo is
 
       --  EXCEPTION_DECLARATION ::= DEFINING_IDENTIFIER_LIST : exception;
 
-      --  For consistency with object declarations etc, the parser converts
+      --  For consistency with object declarations etc., the parser converts
       --  the case of multiple identifiers being declared to a series of
       --  declarations in which the expression is copied, using the More_Ids
-      --  and Prev_Ids flags to remember the souce form as described in the
+      --  and Prev_Ids flags to remember the source form as described in the
       --  section on "Handling of Defining Identifier Lists".
 
       --  N_Exception_Declaration
       --  Sloc points to EXCEPTION
       --  Defining_Identifier (Node1)
       --  Expression (Node3-Sem)
+      --  Renaming_Exception (Node2-Sem)
       --  More_Ids (Flag5) (set to False if no more identifiers in list)
       --  Prev_Ids (Flag6) (set to False if no previous identifiers in list)
 
@@ -5269,7 +5626,7 @@ package Sinfo is
       --  is true even in the case of an accept statement (see description of
       --  the N_Accept_Statement node).
 
-      --  End_Label refers to the containing construct.
+      --  End_Label refers to the containing construct
 
       -----------------------------
       -- 11.2  Exception Handler --
@@ -5287,7 +5644,11 @@ package Sinfo is
       --  Choice_Parameter (Node2) (set to Empty if not present)
       --  Exception_Choices (List4)
       --  Statements (List3)
+      --  Exception_Label (Node5-Sem) (set to Empty of not present)
       --  Zero_Cost_Handling (Flag5-Sem)
+      --  Local_Raise_Statements (Elist1-Sem) (set to No_Elist if not present)
+      --  Local_Raise_Not_OK (Flag7-Sem)
+      --  Has_Local_Raise (Flag8-Sem)
 
       ------------------------------------------
       -- 11.2  Choice parameter specification --
@@ -5315,9 +5676,15 @@ package Sinfo is
 
       --  RAISE_STATEMENT ::= raise [exception_NAME];
 
+      --  In Ada 2005, we have
+
+      --  RAISE_STATEMENT ::= raise; | raise exception_NAME [with EXPRESSION];
+
       --  N_Raise_Statement
       --  Sloc points to RAISE
       --  Name (Node2) (set to Empty if no exception name present)
+      --  Expression (Node3) (set to Empty if no expression present)
+      --  From_At_End (Flag4-Sem)
 
       -------------------------------
       -- 12.1  Generic Declaration --
@@ -5387,9 +5754,11 @@ package Sinfo is
       --  GENERIC_INSTANTIATION ::=
       --    package DEFINING_PROGRAM_UNIT_NAME is
       --      new generic_package_NAME [GENERIC_ACTUAL_PART];
-      --  | procedure DEFINING_PROGRAM_UNIT_NAME is
+      --  | [[not] overriding]
+      --    procedure DEFINING_PROGRAM_UNIT_NAME is
       --      new generic_procedure_NAME [GENERIC_ACTUAL_PART];
-      --  | function DEFINING_DESIGNATOR is
+      --  | [[not] overriding]
+      --    function DEFINING_DESIGNATOR is
       --      new generic_function_NAME [GENERIC_ACTUAL_PART];
 
       --  N_Package_Instantiation
@@ -5410,6 +5779,8 @@ package Sinfo is
       --  Generic_Associations (List3) (set to No_List if no
       --   generic actual part)
       --  Instance_Spec (Node5-Sem)
+      --  Must_Override (Flag14) set if overriding indicator present
+      --  Must_Not_Override (Flag15) set if not_overriding indicator present
       --  ABE_Is_Certain (Flag18-Sem)
 
       --  N_Function_Instantiation
@@ -5420,11 +5791,15 @@ package Sinfo is
       --   generic actual part)
       --  Parent_Spec (Node4-Sem)
       --  Instance_Spec (Node5-Sem)
+      --  Must_Override (Flag14) set if overriding indicator present
+      --  Must_Not_Override (Flag15) set if not_overriding indicator present
       --  ABE_Is_Certain (Flag18-Sem)
 
-      ------------------------------
-      -- 12.3 Generic Actual Part --
-      ------------------------------
+      --  Note: overriding indicator is an Ada 2005 feature
+
+      -------------------------------
+      -- 12.3  Generic Actual Part --
+      -------------------------------
 
       --  GENERIC_ACTUAL_PART ::=
       --    (GENERIC_ASSOCIATION {, GENERIC_ASSOCIATION})
@@ -5435,18 +5810,24 @@ package Sinfo is
 
       --  GENERIC_ASSOCIATION ::=
       --    [generic_formal_parameter_SELECTOR_NAME =>]
-      --      EXPLICIT_GENERIC_ACTUAL_PARAMETER
 
       --  Note: unlike the procedure call case, a generic association node
-      --  is generated for every association, even if no formal is present.
-      --  In this case the parser will leave the Selector_Name field set
-      --  to Empty, to be filled in later by the semantic pass.
+      --  is generated for every association, even if no formal parameter
+      --  selector name is present. In this case the parser will leave the
+      --  Selector_Name field set to Empty, to be filled in later by the
+      --  semantic pass.
+
+      --  In Ada 2005, a formal may be associated with a box, if the
+      --  association is part of the list of actuals for a formal package.
+      --  If the association is given by  OTHERS => <>, the association is
+      --  an N_Others_Choice.
 
       --  N_Generic_Association
       --  Sloc points to first token of generic association
       --  Selector_Name (Node2) (set to Empty if no formal
       --   parameter selector name)
-      --  Explicit_Generic_Actual_Parameter (Node1)
+      --  Explicit_Generic_Actual_Parameter (Node1) (Empty if box present)
+      --  Box_Present (Flag15) (for formal_package associations with a box)
 
       ---------------------------------------------
       -- 12.3  Explicit Generic Actual Parameter --
@@ -5462,7 +5843,9 @@ package Sinfo is
 
       --  FORMAL_OBJECT_DECLARATION ::=
       --    DEFINING_IDENTIFIER_LIST :
-      --      MODE SUBTYPE_MARK [:= DEFAULT_EXPRESSION];
+      --      MODE [NULL_EXCLUSION] SUBTYPE_MARK [:= DEFAULT_EXPRESSION];
+      --  | DEFINING_IDENTIFIER_LIST :
+      --      MODE ACCESS_DEFINITION [:= DEFAULT_EXPRESSION];
 
       --  Although the syntax allows multiple identifiers in the list, the
       --  semantics is as though successive declarations were given with
@@ -5477,8 +5860,10 @@ package Sinfo is
       --  Defining_Identifier (Node1)
       --  In_Present (Flag15)
       --  Out_Present (Flag17)
-      --  Subtype_Mark (Node4)
-      --  Expression (Node3) (set to Empty if no default expression)
+      --  Null_Exclusion_Present (Flag11) (set to False if not present)
+      --  Subtype_Mark (Node4) (set to Empty if not present)
+      --  Access_Definition (Node3) (set to Empty if not present)
+      --  Default_Expression (Node5) (set to Empty if no default expression)
       --  More_Ids (Flag5) (set to False if no more identifiers in list)
       --  Prev_Ids (Flag6) (set to False if no previous identifiers in list)
 
@@ -5513,6 +5898,7 @@ package Sinfo is
       --  | FORMAL_DECIMAL_FIXED_POINT_DEFINITION
       --  | FORMAL_ARRAY_TYPE_DEFINITION
       --  | FORMAL_ACCESS_TYPE_DEFINITION
+      --  | FORMAL_INTERFACE_TYPE_DEFINITION
 
       ---------------------------------------------
       -- 12.5.1  Formal Private Type Definition --
@@ -5534,8 +5920,8 @@ package Sinfo is
       --------------------------------------------
 
       --  FORMAL_DERIVED_TYPE_DEFINITION ::=
-      --    [abstract] new SUBTYPE_MARK [with private]
-
+      --    [abstract] [limited | synchronized]
+      --       new SUBTYPE_MARK [[and INTERFACE_LIST] with private]
       --  Note: this construct is not allowed in Ada 83 mode
 
       --  N_Formal_Derived_Type_Definition
@@ -5543,6 +5929,9 @@ package Sinfo is
       --  Subtype_Mark (Node4)
       --  Private_Present (Flag15)
       --  Abstract_Present (Flag4)
+      --  Limited_Present (Flag17)
+      --  Synchronized_Present (Flag7)
+      --  Interface_List (List2) (set to No_List if none)
 
       ---------------------------------------------
       -- 12.5.2  Formal Discrete Type Definition --
@@ -5612,14 +6001,44 @@ package Sinfo is
 
       --  FORMAL_ACCESS_TYPE_DEFINITION ::= ACCESS_TYPE_DEFINITION
 
+      ----------------------------------------------
+      -- 12.5.5  Formal Interface Type Definition --
+      ----------------------------------------------
+
+      --  FORMAL_INTERFACE_TYPE_DEFINITION ::= INTERFACE_TYPE_DEFINITION
+
       -----------------------------------------
       -- 12.6  Formal Subprogram Declaration --
       -----------------------------------------
 
       --  FORMAL_SUBPROGRAM_DECLARATION ::=
+      --    FORMAL_CONCRETE_SUBPROGRAM_DECLARATION
+      --  | FORMAL_ABSTRACT_SUBPROGRAM_DECLARATION
+
+      --------------------------------------------------
+      -- 12.6  Formal Concrete Subprogram Declaration --
+      --------------------------------------------------
+
+      --  FORMAL_CONCRETE_SUBPROGRAM_DECLARATION ::=
       --    with SUBPROGRAM_SPECIFICATION [is SUBPROGRAM_DEFAULT];
 
-      --  N_Formal_Subprogram_Declaration
+      --  N_Formal_Concrete_Subprogram_Declaration
+      --  Sloc points to WITH
+      --  Specification (Node1)
+      --  Default_Name (Node2) (set to Empty if no subprogram default)
+      --  Box_Present (Flag15)
+
+      --  Note: if no subprogram default is present, then Name is set
+      --  to Empty, and Box_Present is False.
+
+      --------------------------------------------------
+      -- 12.6  Formal Abstract Subprogram Declaration --
+      --------------------------------------------------
+
+      --  FORMAL_ABSTRACT_SUBPROGRAM_DECLARATION ::=
+      --    with SUBPROGRAM_SPECIFICATION is abstract [SUBPROGRAM_DEFAULT];
+
+      --  N_Formal_Abstract_Subprogram_Declaration
       --  Sloc points to WITH
       --  Specification (Node1)
       --  Default_Name (Node2) (set to Empty if no subprogram default)
@@ -5635,8 +6054,9 @@ package Sinfo is
       --  SUBPROGRAM_DEFAULT ::= DEFAULT_NAME | <>
 
       --  There is no separate node in the tree for a subprogram default.
-      --  Instead the parent (N_Formal_Subprogram_Declaration) node contains
-      --  the default name or box indication, as needed.
+      --  Instead the parent (N_Formal_Concrete_Subprogram_Declaration
+      --  or N_Formal_Abstract_Subprogram_Declaration) node contains the
+      --  default name or box indication, as needed.
 
       ------------------------
       -- 12.6  Default Name --
@@ -5669,11 +6089,21 @@ package Sinfo is
       --------------------------------------
 
       --  FORMAL_PACKAGE_ACTUAL_PART ::=
-      --    (<>) | [GENERIC_ACTUAL_PART]
+      --    ([OTHERS] => <>)
+      --    | [GENERIC_ACTUAL_PART]
+      --    (FORMAL_PACKAGE_ASSOCIATION {. FORMAL_PACKAGE_ASSOCIATION}
+
+      --  FORMAL_PACKAGE_ASSOCIATION ::=
+      --   GENERIC_ASSOCIATION
+      --  | GENERIC_FORMAL_PARAMETER_SELECTOR_NAME => <>
+
+      --  There is no explicit node in the tree for a formal package actual
+      --  part. Instead the information appears in the parent node (i.e. the
+      --  formal package declaration node itself).
 
-      --  There is no explicit node in the tree for a formal package
-      --  actual part. Instead the information appears in the parent node
-      --  (i.e. the formal package declaration node itself).
+      --  There is no explicit node for a formal package association. All of
+      --  them are represented either by a generic association, possibly with
+      --  Box_Present, or by an N_Others_Choice.
 
       ---------------------------------
       -- 13.1  Representation clause --
@@ -5736,9 +6166,11 @@ package Sinfo is
       --  Name (Node2) the local name
       --  Chars (Name1) the identifier name from the attribute designator
       --  Expression (Node3) the expression or name
-      --  Next_Rep_Item (Node4-Sem)
+      --  Entity (Node4-Sem)
+      --  Next_Rep_Item (Node5-Sem)
       --  From_At_Mod (Flag4-Sem)
       --  Check_Address_Alignment (Flag11-Sem)
+      --  Address_Warning_Posted (Flag18-Sem)
 
       ---------------------------------------------
       -- 13.4  Enumeration representation clause --
@@ -5753,7 +6185,7 @@ package Sinfo is
       --  Sloc points to FOR
       --  Identifier (Node1) direct name
       --  Array_Aggregate (Node3)
-      --  Next_Rep_Item (Node4-Sem)
+      --  Next_Rep_Item (Node5-Sem)
 
       ---------------------------------
       -- 13.4  Enumeration aggregate --
@@ -5781,7 +6213,7 @@ package Sinfo is
       --  Identifier (Node1) direct name
       --  Mod_Clause (Node2) (set to Empty if no mod clause present)
       --  Component_Clauses (List3)
-      --  Next_Rep_Item (Node4-Sem)
+      --  Next_Rep_Item (Node5-Sem)
 
       ------------------------------
       -- 13.5.1  Component clause --
@@ -5826,15 +6258,11 @@ package Sinfo is
 
       --    Asm_Insn'(Asm (...));
 
-      --      or
-
-      --    Asm_Insn'(Asm_Volatile (...))
-
-      --  See package System.Machine_Code in file s-maccod.ads for details
-      --  on the allowed parameters to Asm[_Volatile]. There are two ways
-      --  this node can arise, as a code statement, in which case the
-      --  expression is the qualified expression, or as a result of the
-      --  expansion of an intrinsic call to the Asm or Asm_Input procedure.
+      --  See package System.Machine_Code in file s-maccod.ads for details on
+      --  the allowed parameters to Asm. There are two ways this node can
+      --  arise, as a code statement, in which case the expression is the
+      --  qualified expression, or as a result of the expansion of an intrinsic
+      --  call to the Asm or Asm_Input procedure.
 
       --  N_Code_Statement
       --  Sloc points to first token of the expression
@@ -6026,7 +6454,7 @@ package Sinfo is
       --  an expanded name node to a selected component node to be done
       --  easily, see Sinfo.CN.Change_Selected_Component_To_Expanded_Name.
 
-      --  There is no special sprint syntax for an expanded name.
+      --  There is no special sprint syntax for an expanded name
 
       --  N_Expanded_Name
       --  Sloc points to the period
@@ -6053,7 +6481,8 @@ package Sinfo is
       --  Sloc is copied from the unchecked deallocation call
       --  Expression (Node3) argument to unchecked deallocation call
       --  Storage_Pool (Node1-Sem)
-      --  Procedure_To_Call (Node4-Sem)
+      --  Procedure_To_Call (Node2-Sem)
+      --  Actual_Designated_Subtype (Node4-Sem)
 
       --  Note: in the case where a debug source file is generated, the Sloc
       --  for this node points to the FREE keyword in the Sprint file output.
@@ -6176,7 +6605,7 @@ package Sinfo is
       --  the exception to be raised (i.e. it is equivalent to a raise
       --  statement that raises the corresponding exception). This use
       --  is distinguished by the fact that the Etype in this case is
-      --  Standard_Void_Type, In the subexprssion case, the Etype is the
+      --  Standard_Void_Type, In the subexpression case, the Etype is the
       --  same as the type of the subexpression which it replaces.
 
       --  If Condition is empty, then the raise is unconditional. If the
@@ -6187,7 +6616,10 @@ package Sinfo is
       --  error. The creation of this node will usually be accompanied by a
       --  message (unless it appears within the right operand of a short
       --  circuit form whose left argument is static and decisively
-      --  eliminates elaboration of the raise operation.
+      --  eliminates elaboration of the raise operation. The condition field
+      --  can ONLY be present when the node is used as a statement form, it
+      --  may NOT be present in the case where the node appears within an
+      --  expression.
 
       --  The exception is generated with a message that contains the
       --  file name and line number, and then appended text. The Reason
@@ -6226,6 +6658,72 @@ package Sinfo is
       --  In the case where a debug source file is generated, the Sloc for
       --  this node points to the left bracket in the Sprint file output.
 
+      --  Note: the back end may be required to translate these nodes into
+      --  appropriate goto statements. See description of N_Push/Pop_xxx_Label.
+
+      ---------------------------------------------
+      -- Optimization of Exception Raise to Goto --
+      ---------------------------------------------
+
+      --  In some cases, the front end will determine that any exception raised
+      --  by the back end for a certain exception should be transformed into a
+      --  goto statement.
+
+      --  There are three kinds of exceptions raised by the back end (note that
+      --  for this purpose we consider gigi to be part of the back end in the
+      --  gcc case):
+
+      --     1. Exceptions resulting from N_Raise_xxx_Error nodes
+      --     2. Exceptions from checks triggered by Do_xxx_Check flags
+      --     3. Other cases not specifically marked by the front end
+
+      --  Normally all such exceptions are translated into calls to the proper
+      --  Rcheck_xx procedure, where xx encodes both the exception to be raised
+      --  and the exception message.
+
+      --  The front end may determine that for a particular sequence of code,
+      --  exceptions in any of these three categories for a particular builtin
+      --  exception should result in a goto, rather than a call to Rcheck_xx.
+      --  The exact sequence to be generated is:
+
+      --      Local_Raise (exception'Identity);
+      --      goto Label
+
+      --  The front end marks such a sequence of code by bracketing it with
+      --  push and pop nodes:
+
+      --       N_Push_xxx_Label (referencing the label)
+      --       ...
+      --       (code where transformation is expected for exception xxx)
+      --       ...
+      --       N_Pop_xxx_Label
+
+      --  The use of push/pop reflects the fact that such regions can properly
+      --  nest, and one special case is a subregion in which no transformation
+      --  is allowed. Such a region is marked by a N_Push_xxx_Label node whose
+      --  Exception_Label field is Empty.
+
+      --  N_Push_Constraint_Error_Label
+      --  Sloc references first statement in region covered
+      --  Exception_Label (Node5-Sem)
+
+      --  N_Push_Program_Error_Label
+      --  Sloc references first statement in region covered
+      --  Exception_Label (Node5-Sem)
+
+      --  N_Push_Storage_Error_Label
+      --  Sloc references first statement in region covered
+      --  Exception_Label (Node5-Sem)
+
+      --  N_Pop_Constraint_Error_Label
+      --  Sloc references last statement in region covered
+
+      --  N_Pop_Program_Error_Label
+      --  Sloc references last statement in region covered
+
+      --  N_Pop_Storage_Error_Label
+      --  Sloc references last statement in region covered
+
       ---------------
       -- Reference --
       ---------------
@@ -6282,7 +6780,7 @@ package Sinfo is
       --  with all checks off, regardless of the current setting of scope
       --  suppress flags.
 
-      --  Sprint syntax: `(expression).
+      --  Sprint syntax: `(expression)
 
       --  Note: this node is always removed from the tree (and replaced by
       --  its constituent expression) on completion of analysis, so it only
@@ -6312,7 +6810,7 @@ package Sinfo is
       --  clearly a function call to an instantiation of Unchecked_Conversion
       --  is not a variable in any case.
 
-      --  Sprint syntax: subtype-mark!(expression).
+      --  Sprint syntax: subtype-mark!(expression)
 
       --  N_Unchecked_Type_Conversion
       --  Sloc points to related node in source
@@ -6392,7 +6890,7 @@ package Sinfo is
 
    --  The following is the definition of the Node_Kind type. As previously
    --  discussed, this is separated off to allow rearrangement of the order
-   --  to facilitiate definition of subtype ranges. The comments show the
+   --  to facilitate definition of subtype ranges. The comments show the
    --  subtype classes which apply to each set of node kinds. The first
    --  entry in the comment characterizes the following list of nodes.
 
@@ -6400,6 +6898,7 @@ package Sinfo is
       N_Unused_At_Start,
 
       --  N_Representation_Clause
+
       N_At_Clause,
       N_Component_Clause,
       N_Enumeration_Representation_Clause,
@@ -6407,42 +6906,49 @@ package Sinfo is
       N_Record_Representation_Clause,
 
       --  N_Representation_Clause, N_Has_Chars
+
       N_Attribute_Definition_Clause,
 
       --  N_Has_Chars
+
       N_Empty,
-      N_Pragma,
       N_Pragma_Argument_Association,
 
       --  N_Has_Etype
+
       N_Error,
 
       --  N_Entity, N_Has_Etype, N_Has_Chars
+
       N_Defining_Character_Literal,
       N_Defining_Identifier,
       N_Defining_Operator_Symbol,
 
       --  N_Subexpr, N_Has_Etype, N_Has_Chars, N_Has_Entity
+
       N_Expanded_Name,
 
       --  N_Direct_Name, N_Subexpr, N_Has_Etype,
       --  N_Has_Chars, N_Has_Entity
+
       N_Identifier,
       N_Operator_Symbol,
 
       --  N_Direct_Name, N_Subexpr, N_Has_Etype,
       --  N_Has_Chars, N_Has_Entity
+
       N_Character_Literal,
 
       --  N_Binary_Op, N_Op, N_Subexpr,
       --  N_Has_Etype, N_Has_Chars, N_Has_Entity
+
       N_Op_Add,
       N_Op_Concat,
       N_Op_Expon,
       N_Op_Subtract,
 
       --  N_Binary_Op, N_Op, N_Subexpr, N_Has_Treat_Fixed_As_Integer
-      --  N_Has_Etype, N_Has_Chars, N_Has_Entity
+      --  N_Has_Etype, N_Has_Chars, N_Has_Entity, N_Multiplying_Operator
 
       N_Op_Divide,
       N_Op_Mod,
@@ -6451,11 +6957,12 @@ package Sinfo is
 
       --  N_Binary_Op, N_Op, N_Subexpr, N_Has_Etype
       --  N_Has_Entity, N_Has_Chars, N_Op_Boolean
+
       N_Op_And,
 
       --  N_Binary_Op, N_Op, N_Subexpr, N_Has_Etype
-      --  N_Has_Entity, N_Has_Chars, N_Op_Boolean,
-      --  N_Op_Compare
+      --  N_Has_Entity, N_Has_Chars, N_Op_Boolean, N_Op_Compare
+
       N_Op_Eq,
       N_Op_Ge,
       N_Op_Gt,
@@ -6465,11 +6972,13 @@ package Sinfo is
 
       --  N_Binary_Op, N_Op, N_Subexpr, N_Has_Etype
       --  N_Has_Entity, N_Has_Chars, N_Op_Boolean
+
       N_Op_Or,
       N_Op_Xor,
 
       --  N_Binary_Op, N_Op, N_Subexpr, N_Has_Etype,
       --  N_Op_Shift, N_Has_Chars, N_Has_Entity
+
       N_Op_Rotate_Left,
       N_Op_Rotate_Right,
       N_Op_Shift_Left,
@@ -6478,23 +6987,29 @@ package Sinfo is
 
       --  N_Unary_Op, N_Op, N_Subexpr, N_Has_Etype,
       --  N_Has_Chars, N_Has_Entity
+
       N_Op_Abs,
       N_Op_Minus,
       N_Op_Not,
       N_Op_Plus,
 
       --  N_Subexpr, N_Has_Etype, N_Has_Entity
+
       N_Attribute_Reference,
 
+      --  N_Subexpr, N_Has_Etype, N_Membership_Test
+
+      N_In,
+      N_Not_In,
+
       --  N_Subexpr, N_Has_Etype
+
       N_And_Then,
       N_Conditional_Expression,
       N_Explicit_Dereference,
       N_Function_Call,
-      N_In,
       N_Indexed_Component,
       N_Integer_Literal,
-      N_Not_In,
       N_Null,
       N_Or_Else,
       N_Procedure_Call_Statement,
@@ -6523,9 +7038,11 @@ package Sinfo is
       N_Unchecked_Type_Conversion,
 
       --  N_Has_Etype
+
       N_Subtype_Indication,
 
       --  N_Declaration
+
       N_Component_Declaration,
       N_Entry_Declaration,
       N_Formal_Object_Declaration,
@@ -6540,40 +7057,48 @@ package Sinfo is
       N_Subtype_Declaration,
 
       --  N_Subprogram_Specification, N_Declaration
+
       N_Function_Specification,
       N_Procedure_Specification,
 
-      --  (nothing special)
-      N_Entry_Index_Specification,
-      N_Freeze_Entity,
-
       --  N_Access_To_Subprogram_Definition
+
       N_Access_Function_Definition,
       N_Access_Procedure_Definition,
 
-      --  N_Later_Decl_Item,
+      --  N_Later_Decl_Item
+
       N_Task_Type_Declaration,
 
       --  N_Body_Stub, N_Later_Decl_Item
+
       N_Package_Body_Stub,
       N_Protected_Body_Stub,
       N_Subprogram_Body_Stub,
       N_Task_Body_Stub,
 
       --  N_Generic_Instantiation, N_Later_Decl_Item
+      --  N_Subprogram_Instantiation
+
       N_Function_Instantiation,
-      N_Package_Instantiation,
       N_Procedure_Instantiation,
 
+      --  N_Generic_Instantiation, N_Later_Decl_Item
+
+      N_Package_Instantiation,
+
       --  N_Unit_Body, N_Later_Decl_Item, N_Proper_Body
+
       N_Package_Body,
       N_Subprogram_Body,
 
       --  N_Later_Decl_Item, N_Proper_Body
+
       N_Protected_Body,
       N_Task_Body,
 
       --  N_Later_Decl_Item
+
       N_Implicit_Label_Declaration,
       N_Package_Declaration,
       N_Single_Task_Declaration,
@@ -6581,25 +7106,30 @@ package Sinfo is
       N_Use_Package_Clause,
 
       --  N_Generic_Declaration, N_Later_Decl_Item
+
       N_Generic_Package_Declaration,
       N_Generic_Subprogram_Declaration,
 
       --  N_Array_Type_Definition
+
       N_Constrained_Array_Definition,
       N_Unconstrained_Array_Definition,
 
       --  N_Renaming_Declaration
+
       N_Exception_Renaming_Declaration,
       N_Object_Renaming_Declaration,
       N_Package_Renaming_Declaration,
       N_Subprogram_Renaming_Declaration,
 
-      --  N_Generic_Renaming_Declarations, N_Renaming_Declaration
+      --  N_Generic_Renaming_Declaration, N_Renaming_Declaration
+
       N_Generic_Function_Renaming_Declaration,
       N_Generic_Package_Renaming_Declaration,
       N_Generic_Procedure_Renaming_Declaration,
 
       --  N_Statement_Other_Than_Procedure_Call
+
       N_Abort_Statement,
       N_Accept_Statement,
       N_Assignment_Statement,
@@ -6608,8 +7138,14 @@ package Sinfo is
       N_Case_Statement,
       N_Code_Statement,
       N_Conditional_Entry_Call,
+
+      --  N_Statement_Other_Than_Procedure_Call. N_Delay_Statement
+
       N_Delay_Relative_Statement,
       N_Delay_Until_Statement,
+
+      --  N_Statement_Other_Than_Procedure_Call
+
       N_Entry_Call_Statement,
       N_Free_Statement,
       N_Goto_Statement,
@@ -6617,15 +7153,18 @@ package Sinfo is
       N_Null_Statement,
       N_Raise_Statement,
       N_Requeue_Statement,
-      N_Return_Statement,
+      N_Return_Statement, -- renamed as N_Simple_Return_Statement below
+      N_Extended_Return_Statement,
       N_Selective_Accept,
       N_Timed_Entry_Call,
 
       --  N_Statement_Other_Than_Procedure_Call, N_Has_Condition
+
       N_Exit_Statement,
       N_If_Statement,
 
       --  N_Has_Condition
+
       N_Accept_Alternative,
       N_Delay_Alternative,
       N_Elsif_Part,
@@ -6633,7 +7172,25 @@ package Sinfo is
       N_Iteration_Scheme,
       N_Terminate_Alternative,
 
+      --  N_Formal_Subprogram_Declaration
+
+      N_Formal_Abstract_Subprogram_Declaration,
+      N_Formal_Concrete_Subprogram_Declaration,
+
+      --  N_Push_xxx_Label, N_Push_Pop_xxx_Label
+
+      N_Push_Constraint_Error_Label,
+      N_Push_Program_Error_Label,
+      N_Push_Storage_Error_Label,
+
+      --  N_Pop_xxx_Label, N_Push_Pop_xxx_Label
+
+      N_Pop_Constraint_Error_Label,
+      N_Pop_Program_Error_Label,
+      N_Pop_Storage_Error_Label,
+
       --  Other nodes (not part of any subtype class)
+
       N_Abortable_Part,
       N_Abstract_Subprogram_Declaration,
       N_Access_Definition,
@@ -6642,6 +7199,7 @@ package Sinfo is
       N_Compilation_Unit,
       N_Compilation_Unit_Aux,
       N_Component_Association,
+      N_Component_Definition,
       N_Component_List,
       N_Derived_Type_Definition,
       N_Decimal_Fixed_Point_Definition,
@@ -6654,6 +7212,7 @@ package Sinfo is
       N_Enumeration_Type_Definition,
       N_Entry_Body,
       N_Entry_Call_Alternative,
+      N_Entry_Index_Specification,
       N_Exception_Declaration,
       N_Exception_Handler,
       N_Floating_Point_Definition,
@@ -6666,7 +7225,7 @@ package Sinfo is
       N_Formal_Package_Declaration,
       N_Formal_Private_Type_Definition,
       N_Formal_Signed_Integer_Type_Definition,
-      N_Formal_Subprogram_Declaration,
+      N_Freeze_Entity,
       N_Generic_Association,
       N_Handled_Sequence_Of_Statements,
       N_Index_Or_Discriminant_Constraint,
@@ -6679,6 +7238,7 @@ package Sinfo is
       N_Package_Specification,
       N_Parameter_Association,
       N_Parameter_Specification,
+      N_Pragma,
       N_Protected_Definition,
       N_Range_Constraint,
       N_Real_Range_Specification,
@@ -6693,7 +7253,6 @@ package Sinfo is
       N_Variant,
       N_Variant_Part,
       N_With_Clause,
-      N_With_Type_Clause,
       N_Unused_At_End);
 
    for Node_Kind'Size use 8;
@@ -6725,6 +7284,10 @@ package Sinfo is
    --  Note: this includes all constructs normally thought of as declarations
    --  except those which are separately grouped as later declarations.
 
+   subtype N_Delay_Statement is Node_Kind range
+      N_Delay_Relative_Statement ..
+      N_Delay_Until_Statement;
+
    subtype N_Direct_Name is Node_Kind range
      N_Identifier ..
      N_Character_Literal;
@@ -6733,13 +7296,17 @@ package Sinfo is
      N_Defining_Character_Literal ..
      N_Defining_Operator_Symbol;
 
+   subtype N_Formal_Subprogram_Declaration is Node_Kind range
+     N_Formal_Abstract_Subprogram_Declaration ..
+     N_Formal_Concrete_Subprogram_Declaration;
+
    subtype N_Generic_Declaration is Node_Kind range
      N_Generic_Package_Declaration ..
      N_Generic_Subprogram_Declaration;
 
    subtype N_Generic_Instantiation is Node_Kind range
      N_Function_Instantiation ..
-     N_Procedure_Instantiation;
+     N_Package_Instantiation;
 
    subtype N_Generic_Renaming_Declaration is Node_Kind range
      N_Generic_Function_Renaming_Declaration ..
@@ -6763,6 +7330,10 @@ package Sinfo is
       N_Op_Divide ..
       N_Op_Rem;
 
+   subtype N_Multiplying_Operator is Node_Kind range
+      N_Op_Divide ..
+      N_Op_Rem;
+
    subtype N_Later_Decl_Item is Node_Kind range
      N_Task_Type_Declaration ..
      N_Generic_Subprogram_Declaration;
@@ -6775,6 +7346,10 @@ package Sinfo is
    --  N_Protected_Body, which is a bit peculiar, but harmless since
    --  this cannot appear in Ada 83 mode anyway.
 
+   subtype N_Membership_Test is Node_Kind range
+      N_In ..
+      N_Not_In;
+
    subtype N_Op is Node_Kind range
      N_Op_Add ..
      N_Op_Plus;
@@ -6797,6 +7372,18 @@ package Sinfo is
      N_Package_Body ..
      N_Task_Body;
 
+   subtype N_Push_xxx_Label is Node_Kind range
+     N_Push_Constraint_Error_Label ..
+     N_Push_Storage_Error_Label;
+
+   subtype N_Pop_xxx_Label is Node_Kind range
+     N_Pop_Constraint_Error_Label ..
+     N_Pop_Storage_Error_Label;
+
+   subtype N_Push_Pop_xxx_Label is Node_Kind range
+     N_Push_Constraint_Error_Label ..
+     N_Pop_Storage_Error_Label;
+
    subtype N_Raise_xxx_Error is Node_Kind range
      N_Raise_Constraint_Error ..
      N_Raise_Storage_Error;
@@ -6817,6 +7404,10 @@ package Sinfo is
    --  (since overloading is possible, so it needs to go through the normal
    --  overloading resolution for expressions).
 
+   subtype N_Subprogram_Instantiation is Node_Kind range
+     N_Function_Instantiation ..
+     N_Procedure_Instantiation;
+
    subtype N_Has_Condition is Node_Kind range
      N_Exit_Statement ..
      N_Terminate_Alternative;
@@ -6837,7 +7428,7 @@ package Sinfo is
 
    subtype N_Unit_Body is Node_Kind range
      N_Package_Body ..
-     N_Subprogram_Body;
+       N_Subprogram_Body;
 
    ---------------------------
    -- Node Access Functions --
@@ -6869,6 +7460,12 @@ package Sinfo is
    function Accept_Statement
      (N : Node_Id) return Node_Id;    -- Node2
 
+   function Access_Definition
+     (N : Node_Id) return Node_Id;    -- Node3
+
+   function Access_To_Subprogram_Definition
+     (N : Node_Id) return Node_Id;    -- Node3
+
    function Access_Types_To_Process
      (N : Node_Id) return Elist_Id;   -- Elist2
 
@@ -6881,6 +7478,12 @@ package Sinfo is
    function Acts_As_Spec
      (N : Node_Id) return Boolean;    -- Flag4
 
+   function Actual_Designated_Subtype
+     (N : Node_Id) return Node_Id;    -- Node4
+
+   function Address_Warning_Posted
+     (N : Node_Id) return Boolean;    -- Flag18
+
    function Aggregate_Bounds
      (N : Node_Id) return Node_Id;    -- Node3
 
@@ -6936,7 +7539,7 @@ package Sinfo is
      (N : Node_Id) return Boolean;    -- Flag15
 
    function Char_Literal_Value
-     (N : Node_Id) return Char_Code;  -- Char_Code2
+     (N : Node_Id) return Uint;       -- Uint2
 
    function Chars
      (N : Node_Id) return Name_Id;    -- Name1
@@ -6950,6 +7553,12 @@ package Sinfo is
    function Choices
      (N : Node_Id) return List_Id;    -- List1
 
+   function Coextensions
+      (N : Node_Id) return Elist_Id;  -- Elist4
+
+   function Comes_From_Extended_Return_Statement
+     (N : Node_Id) return Boolean;    -- Flag18
+
    function Compile_Time_Known_Aggregate
      (N : Node_Id) return Boolean;    -- Flag18
 
@@ -6959,6 +7568,9 @@ package Sinfo is
    function Component_Clauses
      (N : Node_Id) return List_Id;    -- List3
 
+   function Component_Definition
+     (N : Node_Id) return Node_Id;    -- Node4
+
    function Component_Items
      (N : Node_Id) return List_Id;    -- List3
 
@@ -7001,6 +7613,9 @@ package Sinfo is
    function Corresponding_Body
      (N : Node_Id) return Node_Id;    -- Node5
 
+   function Corresponding_Formal_Spec
+     (N : Node_Id) return Node_Id;    -- Node3
+
    function Corresponding_Generic_Association
      (N : Node_Id) return Node_Id;    -- Node5
 
@@ -7037,9 +7652,6 @@ package Sinfo is
    function Delay_Alternative
      (N : Node_Id) return Node_Id;    -- Node4
 
-   function Delay_Finalize_Attach
-     (N : Node_Id) return Boolean;    -- Flag14
-
    function Delay_Statement
      (N : Node_Id) return Node_Id;    -- Node2
 
@@ -7094,8 +7706,14 @@ package Sinfo is
    function Do_Tag_Check
      (N : Node_Id) return Boolean;    -- Flag13
 
+   function Elaborate_All_Desirable
+     (N : Node_Id) return Boolean;    -- Flag9
+
    function Elaborate_All_Present
-     (N : Node_Id) return Boolean;    -- Flag15
+     (N : Node_Id) return Boolean;    -- Flag14
+
+   function Elaborate_Desirable
+     (N : Node_Id) return Boolean;    -- Flag11
 
    function Elaborate_Present
      (N : Node_Id) return Boolean;    -- Flag4
@@ -7155,7 +7773,10 @@ package Sinfo is
      (N : Node_Id) return List_Id;    -- List5
 
    function Exception_Junk
-     (N : Node_Id) return Boolean;    -- Flag11
+     (N : Node_Id) return Boolean;    -- Flag8
+
+   function Exception_Label
+     (N : Node_Id) return Node_Id;    -- Node5
 
    function Explicit_Actual_Parameter
      (N : Node_Id) return Node_Id;    -- Node3
@@ -7199,9 +7820,15 @@ package Sinfo is
    function Forwards_OK
      (N : Node_Id) return Boolean;    -- Flag5
 
+   function From_At_End
+     (N : Node_Id) return Boolean;    -- Flag4
+
    function From_At_Mod
      (N : Node_Id) return Boolean;    -- Flag4
 
+   function From_Default
+     (N : Node_Id) return Boolean;    -- Flag6
+
    function Generic_Associations
      (N : Node_Id) return List_Id;    -- List3
 
@@ -7229,6 +7856,12 @@ package Sinfo is
    function Has_Dynamic_Range_Check
      (N : Node_Id) return Boolean;    -- Flag12
 
+   function Has_Init_Expression
+     (N : Node_Id) return Boolean;    -- Flag14
+
+   function Has_Local_Raise
+     (N : Node_Id) return Boolean;    -- Flag8
+
    function Has_No_Elaboration_Code
      (N : Node_Id) return Boolean;    -- Flag17
 
@@ -7238,6 +7871,12 @@ package Sinfo is
    function Has_Private_View
      (N : Node_Id) return Boolean;    -- Flag11
 
+   function Has_Relative_Deadline_Pragma
+     (N : Node_Id) return Boolean;    -- Flag9
+
+   function Has_Self_Reference
+     (N : Node_Id) return Boolean;    -- Flag13
+
    function Has_Storage_Size_Pragma
      (N : Node_Id) return Boolean;    -- Flag5
 
@@ -7259,6 +7898,12 @@ package Sinfo is
    function Identifier
      (N : Node_Id) return Node_Id;    -- Node1
 
+   function Interface_List
+     (N : Node_Id) return List_Id;    -- List2
+
+   function Interface_Present
+     (N : Node_Id) return Boolean;    -- Flag16
+
    function Implicit_With
      (N : Node_Id) return Boolean;    -- Flag16
 
@@ -7286,6 +7931,18 @@ package Sinfo is
    function Is_Controlling_Actual
      (N : Node_Id) return Boolean;    -- Flag16
 
+   function Is_Dynamic_Coextension
+     (N : Node_Id) return Boolean;    -- Flag18
+
+   function Is_Entry_Barrier_Function
+     (N : Node_Id) return Boolean;    -- Flag8
+
+   function Is_Expanded_Build_In_Place_Call
+     (N : Node_Id) return Boolean;    -- Flag11
+
+   function Is_Folded_In_Parser
+     (N : Node_Id) return Boolean;    -- Flag4
+
    function Is_In_Discriminant_Check
      (N : Node_Id) return Boolean;    -- Flag11
 
@@ -7304,6 +7961,9 @@ package Sinfo is
    function Is_Protected_Subprogram_Body
      (N : Node_Id) return Boolean;    -- Flag7
 
+   function Is_Static_Coextension
+     (N : Node_Id) return Boolean;    -- Flag14
+
    function Is_Static_Expression
      (N : Node_Id) return Boolean;    -- Flag6
 
@@ -7349,6 +8009,12 @@ package Sinfo is
    function Literals
      (N : Node_Id) return List_Id;    -- List1
 
+   function Local_Raise_Not_OK
+     (N : Node_Id) return Boolean;    -- Flag7
+
+   function Local_Raise_Statements
+     (N : Node_Id) return Elist_Id;   -- Elist1
+
    function Loop_Actions
      (N : Node_Id) return List_Id;    -- List2
 
@@ -7370,6 +8036,12 @@ package Sinfo is
    function Must_Not_Freeze
      (N : Node_Id) return Boolean;    -- Flag8
 
+   function Must_Not_Override
+     (N : Node_Id) return Boolean;    -- Flag15
+
+   function Must_Override
+     (N : Node_Id) return Boolean;    -- Flag14
+
    function Name
      (N : Node_Id) return Node_Id;    -- Node2
 
@@ -7382,8 +8054,11 @@ package Sinfo is
    function Next_Named_Actual
      (N : Node_Id) return Node_Id;    -- Node4
 
+   function Next_Pragma
+     (N : Node_Id) return Node_Id;    -- Node1
+
    function Next_Rep_Item
-     (N : Node_Id) return Node_Id;    -- Node4
+     (N : Node_Id) return Node_Id;    -- Node5
 
    function Next_Use_Clause
      (N : Node_Id) return Node_Id;    -- Node3
@@ -7391,6 +8066,9 @@ package Sinfo is
    function No_Ctrl_Actions
      (N : Node_Id) return Boolean;    -- Flag7
 
+   function No_Elaboration_Check
+     (N : Node_Id) return Boolean;    -- Flag14
+
    function No_Entities_Ref_In_Spec
      (N : Node_Id) return Boolean;    -- Flag8
 
@@ -7403,15 +8081,15 @@ package Sinfo is
    function Null_Present
      (N : Node_Id) return Boolean;    -- Flag13
 
+   function Null_Exclusion_Present
+     (N : Node_Id) return Boolean;    -- Flag11
+
    function Null_Record_Present
      (N : Node_Id) return Boolean;    -- Flag17
 
    function Object_Definition
      (N : Node_Id) return Node_Id;    -- Node4
 
-   function OK_For_Stream
-     (N : Node_Id) return Boolean;    -- Flag4
-
    function Original_Discriminant
      (N : Node_Id) return Node_Id;    -- Node2
 
@@ -7439,12 +8117,18 @@ package Sinfo is
    function Parent_Spec
      (N : Node_Id) return Node_Id;    -- Node4
 
+   function PPC_Enabled
+     (N : Node_Id) return Boolean;    -- Flag5
+
    function Position
      (N : Node_Id) return Node_Id;    -- Node2
 
    function Pragma_Argument_Associations
      (N : Node_Id) return List_Id;    -- List2
 
+   function Pragma_Identifier
+     (N : Node_Id) return Node_Id;    -- Node4
+
    function Pragmas_After
      (N : Node_Id) return List_Id;    -- List5
 
@@ -7470,7 +8154,7 @@ package Sinfo is
      (N : Node_Id) return Boolean;    -- Flag15
 
    function Procedure_To_Call
-     (N : Node_Id) return Node_Id;    -- Node4
+     (N : Node_Id) return Node_Id;    -- Node2
 
    function Proper_Body
      (N : Node_Id) return Node_Id;    -- Node1
@@ -7479,7 +8163,7 @@ package Sinfo is
      (N : Node_Id) return Node_Id;    -- Node3
 
    function Protected_Present
-     (N : Node_Id) return Boolean;    -- Flag15
+     (N : Node_Id) return Boolean;    -- Flag6
 
    function Raises_Constraint_Error
      (N : Node_Id) return Boolean;    -- Flag7
@@ -7505,9 +8189,18 @@ package Sinfo is
    function Redundant_Use
      (N : Node_Id) return Boolean;    -- Flag13
 
-   function Return_Type
+   function Renaming_Exception
      (N : Node_Id) return Node_Id;    -- Node2
 
+   function Result_Definition
+     (N : Node_Id) return Node_Id;    -- Node4
+
+   function Return_Object_Declarations
+     (N : Node_Id) return List_Id;    -- List3
+
+   function Return_Statement_Entity
+     (N : Node_Id) return Node_Id;    -- Node5
+
    function Reverse_Present
      (N : Node_Id) return Boolean;    -- Flag15
 
@@ -7559,18 +8252,21 @@ package Sinfo is
    function Subtype_Marks
      (N : Node_Id) return List_Id;    -- List2
 
+   function Synchronized_Present
+     (N : Node_Id) return Boolean;    -- Flag7
+
    function Tagged_Present
      (N : Node_Id) return Boolean;    -- Flag15
 
    function Target_Type
      (N : Node_Id) return Entity_Id;  -- Node2
 
-   function Task_Body_Procedure
-     (N : Node_Id) return Entity_Id;  -- Node2
-
    function Task_Definition
      (N : Node_Id) return Node_Id;    -- Node3
 
+   function Task_Present
+     (N : Node_Id) return Boolean;    -- Flag5
+
    function Then_Actions
      (N : Node_Id) return List_Id;    -- List2
 
@@ -7646,6 +8342,12 @@ package Sinfo is
    procedure Set_Accept_Statement
      (N : Node_Id; Val : Node_Id);            -- Node2
 
+   procedure Set_Access_Definition
+     (N : Node_Id; Val : Node_Id);            -- Node3
+
+   procedure Set_Access_To_Subprogram_Definition
+     (N : Node_Id; Val : Node_Id);            -- Node3
+
    procedure Set_Access_Types_To_Process
      (N : Node_Id; Val : Elist_Id);           -- Elist2
 
@@ -7658,6 +8360,12 @@ package Sinfo is
    procedure Set_Acts_As_Spec
      (N : Node_Id; Val : Boolean := True);    -- Flag4
 
+   procedure Set_Actual_Designated_Subtype
+     (N : Node_Id; Val : Node_Id);            -- Node4
+
+   procedure Set_Address_Warning_Posted
+     (N : Node_Id; Val : Boolean := True);    -- Flag18
+
    procedure Set_Aggregate_Bounds
      (N : Node_Id; Val : Node_Id);            -- Node3
 
@@ -7713,7 +8421,7 @@ package Sinfo is
      (N : Node_Id; Val : Boolean := True);    -- Flag5
 
    procedure Set_Char_Literal_Value
-     (N : Node_Id; Val : Char_Code);          -- Char_Code2
+     (N : Node_Id; Val : Uint);               -- Uint2
 
    procedure Set_Chars
      (N : Node_Id; Val : Name_Id);            -- Name1
@@ -7724,9 +8432,15 @@ package Sinfo is
    procedure Set_Choice_Parameter
      (N : Node_Id; Val : Node_Id);            -- Node2
 
+   procedure Set_Coextensions
+     (N : Node_Id; Val : Elist_Id);           -- Elist4
+
    procedure Set_Choices
      (N : Node_Id; Val : List_Id);            -- List1
 
+   procedure Set_Comes_From_Extended_Return_Statement
+     (N : Node_Id; Val : Boolean := True);    -- Flag18
+
    procedure Set_Compile_Time_Known_Aggregate
      (N : Node_Id; Val : Boolean := True);    -- Flag18
 
@@ -7736,6 +8450,9 @@ package Sinfo is
    procedure Set_Component_Clauses
      (N : Node_Id; Val : List_Id);            -- List3
 
+   procedure Set_Component_Definition
+     (N : Node_Id; Val : Node_Id);            -- Node4
+
    procedure Set_Component_Items
      (N : Node_Id; Val : List_Id);            -- List3
 
@@ -7778,6 +8495,9 @@ package Sinfo is
    procedure Set_Corresponding_Body
      (N : Node_Id; Val : Node_Id);            -- Node5
 
+   procedure Set_Corresponding_Formal_Spec
+     (N : Node_Id; Val : Node_Id);            -- Node3
+
    procedure Set_Corresponding_Generic_Association
      (N : Node_Id; Val : Node_Id);            -- Node5
 
@@ -7814,9 +8534,6 @@ package Sinfo is
    procedure Set_Delay_Alternative
      (N : Node_Id; Val : Node_Id);            -- Node4
 
-   procedure Set_Delay_Finalize_Attach
-     (N : Node_Id; Val : Boolean := True);    -- Flag14
-
    procedure Set_Delay_Statement
      (N : Node_Id; Val : Node_Id);            -- Node2
 
@@ -7871,8 +8588,14 @@ package Sinfo is
    procedure Set_Do_Tag_Check
      (N : Node_Id; Val : Boolean := True);    -- Flag13
 
+   procedure Set_Elaborate_All_Desirable
+     (N : Node_Id; Val : Boolean := True);    -- Flag9
+
    procedure Set_Elaborate_All_Present
-     (N : Node_Id; Val : Boolean := True);    -- Flag15
+     (N : Node_Id; Val : Boolean := True);    -- Flag14
+
+   procedure Set_Elaborate_Desirable
+     (N : Node_Id; Val : Boolean := True);    -- Flag11
 
    procedure Set_Elaborate_Present
      (N : Node_Id; Val : Boolean := True);    -- Flag4
@@ -7929,7 +8652,10 @@ package Sinfo is
      (N : Node_Id; Val : List_Id);            -- List5
 
    procedure Set_Exception_Junk
-     (N : Node_Id; Val : Boolean := True);    -- Flag11
+     (N : Node_Id; Val : Boolean := True);    -- Flag8
+
+   procedure Set_Exception_Label
+     (N : Node_Id; Val : Node_Id);            -- Node5
 
    procedure Set_Expansion_Delayed
      (N : Node_Id; Val : Boolean := True);    -- Flag11
@@ -7976,6 +8702,12 @@ package Sinfo is
    procedure Set_From_At_Mod
      (N : Node_Id; Val : Boolean := True);    -- Flag4
 
+   procedure Set_From_At_End
+     (N : Node_Id; Val : Boolean := True);    -- Flag4
+
+   procedure Set_From_Default
+     (N : Node_Id; Val : Boolean := True);    -- Flag6
+
    procedure Set_Generic_Associations
      (N : Node_Id; Val : List_Id);            -- List3
 
@@ -8003,6 +8735,12 @@ package Sinfo is
    procedure Set_Has_Dynamic_Range_Check
      (N : Node_Id; Val : Boolean := True);    -- Flag12
 
+   procedure Set_Has_Init_Expression
+     (N : Node_Id; Val : Boolean := True);    -- Flag14
+
+   procedure Set_Has_Local_Raise
+     (N : Node_Id; Val : Boolean := True);    -- Flag8
+
    procedure Set_Has_No_Elaboration_Code
      (N : Node_Id; Val : Boolean := True);    -- Flag17
 
@@ -8012,6 +8750,12 @@ package Sinfo is
    procedure Set_Has_Private_View
      (N : Node_Id; Val : Boolean := True);    -- Flag11
 
+   procedure Set_Has_Relative_Deadline_Pragma
+     (N : Node_Id; Val : Boolean := True);    -- Flag9
+
+   procedure Set_Has_Self_Reference
+     (N : Node_Id; Val : Boolean := True);    -- Flag13
+
    procedure Set_Has_Storage_Size_Pragma
      (N : Node_Id; Val : Boolean := True);    -- Flag5
 
@@ -8033,6 +8777,12 @@ package Sinfo is
    procedure Set_Identifier
      (N : Node_Id; Val : Node_Id);            -- Node1
 
+   procedure Set_Interface_List
+     (N : Node_Id; Val : List_Id);            -- List2
+
+   procedure Set_Interface_Present
+     (N : Node_Id; Val : Boolean := True);    -- Flag16
+
    procedure Set_Implicit_With
      (N : Node_Id; Val : Boolean := True);    -- Flag16
 
@@ -8060,6 +8810,18 @@ package Sinfo is
    procedure Set_Is_Controlling_Actual
      (N : Node_Id; Val : Boolean := True);    -- Flag16
 
+   procedure Set_Is_Dynamic_Coextension
+     (N : Node_Id; Val : Boolean := True);    -- Flag18
+
+   procedure Set_Is_Entry_Barrier_Function
+     (N : Node_Id; Val : Boolean := True);    -- Flag8
+
+   procedure Set_Is_Expanded_Build_In_Place_Call
+     (N : Node_Id; Val : Boolean := True);    -- Flag11
+
+   procedure Set_Is_Folded_In_Parser
+     (N : Node_Id; Val : Boolean := True);    -- Flag4
+
    procedure Set_Is_In_Discriminant_Check
      (N : Node_Id; Val : Boolean := True);    -- Flag11
 
@@ -8078,6 +8840,9 @@ package Sinfo is
    procedure Set_Is_Protected_Subprogram_Body
      (N : Node_Id; Val : Boolean := True);    -- Flag7
 
+   procedure Set_Is_Static_Coextension
+     (N : Node_Id; Val : Boolean := True);    -- Flag14
+
    procedure Set_Is_Static_Expression
      (N : Node_Id; Val : Boolean := True);    -- Flag6
 
@@ -8123,6 +8888,12 @@ package Sinfo is
    procedure Set_Literals
      (N : Node_Id; Val : List_Id);            -- List1
 
+   procedure Set_Local_Raise_Not_OK
+     (N : Node_Id; Val : Boolean := True);    -- Flag7
+
+   procedure Set_Local_Raise_Statements
+     (N : Node_Id; Val : Elist_Id);           -- Elist1
+
    procedure Set_Loop_Actions
      (N : Node_Id; Val : List_Id);            -- List2
 
@@ -8144,6 +8915,12 @@ package Sinfo is
    procedure Set_Must_Not_Freeze
      (N : Node_Id; Val : Boolean := True);    -- Flag8
 
+   procedure Set_Must_Not_Override
+     (N : Node_Id; Val : Boolean := True);    -- Flag15
+
+   procedure Set_Must_Override
+     (N : Node_Id; Val : Boolean := True);    -- Flag14
+
    procedure Set_Name
      (N : Node_Id; Val : Node_Id);            -- Node2
 
@@ -8156,8 +8933,11 @@ package Sinfo is
    procedure Set_Next_Named_Actual
      (N : Node_Id; Val : Node_Id);            -- Node4
 
+   procedure Set_Next_Pragma
+     (N : Node_Id; Val : Node_Id);            -- Node1
+
    procedure Set_Next_Rep_Item
-     (N : Node_Id; Val : Node_Id);            -- Node4
+     (N : Node_Id; Val : Node_Id);            -- Node5
 
    procedure Set_Next_Use_Clause
      (N : Node_Id; Val : Node_Id);            -- Node3
@@ -8165,6 +8945,9 @@ package Sinfo is
    procedure Set_No_Ctrl_Actions
      (N : Node_Id; Val : Boolean := True);    -- Flag7
 
+   procedure Set_No_Elaboration_Check
+     (N : Node_Id; Val : Boolean := True);    -- Flag14
+
    procedure Set_No_Entities_Ref_In_Spec
      (N : Node_Id; Val : Boolean := True);    -- Flag8
 
@@ -8177,15 +8960,15 @@ package Sinfo is
    procedure Set_Null_Present
      (N : Node_Id; Val : Boolean := True);    -- Flag13
 
+   procedure Set_Null_Exclusion_Present
+     (N : Node_Id; Val : Boolean := True);    -- Flag11
+
    procedure Set_Null_Record_Present
      (N : Node_Id; Val : Boolean := True);    -- Flag17
 
    procedure Set_Object_Definition
      (N : Node_Id; Val : Node_Id);            -- Node4
 
-   procedure Set_OK_For_Stream
-     (N : Node_Id; Val : Boolean := True);    -- Flag4
-
    procedure Set_Original_Discriminant
      (N : Node_Id; Val : Node_Id);            -- Node2
 
@@ -8213,12 +8996,18 @@ package Sinfo is
    procedure Set_Parent_Spec
      (N : Node_Id; Val : Node_Id);            -- Node4
 
+   procedure Set_PPC_Enabled
+     (N : Node_Id; Val : Boolean := True);    -- Flag5
+
    procedure Set_Position
      (N : Node_Id; Val : Node_Id);            -- Node2
 
    procedure Set_Pragma_Argument_Associations
      (N : Node_Id; Val : List_Id);            -- List2
 
+   procedure Set_Pragma_Identifier
+     (N : Node_Id; Val : Node_Id);            -- Node4
+
    procedure Set_Pragmas_After
      (N : Node_Id; Val : List_Id);            -- List5
 
@@ -8244,7 +9033,7 @@ package Sinfo is
      (N : Node_Id; Val : Boolean := True);    -- Flag15
 
    procedure Set_Procedure_To_Call
-     (N : Node_Id; Val : Node_Id);            -- Node4
+     (N : Node_Id; Val : Node_Id);            -- Node2
 
    procedure Set_Proper_Body
      (N : Node_Id; Val : Node_Id);            -- Node1
@@ -8253,7 +9042,7 @@ package Sinfo is
      (N : Node_Id; Val : Node_Id);            -- Node3
 
    procedure Set_Protected_Present
-     (N : Node_Id; Val : Boolean := True);    -- Flag15
+     (N : Node_Id; Val : Boolean := True);    -- Flag6
 
    procedure Set_Raises_Constraint_Error
      (N : Node_Id; Val : Boolean := True);    -- Flag7
@@ -8279,9 +9068,18 @@ package Sinfo is
    procedure Set_Redundant_Use
      (N : Node_Id; Val : Boolean := True);    -- Flag13
 
-   procedure Set_Return_Type
+   procedure Set_Renaming_Exception
      (N : Node_Id; Val : Node_Id);            -- Node2
 
+   procedure Set_Result_Definition
+     (N : Node_Id; Val : Node_Id);            -- Node4
+
+   procedure Set_Return_Object_Declarations
+     (N : Node_Id; Val : List_Id);            -- List3
+
+   procedure Set_Return_Statement_Entity
+     (N : Node_Id; Val : Node_Id);            -- Node5
+
    procedure Set_Reverse_Present
      (N : Node_Id; Val : Boolean := True);    -- Flag15
 
@@ -8333,18 +9131,21 @@ package Sinfo is
    procedure Set_Subtype_Marks
      (N : Node_Id; Val : List_Id);            -- List2
 
+   procedure Set_Synchronized_Present
+     (N : Node_Id; Val : Boolean := True);    -- Flag7
+
    procedure Set_Tagged_Present
      (N : Node_Id; Val : Boolean := True);    -- Flag15
 
    procedure Set_Target_Type
      (N : Node_Id; Val : Entity_Id);          -- Node2
 
-   procedure Set_Task_Body_Procedure
-     (N : Node_Id; Val : Entity_Id);          -- Node2
-
    procedure Set_Task_Definition
      (N : Node_Id; Val : Node_Id);            -- Node3
 
+   procedure Set_Task_Present
+     (N : Node_Id; Val : Boolean := True);    -- Flag5
+
    procedure Set_Then_Actions
      (N : Node_Id; Val : List_Id);            -- List2
 
@@ -8416,6 +9217,1623 @@ package Sinfo is
    --  other words, End_Span is set to the difference between S and
    --  Sloc (N), the starting location.
 
+   --------------------------------
+   -- Node_Kind Membership Tests --
+   --------------------------------
+
+   --  The following functions allow a convenient notation for testing whether
+   --  a Node_Kind value matches any one of a list of possible values. In each
+   --  case True is returned if the given T argument is equal to any of the V
+   --  arguments. Note that there is a similar set of functions defined in
+   --  Atree where the first argument is a Node_Id whose Nkind field is tested.
+
+   function Nkind_In
+     (T  : Node_Kind;
+      V1 : Node_Kind;
+      V2 : Node_Kind) return Boolean;
+
+   function Nkind_In
+     (T  : Node_Kind;
+      V1 : Node_Kind;
+      V2 : Node_Kind;
+      V3 : Node_Kind) return Boolean;
+
+   function Nkind_In
+     (T  : Node_Kind;
+      V1 : Node_Kind;
+      V2 : Node_Kind;
+      V3 : Node_Kind;
+      V4 : Node_Kind) return Boolean;
+
+   function Nkind_In
+     (T  : Node_Kind;
+      V1 : Node_Kind;
+      V2 : Node_Kind;
+      V3 : Node_Kind;
+      V4 : Node_Kind;
+      V5 : Node_Kind) return Boolean;
+
+   function Nkind_In
+     (T  : Node_Kind;
+      V1 : Node_Kind;
+      V2 : Node_Kind;
+      V3 : Node_Kind;
+      V4 : Node_Kind;
+      V5 : Node_Kind;
+      V6 : Node_Kind) return Boolean;
+
+   function Nkind_In
+     (T  : Node_Kind;
+      V1 : Node_Kind;
+      V2 : Node_Kind;
+      V3 : Node_Kind;
+      V4 : Node_Kind;
+      V5 : Node_Kind;
+      V6 : Node_Kind;
+      V7 : Node_Kind) return Boolean;
+
+   function Nkind_In
+     (T  : Node_Kind;
+      V1 : Node_Kind;
+      V2 : Node_Kind;
+      V3 : Node_Kind;
+      V4 : Node_Kind;
+      V5 : Node_Kind;
+      V6 : Node_Kind;
+      V7 : Node_Kind;
+      V8 : Node_Kind) return Boolean;
+
+   pragma Inline (Nkind_In);
+   --  Inline all above functions
+
+   -----------------------
+   -- Utility Functions --
+   -----------------------
+
+   function Pragma_Name (N : Node_Id) return Name_Id;
+   pragma Inline (Pragma_Name);
+   --  Convenient function to obtain Chars field of Pragma_Identifier
+
+   -----------------------------
+   -- Syntactic Parent Tables --
+   -----------------------------
+
+   --  These tables show for each node, and for each of the five fields,
+   --  whether the corresponding field is syntactic (True) or semantic (False).
+   --  Unused entries are also set to False.
+
+   subtype Field_Num is Natural range 1 .. 5;
+
+   Is_Syntactic_Field : constant array (Node_Kind, Field_Num) of Boolean := (
+
+   --  Following entries can be built automatically from the sinfo sources
+   --  using the makeisf utility (currently this program is in spitbol).
+
+     N_Identifier =>
+       (1 => True,    --  Chars (Name1)
+        2 => False,   --  Original_Discriminant (Node2-Sem)
+        3 => False,   --  unused
+        4 => False,   --  Entity (Node4-Sem)
+        5 => False),  --  Etype (Node5-Sem)
+
+     N_Integer_Literal =>
+       (1 => False,   --  unused
+        2 => False,   --  Original_Entity (Node2-Sem)
+        3 => True,    --  Intval (Uint3)
+        4 => False,   --  unused
+        5 => False),  --  Etype (Node5-Sem)
+
+     N_Real_Literal =>
+       (1 => False,   --  unused
+        2 => False,   --  Original_Entity (Node2-Sem)
+        3 => True,    --  Realval (Ureal3)
+        4 => False,   --  Corresponding_Integer_Value (Uint4-Sem)
+        5 => False),  --  Etype (Node5-Sem)
+
+     N_Character_Literal =>
+       (1 => True,    --  Chars (Name1)
+        2 => True,    --  Char_Literal_Value (Uint2)
+        3 => False,   --  unused
+        4 => False,   --  Entity (Node4-Sem)
+        5 => False),  --  Etype (Node5-Sem)
+
+     N_String_Literal =>
+       (1 => False,   --  unused
+        2 => False,   --  unused
+        3 => True,    --  Strval (Str3)
+        4 => False,   --  unused
+        5 => False),  --  Etype (Node5-Sem)
+
+     N_Pragma =>
+       (1 => False,   --  Next_Pragma (Node1-Sem)
+        2 => True,    --  Pragma_Argument_Associations (List2)
+        3 => True,    --  Debug_Statement (Node3)
+        4 => True,    --  Pragma_Identifier (Node4)
+        5 => False),  --  Next_Rep_Item (Node5-Sem)
+
+     N_Pragma_Argument_Association =>
+       (1 => True,    --  Chars (Name1)
+        2 => False,   --  unused
+        3 => True,    --  Expression (Node3)
+        4 => False,   --  unused
+        5 => False),  --  unused
+
+     N_Defining_Identifier =>
+       (1 => True,    --  Chars (Name1)
+        2 => False,   --  Next_Entity (Node2-Sem)
+        3 => False,   --  Scope (Node3-Sem)
+        4 => False,   --  unused
+        5 => False),  --  Etype (Node5-Sem)
+
+     N_Full_Type_Declaration =>
+       (1 => True,    --  Defining_Identifier (Node1)
+        2 => False,   --  unused
+        3 => True,    --  Type_Definition (Node3)
+        4 => True,    --  Discriminant_Specifications (List4)
+        5 => False),  --  unused
+
+     N_Subtype_Declaration =>
+       (1 => True,    --  Defining_Identifier (Node1)
+        2 => False,   --  unused
+        3 => False,   --  unused
+        4 => False,   --  Generic_Parent_Type (Node4-Sem)
+        5 => True),   --  Subtype_Indication (Node5)
+
+     N_Subtype_Indication =>
+       (1 => False,   --  unused
+        2 => False,   --  unused
+        3 => True,    --  Constraint (Node3)
+        4 => True,    --  Subtype_Mark (Node4)
+        5 => False),  --  Etype (Node5-Sem)
+
+     N_Object_Declaration =>
+       (1 => True,    --  Defining_Identifier (Node1)
+        2 => False,   --  Handler_List_Entry (Node2-Sem)
+        3 => True,    --  Expression (Node3)
+        4 => True,    --  Object_Definition (Node4)
+        5 => False),  --  Corresponding_Generic_Association (Node5-Sem)
+
+     N_Number_Declaration =>
+       (1 => True,    --  Defining_Identifier (Node1)
+        2 => False,   --  unused
+        3 => True,    --  Expression (Node3)
+        4 => False,   --  unused
+        5 => False),  --  unused
+
+     N_Derived_Type_Definition =>
+       (1 => False,   --  unused
+        2 => True,    --  Interface_List (List2)
+        3 => True,    --  Record_Extension_Part (Node3)
+        4 => False,   --  unused
+        5 => True),   --  Subtype_Indication (Node5)
+
+     N_Range_Constraint =>
+       (1 => False,   --  unused
+        2 => False,   --  unused
+        3 => False,   --  unused
+        4 => True,    --  Range_Expression (Node4)
+        5 => False),  --  unused
+
+     N_Range =>
+       (1 => True,    --  Low_Bound (Node1)
+        2 => True,    --  High_Bound (Node2)
+        3 => False,   --  unused
+        4 => False,   --  unused
+        5 => False),  --  Etype (Node5-Sem)
+
+     N_Enumeration_Type_Definition =>
+       (1 => True,    --  Literals (List1)
+        2 => False,   --  unused
+        3 => False,   --  unused
+        4 => True,    --  End_Label (Node4)
+        5 => False),  --  unused
+
+     N_Defining_Character_Literal =>
+       (1 => True,    --  Chars (Name1)
+        2 => False,   --  Next_Entity (Node2-Sem)
+        3 => False,   --  Scope (Node3-Sem)
+        4 => False,   --  unused
+        5 => False),  --  Etype (Node5-Sem)
+
+     N_Signed_Integer_Type_Definition =>
+       (1 => True,    --  Low_Bound (Node1)
+        2 => True,    --  High_Bound (Node2)
+        3 => False,   --  unused
+        4 => False,   --  unused
+        5 => False),  --  unused
+
+     N_Modular_Type_Definition =>
+       (1 => False,   --  unused
+        2 => False,   --  unused
+        3 => True,    --  Expression (Node3)
+        4 => False,   --  unused
+        5 => False),  --  unused
+
+     N_Floating_Point_Definition =>
+       (1 => False,   --  unused
+        2 => True,    --  Digits_Expression (Node2)
+        3 => False,   --  unused
+        4 => True,    --  Real_Range_Specification (Node4)
+        5 => False),  --  unused
+
+     N_Real_Range_Specification =>
+       (1 => True,    --  Low_Bound (Node1)
+        2 => True,    --  High_Bound (Node2)
+        3 => False,   --  unused
+        4 => False,   --  unused
+        5 => False),  --  unused
+
+     N_Ordinary_Fixed_Point_Definition =>
+       (1 => False,   --  unused
+        2 => False,   --  unused
+        3 => True,    --  Delta_Expression (Node3)
+        4 => True,    --  Real_Range_Specification (Node4)
+        5 => False),  --  unused
+
+     N_Decimal_Fixed_Point_Definition =>
+       (1 => False,   --  unused
+        2 => True,    --  Digits_Expression (Node2)
+        3 => True,    --  Delta_Expression (Node3)
+        4 => True,    --  Real_Range_Specification (Node4)
+        5 => False),  --  unused
+
+     N_Digits_Constraint =>
+       (1 => False,   --  unused
+        2 => True,    --  Digits_Expression (Node2)
+        3 => False,   --  unused
+        4 => True,    --  Range_Constraint (Node4)
+        5 => False),  --  unused
+
+     N_Unconstrained_Array_Definition =>
+       (1 => False,   --  unused
+        2 => True,    --  Subtype_Marks (List2)
+        3 => False,   --  unused
+        4 => True,    --  Component_Definition (Node4)
+        5 => False),  --  unused
+
+     N_Constrained_Array_Definition =>
+       (1 => False,   --  unused
+        2 => True,    --  Discrete_Subtype_Definitions (List2)
+        3 => False,   --  unused
+        4 => True,    --  Component_Definition (Node4)
+        5 => False),  --  unused
+
+     N_Component_Definition =>
+       (1 => False,   --  unused
+        2 => False,   --  unused
+        3 => True,    --  Access_Definition (Node3)
+        4 => False,   --  unused
+        5 => True),   --  Subtype_Indication (Node5)
+
+     N_Discriminant_Specification =>
+       (1 => True,    --  Defining_Identifier (Node1)
+        2 => False,   --  unused
+        3 => True,    --  Expression (Node3)
+        4 => False,   --  unused
+        5 => True),   --  Discriminant_Type (Node5)
+
+     N_Index_Or_Discriminant_Constraint =>
+       (1 => True,    --  Constraints (List1)
+        2 => False,   --  unused
+        3 => False,   --  unused
+        4 => False,   --  unused
+        5 => False),  --  unused
+
+     N_Discriminant_Association =>
+       (1 => True,    --  Selector_Names (List1)
+        2 => False,   --  unused
+        3 => True,    --  Expression (Node3)
+        4 => False,   --  unused
+        5 => False),  --  unused
+
+     N_Record_Definition =>
+       (1 => True,    --  Component_List (Node1)
+        2 => True,    --  Interface_List (List2)
+        3 => False,   --  unused
+        4 => True,    --  End_Label (Node4)
+        5 => False),  --  unused
+
+     N_Component_List =>
+       (1 => False,   --  unused
+        2 => False,   --  unused
+        3 => True,    --  Component_Items (List3)
+        4 => True,    --  Variant_Part (Node4)
+        5 => False),  --  unused
+
+     N_Component_Declaration =>
+       (1 => True,    --  Defining_Identifier (Node1)
+        2 => False,   --  unused
+        3 => True,    --  Expression (Node3)
+        4 => True,    --  Component_Definition (Node4)
+        5 => False),  --  unused
+
+     N_Variant_Part =>
+       (1 => True,    --  Variants (List1)
+        2 => True,    --  Name (Node2)
+        3 => False,   --  unused
+        4 => False,   --  unused
+        5 => False),  --  unused
+
+     N_Variant =>
+       (1 => True,    --  Component_List (Node1)
+        2 => False,   --  Enclosing_Variant (Node2-Sem)
+        3 => False,   --  Present_Expr (Uint3-Sem)
+        4 => True,    --  Discrete_Choices (List4)
+        5 => False),  --  Dcheck_Function (Node5-Sem)
+
+     N_Others_Choice =>
+       (1 => False,   --  Others_Discrete_Choices (List1-Sem)
+        2 => False,   --  unused
+        3 => False,   --  unused
+        4 => False,   --  unused
+        5 => False),  --  unused
+
+     N_Access_To_Object_Definition =>
+       (1 => False,   --  unused
+        2 => False,   --  unused
+        3 => False,   --  unused
+        4 => False,   --  unused
+        5 => True),   --  Subtype_Indication (Node5)
+
+     N_Access_Function_Definition =>
+       (1 => False,   --  unused
+        2 => False,   --  unused
+        3 => True,    --  Parameter_Specifications (List3)
+        4 => True,    --  Result_Definition (Node4)
+        5 => False),  --  unused
+
+     N_Access_Procedure_Definition =>
+       (1 => False,   --  unused
+        2 => False,   --  unused
+        3 => True,    --  Parameter_Specifications (List3)
+        4 => False,   --  unused
+        5 => False),  --  unused
+
+     N_Access_Definition =>
+       (1 => False,   --  unused
+        2 => False,   --  unused
+        3 => True,    --  Access_To_Subprogram_Definition (Node3)
+        4 => True,    --  Subtype_Mark (Node4)
+        5 => False),  --  unused
+
+     N_Incomplete_Type_Declaration =>
+       (1 => True,    --  Defining_Identifier (Node1)
+        2 => False,   --  unused
+        3 => False,   --  unused
+        4 => True,    --  Discriminant_Specifications (List4)
+        5 => False),  --  unused
+
+     N_Explicit_Dereference =>
+       (1 => False,   --  unused
+        2 => False,   --  unused
+        3 => True,    --  Prefix (Node3)
+        4 => False,   --  Actual_Designated_Subtype (Node4-Sem)
+        5 => False),  --  Etype (Node5-Sem)
+
+     N_Indexed_Component =>
+       (1 => True,    --  Expressions (List1)
+        2 => False,   --  unused
+        3 => True,    --  Prefix (Node3)
+        4 => False,   --  unused
+        5 => False),  --  Etype (Node5-Sem)
+
+     N_Slice =>
+       (1 => False,   --  unused
+        2 => False,   --  unused
+        3 => True,    --  Prefix (Node3)
+        4 => True,    --  Discrete_Range (Node4)
+        5 => False),  --  Etype (Node5-Sem)
+
+     N_Selected_Component =>
+       (1 => False,   --  unused
+        2 => True,    --  Selector_Name (Node2)
+        3 => True,    --  Prefix (Node3)
+        4 => False,   --  unused
+        5 => False),  --  Etype (Node5-Sem)
+
+     N_Attribute_Reference =>
+       (1 => True,    --  Expressions (List1)
+        2 => True,    --  Attribute_Name (Name2)
+        3 => True,    --  Prefix (Node3)
+        4 => False,   --  Entity (Node4-Sem)
+        5 => False),  --  Etype (Node5-Sem)
+
+     N_Aggregate =>
+       (1 => True,    --  Expressions (List1)
+        2 => True,    --  Component_Associations (List2)
+        3 => False,   --  Aggregate_Bounds (Node3-Sem)
+        4 => False,   --  unused
+        5 => False),  --  Etype (Node5-Sem)
+
+     N_Component_Association =>
+       (1 => True,    --  Choices (List1)
+        2 => False,   --  Loop_Actions (List2-Sem)
+        3 => True,    --  Expression (Node3)
+        4 => False,   --  unused
+        5 => False),  --  unused
+
+     N_Extension_Aggregate =>
+       (1 => True,    --  Expressions (List1)
+        2 => True,    --  Component_Associations (List2)
+        3 => True,    --  Ancestor_Part (Node3)
+        4 => False,   --  unused
+        5 => False),  --  Etype (Node5-Sem)
+
+     N_Null =>
+       (1 => False,   --  unused
+        2 => False,   --  unused
+        3 => False,   --  unused
+        4 => False,   --  unused
+        5 => False),  --  Etype (Node5-Sem)
+
+     N_And_Then =>
+       (1 => False,   --  Actions (List1-Sem)
+        2 => True,    --  Left_Opnd (Node2)
+        3 => True,    --  Right_Opnd (Node3)
+        4 => False,   --  unused
+        5 => False),  --  Etype (Node5-Sem)
+
+     N_Or_Else =>
+       (1 => False,   --  Actions (List1-Sem)
+        2 => True,    --  Left_Opnd (Node2)
+        3 => True,    --  Right_Opnd (Node3)
+        4 => False,   --  unused
+        5 => False),  --  Etype (Node5-Sem)
+
+     N_In =>
+       (1 => False,   --  unused
+        2 => True,    --  Left_Opnd (Node2)
+        3 => True,    --  Right_Opnd (Node3)
+        4 => False,   --  unused
+        5 => False),  --  Etype (Node5-Sem)
+
+     N_Not_In =>
+       (1 => False,   --  unused
+        2 => True,    --  Left_Opnd (Node2)
+        3 => True,    --  Right_Opnd (Node3)
+        4 => False,   --  unused
+        5 => False),  --  Etype (Node5-Sem)
+
+     N_Op_And =>
+       (1 => True,    --  Chars (Name1)
+        2 => True,    --  Left_Opnd (Node2)
+        3 => True,    --  Right_Opnd (Node3)
+        4 => False,   --  Entity (Node4-Sem)
+        5 => False),  --  Etype (Node5-Sem)
+
+     N_Op_Or =>
+       (1 => True,    --  Chars (Name1)
+        2 => True,    --  Left_Opnd (Node2)
+        3 => True,    --  Right_Opnd (Node3)
+        4 => False,   --  Entity (Node4-Sem)
+        5 => False),  --  Etype (Node5-Sem)
+
+     N_Op_Xor =>
+       (1 => True,    --  Chars (Name1)
+        2 => True,    --  Left_Opnd (Node2)
+        3 => True,    --  Right_Opnd (Node3)
+        4 => False,   --  Entity (Node4-Sem)
+        5 => False),  --  Etype (Node5-Sem)
+
+     N_Op_Eq =>
+       (1 => True,    --  Chars (Name1)
+        2 => True,    --  Left_Opnd (Node2)
+        3 => True,    --  Right_Opnd (Node3)
+        4 => False,   --  Entity (Node4-Sem)
+        5 => False),  --  Etype (Node5-Sem)
+
+     N_Op_Ne =>
+       (1 => True,    --  Chars (Name1)
+        2 => True,    --  Left_Opnd (Node2)
+        3 => True,    --  Right_Opnd (Node3)
+        4 => False,   --  Entity (Node4-Sem)
+        5 => False),  --  Etype (Node5-Sem)
+
+     N_Op_Lt =>
+       (1 => True,    --  Chars (Name1)
+        2 => True,    --  Left_Opnd (Node2)
+        3 => True,    --  Right_Opnd (Node3)
+        4 => False,   --  Entity (Node4-Sem)
+        5 => False),  --  Etype (Node5-Sem)
+
+     N_Op_Le =>
+       (1 => True,    --  Chars (Name1)
+        2 => True,    --  Left_Opnd (Node2)
+        3 => True,    --  Right_Opnd (Node3)
+        4 => False,   --  Entity (Node4-Sem)
+        5 => False),  --  Etype (Node5-Sem)
+
+     N_Op_Gt =>
+       (1 => True,    --  Chars (Name1)
+        2 => True,    --  Left_Opnd (Node2)
+        3 => True,    --  Right_Opnd (Node3)
+        4 => False,   --  Entity (Node4-Sem)
+        5 => False),  --  Etype (Node5-Sem)
+
+     N_Op_Ge =>
+       (1 => True,    --  Chars (Name1)
+        2 => True,    --  Left_Opnd (Node2)
+        3 => True,    --  Right_Opnd (Node3)
+        4 => False,   --  Entity (Node4-Sem)
+        5 => False),  --  Etype (Node5-Sem)
+
+     N_Op_Add =>
+       (1 => True,    --  Chars (Name1)
+        2 => True,    --  Left_Opnd (Node2)
+        3 => True,    --  Right_Opnd (Node3)
+        4 => False,   --  Entity (Node4-Sem)
+        5 => False),  --  Etype (Node5-Sem)
+
+     N_Op_Subtract =>
+       (1 => True,    --  Chars (Name1)
+        2 => True,    --  Left_Opnd (Node2)
+        3 => True,    --  Right_Opnd (Node3)
+        4 => False,   --  Entity (Node4-Sem)
+        5 => False),  --  Etype (Node5-Sem)
+
+     N_Op_Concat =>
+       (1 => True,    --  Chars (Name1)
+        2 => True,    --  Left_Opnd (Node2)
+        3 => True,    --  Right_Opnd (Node3)
+        4 => False,   --  Entity (Node4-Sem)
+        5 => False),  --  Etype (Node5-Sem)
+
+     N_Op_Multiply =>
+       (1 => True,    --  Chars (Name1)
+        2 => True,    --  Left_Opnd (Node2)
+        3 => True,    --  Right_Opnd (Node3)
+        4 => False,   --  Entity (Node4-Sem)
+        5 => False),  --  Etype (Node5-Sem)
+
+     N_Op_Divide =>
+       (1 => True,    --  Chars (Name1)
+        2 => True,    --  Left_Opnd (Node2)
+        3 => True,    --  Right_Opnd (Node3)
+        4 => False,   --  Entity (Node4-Sem)
+        5 => False),  --  Etype (Node5-Sem)
+
+     N_Op_Mod =>
+       (1 => True,    --  Chars (Name1)
+        2 => True,    --  Left_Opnd (Node2)
+        3 => True,    --  Right_Opnd (Node3)
+        4 => False,   --  Entity (Node4-Sem)
+        5 => False),  --  Etype (Node5-Sem)
+
+     N_Op_Rem =>
+       (1 => True,    --  Chars (Name1)
+        2 => True,    --  Left_Opnd (Node2)
+        3 => True,    --  Right_Opnd (Node3)
+        4 => False,   --  Entity (Node4-Sem)
+        5 => False),  --  Etype (Node5-Sem)
+
+     N_Op_Expon =>
+       (1 => True,    --  Chars (Name1)
+        2 => True,    --  Left_Opnd (Node2)
+        3 => True,    --  Right_Opnd (Node3)
+        4 => False,   --  Entity (Node4-Sem)
+        5 => False),  --  Etype (Node5-Sem)
+
+     N_Op_Plus =>
+       (1 => True,    --  Chars (Name1)
+        2 => False,   --  unused
+        3 => True,    --  Right_Opnd (Node3)
+        4 => False,   --  Entity (Node4-Sem)
+        5 => False),  --  Etype (Node5-Sem)
+
+     N_Op_Minus =>
+       (1 => True,    --  Chars (Name1)
+        2 => False,   --  unused
+        3 => True,    --  Right_Opnd (Node3)
+        4 => False,   --  Entity (Node4-Sem)
+        5 => False),  --  Etype (Node5-Sem)
+
+     N_Op_Abs =>
+       (1 => True,    --  Chars (Name1)
+        2 => False,   --  unused
+        3 => True,    --  Right_Opnd (Node3)
+        4 => False,   --  Entity (Node4-Sem)
+        5 => False),  --  Etype (Node5-Sem)
+
+     N_Op_Not =>
+       (1 => True,    --  Chars (Name1)
+        2 => False,   --  unused
+        3 => True,    --  Right_Opnd (Node3)
+        4 => False,   --  Entity (Node4-Sem)
+        5 => False),  --  Etype (Node5-Sem)
+
+     N_Type_Conversion =>
+       (1 => False,   --  unused
+        2 => False,   --  unused
+        3 => True,    --  Expression (Node3)
+        4 => True,    --  Subtype_Mark (Node4)
+        5 => False),  --  Etype (Node5-Sem)
+
+     N_Qualified_Expression =>
+       (1 => False,   --  unused
+        2 => False,   --  unused
+        3 => True,    --  Expression (Node3)
+        4 => True,    --  Subtype_Mark (Node4)
+        5 => False),  --  Etype (Node5-Sem)
+
+     N_Allocator =>
+       (1 => False,   --  Storage_Pool (Node1-Sem)
+        2 => False,   --  Procedure_To_Call (Node2-Sem)
+        3 => True,    --  Expression (Node3)
+        4 => False,   --  Coextensions (Elist4-Sem)
+        5 => False),  --  Etype (Node5-Sem)
+
+     N_Null_Statement =>
+       (1 => False,   --  unused
+        2 => False,   --  unused
+        3 => False,   --  unused
+        4 => False,   --  unused
+        5 => False),  --  unused
+
+     N_Label =>
+       (1 => True,    --  Identifier (Node1)
+        2 => False,   --  unused
+        3 => False,   --  unused
+        4 => False,   --  unused
+        5 => False),  --  unused
+
+     N_Assignment_Statement =>
+       (1 => False,   --  unused
+        2 => True,    --  Name (Node2)
+        3 => True,    --  Expression (Node3)
+        4 => False,   --  unused
+        5 => False),  --  unused
+
+     N_If_Statement =>
+       (1 => True,    --  Condition (Node1)
+        2 => True,    --  Then_Statements (List2)
+        3 => True,    --  Elsif_Parts (List3)
+        4 => True,    --  Else_Statements (List4)
+        5 => True),   --  End_Span (Uint5)
+
+     N_Elsif_Part =>
+       (1 => True,    --  Condition (Node1)
+        2 => True,    --  Then_Statements (List2)
+        3 => False,   --  Condition_Actions (List3-Sem)
+        4 => False,   --  unused
+        5 => False),  --  unused
+
+     N_Case_Statement =>
+       (1 => False,   --  unused
+        2 => False,   --  unused
+        3 => True,    --  Expression (Node3)
+        4 => True,    --  Alternatives (List4)
+        5 => True),   --  End_Span (Uint5)
+
+     N_Case_Statement_Alternative =>
+       (1 => False,   --  unused
+        2 => False,   --  unused
+        3 => True,    --  Statements (List3)
+        4 => True,    --  Discrete_Choices (List4)
+        5 => False),  --  unused
+
+     N_Loop_Statement =>
+       (1 => True,    --  Identifier (Node1)
+        2 => True,    --  Iteration_Scheme (Node2)
+        3 => True,    --  Statements (List3)
+        4 => True,    --  End_Label (Node4)
+        5 => False),  --  unused
+
+     N_Iteration_Scheme =>
+       (1 => True,    --  Condition (Node1)
+        2 => False,   --  unused
+        3 => False,   --  Condition_Actions (List3-Sem)
+        4 => True,    --  Loop_Parameter_Specification (Node4)
+        5 => False),  --  unused
+
+     N_Loop_Parameter_Specification =>
+       (1 => True,    --  Defining_Identifier (Node1)
+        2 => False,   --  unused
+        3 => False,   --  unused
+        4 => True,    --  Discrete_Subtype_Definition (Node4)
+        5 => False),  --  unused
+
+     N_Block_Statement =>
+       (1 => True,    --  Identifier (Node1)
+        2 => True,    --  Declarations (List2)
+        3 => False,   --  Activation_Chain_Entity (Node3-Sem)
+        4 => True,    --  Handled_Statement_Sequence (Node4)
+        5 => False),  --  unused
+
+     N_Exit_Statement =>
+       (1 => True,    --  Condition (Node1)
+        2 => True,    --  Name (Node2)
+        3 => False,   --  unused
+        4 => False,   --  unused
+        5 => False),  --  unused
+
+     N_Goto_Statement =>
+       (1 => False,   --  unused
+        2 => True,    --  Name (Node2)
+        3 => False,   --  unused
+        4 => False,   --  unused
+        5 => False),  --  unused
+
+     N_Subprogram_Declaration =>
+       (1 => True,    --  Specification (Node1)
+        2 => False,   --  unused
+        3 => False,   --  Body_To_Inline (Node3-Sem)
+        4 => False,   --  Parent_Spec (Node4-Sem)
+        5 => False),  --  Corresponding_Body (Node5-Sem)
+
+     N_Abstract_Subprogram_Declaration =>
+       (1 => True,    --  Specification (Node1)
+        2 => False,   --  unused
+        3 => False,   --  unused
+        4 => False,   --  unused
+        5 => False),  --  unused
+
+     N_Function_Specification =>
+       (1 => True,    --  Defining_Unit_Name (Node1)
+        2 => False,   --  Elaboration_Boolean (Node2-Sem)
+        3 => True,    --  Parameter_Specifications (List3)
+        4 => True,    --  Result_Definition (Node4)
+        5 => False),  --  Generic_Parent (Node5-Sem)
+
+     N_Procedure_Specification =>
+       (1 => True,    --  Defining_Unit_Name (Node1)
+        2 => False,   --  Elaboration_Boolean (Node2-Sem)
+        3 => True,    --  Parameter_Specifications (List3)
+        4 => False,   --  unused
+        5 => False),  --  Generic_Parent (Node5-Sem)
+
+     N_Designator =>
+       (1 => True,    --  Identifier (Node1)
+        2 => True,    --  Name (Node2)
+        3 => False,   --  unused
+        4 => False,   --  unused
+        5 => False),  --  unused
+
+     N_Defining_Program_Unit_Name =>
+       (1 => True,    --  Defining_Identifier (Node1)
+        2 => True,    --  Name (Node2)
+        3 => False,   --  unused
+        4 => False,   --  unused
+        5 => False),  --  unused
+
+     N_Operator_Symbol =>
+       (1 => True,    --  Chars (Name1)
+        2 => False,   --  unused
+        3 => True,    --  Strval (Str3)
+        4 => False,   --  Entity (Node4-Sem)
+        5 => False),  --  Etype (Node5-Sem)
+
+     N_Defining_Operator_Symbol =>
+       (1 => True,    --  Chars (Name1)
+        2 => False,   --  Next_Entity (Node2-Sem)
+        3 => False,   --  Scope (Node3-Sem)
+        4 => False,   --  unused
+        5 => False),  --  Etype (Node5-Sem)
+
+     N_Parameter_Specification =>
+       (1 => True,    --  Defining_Identifier (Node1)
+        2 => True,    --  Parameter_Type (Node2)
+        3 => True,    --  Expression (Node3)
+        4 => False,   --  unused
+        5 => False),  --  Default_Expression (Node5-Sem)
+
+     N_Subprogram_Body =>
+       (1 => True,    --  Specification (Node1)
+        2 => True,    --  Declarations (List2)
+        3 => False,   --  Activation_Chain_Entity (Node3-Sem)
+        4 => True,    --  Handled_Statement_Sequence (Node4)
+        5 => False),  --  Corresponding_Spec (Node5-Sem)
+
+     N_Procedure_Call_Statement =>
+       (1 => False,   --  Controlling_Argument (Node1-Sem)
+        2 => True,    --  Name (Node2)
+        3 => True,    --  Parameter_Associations (List3)
+        4 => False,   --  First_Named_Actual (Node4-Sem)
+        5 => False),  --  Etype (Node5-Sem)
+
+     N_Function_Call =>
+       (1 => False,   --  Controlling_Argument (Node1-Sem)
+        2 => True,    --  Name (Node2)
+        3 => True,    --  Parameter_Associations (List3)
+        4 => False,   --  First_Named_Actual (Node4-Sem)
+        5 => False),  --  Etype (Node5-Sem)
+
+     N_Parameter_Association =>
+       (1 => False,   --  unused
+        2 => True,    --  Selector_Name (Node2)
+        3 => True,    --  Explicit_Actual_Parameter (Node3)
+        4 => False,   --  Next_Named_Actual (Node4-Sem)
+        5 => False),  --  unused
+
+     N_Return_Statement =>
+       (1 => False,   --  Storage_Pool (Node1-Sem)
+        2 => False,   --  Procedure_To_Call (Node2-Sem)
+        3 => True,    --  Expression (Node3)
+        4 => False,   --  unused
+        5 => False),  --  Return_Statement_Entity (Node5-Sem)
+
+     N_Extended_Return_Statement =>
+       (1 => False,   --  Storage_Pool (Node1-Sem)
+        2 => False,   --  Procedure_To_Call (Node2-Sem)
+        3 => True,    --  Return_Object_Declarations (List3)
+        4 => True,    --  Handled_Statement_Sequence (Node4)
+        5 => False),  --  Return_Statement_Entity (Node5-Sem)
+
+     N_Package_Declaration =>
+       (1 => True,    --  Specification (Node1)
+        2 => False,   --  unused
+        3 => False,   --  Activation_Chain_Entity (Node3-Sem)
+        4 => False,   --  Parent_Spec (Node4-Sem)
+        5 => False),  --  Corresponding_Body (Node5-Sem)
+
+     N_Package_Specification =>
+       (1 => True,    --  Defining_Unit_Name (Node1)
+        2 => True,    --  Visible_Declarations (List2)
+        3 => True,    --  Private_Declarations (List3)
+        4 => True,    --  End_Label (Node4)
+        5 => False),  --  Generic_Parent (Node5-Sem)
+
+     N_Package_Body =>
+       (1 => True,    --  Defining_Unit_Name (Node1)
+        2 => True,    --  Declarations (List2)
+        3 => False,   --  unused
+        4 => True,    --  Handled_Statement_Sequence (Node4)
+        5 => False),  --  Corresponding_Spec (Node5-Sem)
+
+     N_Private_Type_Declaration =>
+       (1 => True,    --  Defining_Identifier (Node1)
+        2 => False,   --  unused
+        3 => False,   --  unused
+        4 => True,    --  Discriminant_Specifications (List4)
+        5 => False),  --  unused
+
+     N_Private_Extension_Declaration =>
+       (1 => True,    --  Defining_Identifier (Node1)
+        2 => True,    --  Interface_List (List2)
+        3 => False,   --  unused
+        4 => True,    --  Discriminant_Specifications (List4)
+        5 => True),   --  Subtype_Indication (Node5)
+
+     N_Use_Package_Clause =>
+       (1 => False,   --  unused
+        2 => True,    --  Names (List2)
+        3 => False,   --  Next_Use_Clause (Node3-Sem)
+        4 => False,   --  Hidden_By_Use_Clause (Elist4-Sem)
+        5 => False),  --  unused
+
+     N_Use_Type_Clause =>
+       (1 => False,   --  unused
+        2 => True,    --  Subtype_Marks (List2)
+        3 => False,   --  Next_Use_Clause (Node3-Sem)
+        4 => False,   --  Hidden_By_Use_Clause (Elist4-Sem)
+        5 => False),  --  unused
+
+     N_Object_Renaming_Declaration =>
+       (1 => True,    --  Defining_Identifier (Node1)
+        2 => True,    --  Name (Node2)
+        3 => True,    --  Access_Definition (Node3)
+        4 => True,    --  Subtype_Mark (Node4)
+        5 => False),  --  Corresponding_Generic_Association (Node5-Sem)
+
+     N_Exception_Renaming_Declaration =>
+       (1 => True,    --  Defining_Identifier (Node1)
+        2 => True,    --  Name (Node2)
+        3 => False,   --  unused
+        4 => False,   --  unused
+        5 => False),  --  unused
+
+     N_Package_Renaming_Declaration =>
+       (1 => True,    --  Defining_Unit_Name (Node1)
+        2 => True,    --  Name (Node2)
+        3 => False,   --  unused
+        4 => False,   --  Parent_Spec (Node4-Sem)
+        5 => False),  --  unused
+
+     N_Subprogram_Renaming_Declaration =>
+       (1 => True,    --  Specification (Node1)
+        2 => True,    --  Name (Node2)
+        3 => False,   --  Corresponding_Formal_Spec (Node3-Sem)
+        4 => False,   --  Parent_Spec (Node4-Sem)
+        5 => False),  --  Corresponding_Spec (Node5-Sem)
+
+     N_Generic_Package_Renaming_Declaration =>
+       (1 => True,    --  Defining_Unit_Name (Node1)
+        2 => True,    --  Name (Node2)
+        3 => False,   --  unused
+        4 => False,   --  Parent_Spec (Node4-Sem)
+        5 => False),  --  unused
+
+     N_Generic_Procedure_Renaming_Declaration =>
+       (1 => True,    --  Defining_Unit_Name (Node1)
+        2 => True,    --  Name (Node2)
+        3 => False,   --  unused
+        4 => False,   --  Parent_Spec (Node4-Sem)
+        5 => False),  --  unused
+
+     N_Generic_Function_Renaming_Declaration =>
+       (1 => True,    --  Defining_Unit_Name (Node1)
+        2 => True,    --  Name (Node2)
+        3 => False,   --  unused
+        4 => False,   --  Parent_Spec (Node4-Sem)
+        5 => False),  --  unused
+
+     N_Task_Type_Declaration =>
+       (1 => True,    --  Defining_Identifier (Node1)
+        2 => True,    --  Interface_List (List2)
+        3 => True,    --  Task_Definition (Node3)
+        4 => True,    --  Discriminant_Specifications (List4)
+        5 => False),  --  Corresponding_Body (Node5-Sem)
+
+     N_Single_Task_Declaration =>
+       (1 => True,    --  Defining_Identifier (Node1)
+        2 => True,    --  Interface_List (List2)
+        3 => True,    --  Task_Definition (Node3)
+        4 => False,   --  unused
+        5 => False),  --  unused
+
+     N_Task_Definition =>
+       (1 => False,   --  unused
+        2 => True,    --  Visible_Declarations (List2)
+        3 => True,    --  Private_Declarations (List3)
+        4 => True,    --  End_Label (Node4)
+        5 => False),  --  unused
+
+     N_Task_Body =>
+       (1 => True,    --  Defining_Identifier (Node1)
+        2 => True,    --  Declarations (List2)
+        3 => False,   --  Activation_Chain_Entity (Node3-Sem)
+        4 => True,    --  Handled_Statement_Sequence (Node4)
+        5 => False),  --  Corresponding_Spec (Node5-Sem)
+
+     N_Protected_Type_Declaration =>
+       (1 => True,    --  Defining_Identifier (Node1)
+        2 => True,    --  Interface_List (List2)
+        3 => True,    --  Protected_Definition (Node3)
+        4 => True,    --  Discriminant_Specifications (List4)
+        5 => False),  --  Corresponding_Body (Node5-Sem)
+
+     N_Single_Protected_Declaration =>
+       (1 => True,    --  Defining_Identifier (Node1)
+        2 => True,    --  Interface_List (List2)
+        3 => True,    --  Protected_Definition (Node3)
+        4 => False,   --  unused
+        5 => False),  --  unused
+
+     N_Protected_Definition =>
+       (1 => False,   --  unused
+        2 => True,    --  Visible_Declarations (List2)
+        3 => True,    --  Private_Declarations (List3)
+        4 => True,    --  End_Label (Node4)
+        5 => False),  --  unused
+
+     N_Protected_Body =>
+       (1 => True,    --  Defining_Identifier (Node1)
+        2 => True,    --  Declarations (List2)
+        3 => False,   --  unused
+        4 => True,    --  End_Label (Node4)
+        5 => False),  --  Corresponding_Spec (Node5-Sem)
+
+     N_Entry_Declaration =>
+       (1 => True,    --  Defining_Identifier (Node1)
+        2 => False,   --  unused
+        3 => True,    --  Parameter_Specifications (List3)
+        4 => True,    --  Discrete_Subtype_Definition (Node4)
+        5 => False),  --  Corresponding_Body (Node5-Sem)
+
+     N_Accept_Statement =>
+       (1 => True,    --  Entry_Direct_Name (Node1)
+        2 => True,    --  Declarations (List2)
+        3 => True,    --  Parameter_Specifications (List3)
+        4 => True,    --  Handled_Statement_Sequence (Node4)
+        5 => True),   --  Entry_Index (Node5)
+
+     N_Entry_Body =>
+       (1 => True,    --  Defining_Identifier (Node1)
+        2 => True,    --  Declarations (List2)
+        3 => False,   --  Activation_Chain_Entity (Node3-Sem)
+        4 => True,    --  Handled_Statement_Sequence (Node4)
+        5 => True),   --  Entry_Body_Formal_Part (Node5)
+
+     N_Entry_Body_Formal_Part =>
+       (1 => True,    --  Condition (Node1)
+        2 => False,   --  unused
+        3 => True,    --  Parameter_Specifications (List3)
+        4 => True,    --  Entry_Index_Specification (Node4)
+        5 => False),  --  unused
+
+     N_Entry_Index_Specification =>
+       (1 => True,    --  Defining_Identifier (Node1)
+        2 => False,   --  unused
+        3 => False,   --  unused
+        4 => True,    --  Discrete_Subtype_Definition (Node4)
+        5 => False),  --  unused
+
+     N_Entry_Call_Statement =>
+       (1 => False,   --  unused
+        2 => True,    --  Name (Node2)
+        3 => True,    --  Parameter_Associations (List3)
+        4 => False,   --  First_Named_Actual (Node4-Sem)
+        5 => False),  --  unused
+
+     N_Requeue_Statement =>
+       (1 => False,   --  unused
+        2 => True,    --  Name (Node2)
+        3 => False,   --  unused
+        4 => False,   --  unused
+        5 => False),  --  unused
+
+     N_Delay_Until_Statement =>
+       (1 => False,   --  unused
+        2 => False,   --  unused
+        3 => True,    --  Expression (Node3)
+        4 => False,   --  unused
+        5 => False),  --  unused
+
+     N_Delay_Relative_Statement =>
+       (1 => False,   --  unused
+        2 => False,   --  unused
+        3 => True,    --  Expression (Node3)
+        4 => False,   --  unused
+        5 => False),  --  unused
+
+     N_Selective_Accept =>
+       (1 => True,    --  Select_Alternatives (List1)
+        2 => False,   --  unused
+        3 => False,   --  unused
+        4 => True,    --  Else_Statements (List4)
+        5 => False),  --  unused
+
+     N_Accept_Alternative =>
+       (1 => True,    --  Condition (Node1)
+        2 => True,    --  Accept_Statement (Node2)
+        3 => True,    --  Statements (List3)
+        4 => True,    --  Pragmas_Before (List4)
+        5 => False),  --  Accept_Handler_Records (List5-Sem)
+
+     N_Delay_Alternative =>
+       (1 => True,    --  Condition (Node1)
+        2 => True,    --  Delay_Statement (Node2)
+        3 => True,    --  Statements (List3)
+        4 => True,    --  Pragmas_Before (List4)
+        5 => False),  --  unused
+
+     N_Terminate_Alternative =>
+       (1 => True,    --  Condition (Node1)
+        2 => False,   --  unused
+        3 => False,   --  unused
+        4 => True,    --  Pragmas_Before (List4)
+        5 => True),   --  Pragmas_After (List5)
+
+     N_Timed_Entry_Call =>
+       (1 => True,    --  Entry_Call_Alternative (Node1)
+        2 => False,   --  unused
+        3 => False,   --  unused
+        4 => True,    --  Delay_Alternative (Node4)
+        5 => False),  --  unused
+
+     N_Entry_Call_Alternative =>
+       (1 => True,    --  Entry_Call_Statement (Node1)
+        2 => False,   --  unused
+        3 => True,    --  Statements (List3)
+        4 => True,    --  Pragmas_Before (List4)
+        5 => False),  --  unused
+
+     N_Conditional_Entry_Call =>
+       (1 => True,    --  Entry_Call_Alternative (Node1)
+        2 => False,   --  unused
+        3 => False,   --  unused
+        4 => True,    --  Else_Statements (List4)
+        5 => False),  --  unused
+
+     N_Asynchronous_Select =>
+       (1 => True,    --  Triggering_Alternative (Node1)
+        2 => True,    --  Abortable_Part (Node2)
+        3 => False,   --  unused
+        4 => False,   --  unused
+        5 => False),  --  unused
+
+     N_Triggering_Alternative =>
+       (1 => True,    --  Triggering_Statement (Node1)
+        2 => False,   --  unused
+        3 => True,    --  Statements (List3)
+        4 => True,    --  Pragmas_Before (List4)
+        5 => False),  --  unused
+
+     N_Abortable_Part =>
+       (1 => False,   --  unused
+        2 => False,   --  unused
+        3 => True,    --  Statements (List3)
+        4 => False,   --  unused
+        5 => False),  --  unused
+
+     N_Abort_Statement =>
+       (1 => False,   --  unused
+        2 => True,    --  Names (List2)
+        3 => False,   --  unused
+        4 => False,   --  unused
+        5 => False),  --  unused
+
+     N_Compilation_Unit =>
+       (1 => True,    --  Context_Items (List1)
+        2 => True,    --  Unit (Node2)
+        3 => False,   --  First_Inlined_Subprogram (Node3-Sem)
+        4 => False,   --  Library_Unit (Node4-Sem)
+        5 => True),   --  Aux_Decls_Node (Node5)
+
+     N_Compilation_Unit_Aux =>
+       (1 => True,    --  Actions (List1)
+        2 => True,    --  Declarations (List2)
+        3 => False,   --  unused
+        4 => True,    --  Config_Pragmas (List4)
+        5 => True),   --  Pragmas_After (List5)
+
+     N_With_Clause =>
+       (1 => False,   --  unused
+        2 => True,    --  Name (Node2)
+        3 => False,   --  unused
+        4 => False,   --  Library_Unit (Node4-Sem)
+        5 => False),  --  Corresponding_Spec (Node5-Sem)
+
+     N_Subprogram_Body_Stub =>
+       (1 => True,    --  Specification (Node1)
+        2 => False,   --  unused
+        3 => False,   --  unused
+        4 => False,   --  Library_Unit (Node4-Sem)
+        5 => False),  --  Corresponding_Body (Node5-Sem)
+
+     N_Package_Body_Stub =>
+       (1 => True,    --  Defining_Identifier (Node1)
+        2 => False,   --  unused
+        3 => False,   --  unused
+        4 => False,   --  Library_Unit (Node4-Sem)
+        5 => False),  --  Corresponding_Body (Node5-Sem)
+
+     N_Task_Body_Stub =>
+       (1 => True,    --  Defining_Identifier (Node1)
+        2 => False,   --  unused
+        3 => False,   --  unused
+        4 => False,   --  Library_Unit (Node4-Sem)
+        5 => False),  --  Corresponding_Body (Node5-Sem)
+
+     N_Protected_Body_Stub =>
+       (1 => True,    --  Defining_Identifier (Node1)
+        2 => False,   --  unused
+        3 => False,   --  unused
+        4 => False,   --  Library_Unit (Node4-Sem)
+        5 => False),  --  Corresponding_Body (Node5-Sem)
+
+     N_Subunit =>
+       (1 => True,    --  Proper_Body (Node1)
+        2 => True,    --  Name (Node2)
+        3 => False,   --  Corresponding_Stub (Node3-Sem)
+        4 => False,   --  unused
+        5 => False),  --  unused
+
+     N_Exception_Declaration =>
+       (1 => True,    --  Defining_Identifier (Node1)
+        2 => False,   --  unused
+        3 => False,   --  Expression (Node3-Sem)
+        4 => False,   --  unused
+        5 => False),  --  unused
+
+     N_Handled_Sequence_Of_Statements =>
+       (1 => True,    --  At_End_Proc (Node1)
+        2 => False,   --  First_Real_Statement (Node2-Sem)
+        3 => True,    --  Statements (List3)
+        4 => True,    --  End_Label (Node4)
+        5 => True),   --  Exception_Handlers (List5)
+
+     N_Exception_Handler =>
+       (1 => False,   --  Local_Raise_Statements (Elist1)
+        2 => True,    --  Choice_Parameter (Node2)
+        3 => True,    --  Statements (List3)
+        4 => True,    --  Exception_Choices (List4)
+        5 => False),  --  Exception_Label (Node5)
+
+     N_Raise_Statement =>
+       (1 => False,   --  unused
+        2 => True,    --  Name (Node2)
+        3 => True,    --  Expression (Node3)
+        4 => False,   --  unused
+        5 => False),  --  unused
+
+     N_Generic_Subprogram_Declaration =>
+       (1 => True,    --  Specification (Node1)
+        2 => True,    --  Generic_Formal_Declarations (List2)
+        3 => False,   --  unused
+        4 => False,   --  Parent_Spec (Node4-Sem)
+        5 => False),  --  Corresponding_Body (Node5-Sem)
+
+     N_Generic_Package_Declaration =>
+       (1 => True,    --  Specification (Node1)
+        2 => True,    --  Generic_Formal_Declarations (List2)
+        3 => False,   --  Activation_Chain_Entity (Node3-Sem)
+        4 => False,   --  Parent_Spec (Node4-Sem)
+        5 => False),  --  Corresponding_Body (Node5-Sem)
+
+     N_Package_Instantiation =>
+       (1 => True,    --  Defining_Unit_Name (Node1)
+        2 => True,    --  Name (Node2)
+        3 => True,    --  Generic_Associations (List3)
+        4 => False,   --  Parent_Spec (Node4-Sem)
+        5 => False),  --  Instance_Spec (Node5-Sem)
+
+     N_Procedure_Instantiation =>
+       (1 => True,    --  Defining_Unit_Name (Node1)
+        2 => True,    --  Name (Node2)
+        3 => True,    --  Generic_Associations (List3)
+        4 => False,   --  Parent_Spec (Node4-Sem)
+        5 => False),  --  Instance_Spec (Node5-Sem)
+
+     N_Function_Instantiation =>
+       (1 => True,    --  Defining_Unit_Name (Node1)
+        2 => True,    --  Name (Node2)
+        3 => True,    --  Generic_Associations (List3)
+        4 => False,   --  Parent_Spec (Node4-Sem)
+        5 => False),  --  Instance_Spec (Node5-Sem)
+
+     N_Generic_Association =>
+       (1 => True,    --  Explicit_Generic_Actual_Parameter (Node1)
+        2 => True,    --  Selector_Name (Node2)
+        3 => False,   --  unused
+        4 => False,   --  unused
+        5 => False),  --  unused
+
+     N_Formal_Object_Declaration =>
+       (1 => True,    --  Defining_Identifier (Node1)
+        2 => False,   --  unused
+        3 => True,    --  Access_Definition (Node3)
+        4 => True,    --  Subtype_Mark (Node4)
+        5 => True),   --  Default_Expression (Node5)
+
+     N_Formal_Type_Declaration =>
+       (1 => True,    --  Defining_Identifier (Node1)
+        2 => False,   --  unused
+        3 => True,    --  Formal_Type_Definition (Node3)
+        4 => True,    --  Discriminant_Specifications (List4)
+        5 => False),  --  unused
+
+     N_Formal_Private_Type_Definition =>
+       (1 => False,   --  unused
+        2 => False,   --  unused
+        3 => False,   --  unused
+        4 => False,   --  unused
+        5 => False),  --  unused
+
+     N_Formal_Derived_Type_Definition =>
+       (1 => False,   --  unused
+        2 => True,    --  Interface_List (List2)
+        3 => False,   --  unused
+        4 => True,    --  Subtype_Mark (Node4)
+        5 => False),  --  unused
+
+     N_Formal_Discrete_Type_Definition =>
+       (1 => False,   --  unused
+        2 => False,   --  unused
+        3 => False,   --  unused
+        4 => False,   --  unused
+        5 => False),  --  unused
+
+     N_Formal_Signed_Integer_Type_Definition =>
+       (1 => False,   --  unused
+        2 => False,   --  unused
+        3 => False,   --  unused
+        4 => False,   --  unused
+        5 => False),  --  unused
+
+     N_Formal_Modular_Type_Definition =>
+       (1 => False,   --  unused
+        2 => False,   --  unused
+        3 => False,   --  unused
+        4 => False,   --  unused
+        5 => False),  --  unused
+
+     N_Formal_Floating_Point_Definition =>
+       (1 => False,   --  unused
+        2 => False,   --  unused
+        3 => False,   --  unused
+        4 => False,   --  unused
+        5 => False),  --  unused
+
+     N_Formal_Ordinary_Fixed_Point_Definition =>
+       (1 => False,   --  unused
+        2 => False,   --  unused
+        3 => False,   --  unused
+        4 => False,   --  unused
+        5 => False),  --  unused
+
+     N_Formal_Decimal_Fixed_Point_Definition =>
+       (1 => False,   --  unused
+        2 => False,   --  unused
+        3 => False,   --  unused
+        4 => False,   --  unused
+        5 => False),  --  unused
+
+     N_Formal_Concrete_Subprogram_Declaration =>
+       (1 => True,    --  Specification (Node1)
+        2 => True,    --  Default_Name (Node2)
+        3 => False,   --  unused
+        4 => False,   --  unused
+        5 => False),  --  unused
+
+     N_Formal_Abstract_Subprogram_Declaration =>
+       (1 => True,    --  Specification (Node1)
+        2 => True,    --  Default_Name (Node2)
+        3 => False,   --  unused
+        4 => False,   --  unused
+        5 => False),  --  unused
+
+     N_Formal_Package_Declaration =>
+       (1 => True,    --  Defining_Identifier (Node1)
+        2 => True,    --  Name (Node2)
+        3 => True,    --  Generic_Associations (List3)
+        4 => False,   --  unused
+        5 => False),  --  Instance_Spec (Node5-Sem)
+
+     N_Attribute_Definition_Clause =>
+       (1 => True,    --  Chars (Name1)
+        2 => True,    --  Name (Node2)
+        3 => True,    --  Expression (Node3)
+        4 => False,   --  unused
+        5 => False),  --  Next_Rep_Item (Node5-Sem)
+
+     N_Enumeration_Representation_Clause =>
+       (1 => True,    --  Identifier (Node1)
+        2 => False,   --  unused
+        3 => True,    --  Array_Aggregate (Node3)
+        4 => False,   --  unused
+        5 => False),  --  Next_Rep_Item (Node5-Sem)
+
+     N_Record_Representation_Clause =>
+       (1 => True,    --  Identifier (Node1)
+        2 => True,    --  Mod_Clause (Node2)
+        3 => True,    --  Component_Clauses (List3)
+        4 => False,   --  unused
+        5 => False),  --  Next_Rep_Item (Node5-Sem)
+
+     N_Component_Clause =>
+       (1 => True,    --  Component_Name (Node1)
+        2 => True,    --  Position (Node2)
+        3 => True,    --  First_Bit (Node3)
+        4 => True,    --  Last_Bit (Node4)
+        5 => False),  --  unused
+
+     N_Code_Statement =>
+       (1 => False,   --  unused
+        2 => False,   --  unused
+        3 => True,    --  Expression (Node3)
+        4 => False,   --  unused
+        5 => False),  --  unused
+
+     N_Op_Rotate_Left =>
+       (1 => True,    --  Chars (Name1)
+        2 => True,    --  Left_Opnd (Node2)
+        3 => True,    --  Right_Opnd (Node3)
+        4 => False,   --  Entity (Node4-Sem)
+        5 => False),  --  Etype (Node5-Sem)
+
+     N_Op_Rotate_Right =>
+       (1 => True,    --  Chars (Name1)
+        2 => True,    --  Left_Opnd (Node2)
+        3 => True,    --  Right_Opnd (Node3)
+        4 => False,   --  Entity (Node4-Sem)
+        5 => False),  --  Etype (Node5-Sem)
+
+     N_Op_Shift_Left =>
+       (1 => True,    --  Chars (Name1)
+        2 => True,    --  Left_Opnd (Node2)
+        3 => True,    --  Right_Opnd (Node3)
+        4 => False,   --  Entity (Node4-Sem)
+        5 => False),  --  Etype (Node5-Sem)
+
+     N_Op_Shift_Right_Arithmetic =>
+       (1 => True,    --  Chars (Name1)
+        2 => True,    --  Left_Opnd (Node2)
+        3 => True,    --  Right_Opnd (Node3)
+        4 => False,   --  Entity (Node4-Sem)
+        5 => False),  --  Etype (Node5-Sem)
+
+     N_Op_Shift_Right =>
+       (1 => True,    --  Chars (Name1)
+        2 => True,    --  Left_Opnd (Node2)
+        3 => True,    --  Right_Opnd (Node3)
+        4 => False,   --  Entity (Node4-Sem)
+        5 => False),  --  Etype (Node5-Sem)
+
+     N_Delta_Constraint =>
+       (1 => False,   --  unused
+        2 => False,   --  unused
+        3 => True,    --  Delta_Expression (Node3)
+        4 => True,    --  Range_Constraint (Node4)
+        5 => False),  --  unused
+
+     N_At_Clause =>
+       (1 => True,    --  Identifier (Node1)
+        2 => False,   --  unused
+        3 => True,    --  Expression (Node3)
+        4 => False,   --  unused
+        5 => False),  --  unused
+
+     N_Mod_Clause =>
+       (1 => False,   --  unused
+        2 => False,   --  unused
+        3 => True,    --  Expression (Node3)
+        4 => True,    --  Pragmas_Before (List4)
+        5 => False),  --  unused
+
+     N_Conditional_Expression =>
+       (1 => True,    --  Expressions (List1)
+        2 => False,   --  Then_Actions (List2-Sem)
+        3 => False,   --  Else_Actions (List3-Sem)
+        4 => False,   --  unused
+        5 => False),  --  Etype (Node5-Sem)
+
+     N_Expanded_Name =>
+       (1 => True,    --  Chars (Name1)
+        2 => True,    --  Selector_Name (Node2)
+        3 => True,    --  Prefix (Node3)
+        4 => False,   --  Entity (Node4-Sem)
+        5 => False),  --  Etype (Node5-Sem)
+
+     N_Free_Statement =>
+       (1 => False,   --  Storage_Pool (Node1-Sem)
+        2 => False,   --  Procedure_To_Call (Node2-Sem)
+        3 => True,    --  Expression (Node3)
+        4 => False,   --  Actual_Designated_Subtype (Node4-Sem)
+        5 => False),  --  unused
+
+     N_Freeze_Entity =>
+       (1 => True,    --  Actions (List1)
+        2 => False,   --  Access_Types_To_Process (Elist2-Sem)
+        3 => False,   --  TSS_Elist (Elist3-Sem)
+        4 => False,   --  Entity (Node4-Sem)
+        5 => False),  --  First_Subtype_Link (Node5-Sem)
+
+     N_Implicit_Label_Declaration =>
+       (1 => True,    --  Defining_Identifier (Node1)
+        2 => False,   --  Label_Construct (Node2-Sem)
+        3 => False,   --  unused
+        4 => False,   --  unused
+        5 => False),  --  unused
+
+     N_Itype_Reference =>
+       (1 => False,   --  Itype (Node1-Sem)
+        2 => False,   --  unused
+        3 => False,   --  unused
+        4 => False,   --  unused
+        5 => False),  --  unused
+
+     N_Raise_Constraint_Error =>
+       (1 => True,    --  Condition (Node1)
+        2 => False,   --  unused
+        3 => True,    --  Reason (Uint3)
+        4 => False,   --  unused
+        5 => False),  --  Etype (Node5-Sem)
+
+     N_Raise_Program_Error =>
+       (1 => True,    --  Condition (Node1)
+        2 => False,   --  unused
+        3 => True,    --  Reason (Uint3)
+        4 => False,   --  unused
+        5 => False),  --  Etype (Node5-Sem)
+
+     N_Raise_Storage_Error =>
+       (1 => True,    --  Condition (Node1)
+        2 => False,   --  unused
+        3 => True,    --  Reason (Uint3)
+        4 => False,   --  unused
+        5 => False),  --  Etype (Node5-Sem)
+
+     N_Push_Constraint_Error_Label =>
+       (1 => False,   --  unused
+        2 => False,   --  unused
+        3 => False,   --  unused
+        4 => False,   --  unused
+        5 => False),  --  unused
+
+     N_Push_Program_Error_Label =>
+       (1 => False,   --  Exception_Label
+        2 => False,   --  unused
+        3 => False,   --  unused
+        4 => False,   --  unused
+        5 => False),  --  Exception_Label
+
+     N_Push_Storage_Error_Label =>
+       (1 => False,   --  Exception_Label
+        2 => False,   --  unused
+        3 => False,   --  unused
+        4 => False,   --  unused
+        5 => False),  --  Exception_Label
+
+     N_Pop_Constraint_Error_Label =>
+       (1 => False,   --  unused
+        2 => False,   --  unused
+        3 => False,   --  unused
+        4 => False,   --  unused
+        5 => False),  --  unused
+
+     N_Pop_Program_Error_Label =>
+       (1 => False,   --  unused
+        2 => False,   --  unused
+        3 => False,   --  unused
+        4 => False,   --  unused
+        5 => False),  --  unused
+
+     N_Pop_Storage_Error_Label =>
+       (1 => False,   --  unused
+        2 => False,   --  unused
+        3 => False,   --  unused
+        4 => False,   --  unused
+        5 => False),  --  unused
+
+     N_Reference =>
+       (1 => False,   --  unused
+        2 => False,   --  unused
+        3 => True,    --  Prefix (Node3)
+        4 => False,   --  unused
+        5 => False),  --  Etype (Node5-Sem)
+
+     N_Subprogram_Info =>
+       (1 => True,    --  Identifier (Node1)
+        2 => False,   --  unused
+        3 => False,   --  unused
+        4 => False,   --  unused
+        5 => False),  --  Etype (Node5-Sem)
+
+     N_Unchecked_Expression =>
+       (1 => False,   --  unused
+        2 => False,   --  unused
+        3 => True,    --  Expression (Node3)
+        4 => False,   --  unused
+        5 => False),  --  Etype (Node5-Sem)
+
+     N_Unchecked_Type_Conversion =>
+       (1 => False,   --  unused
+        2 => False,   --  unused
+        3 => True,    --  Expression (Node3)
+        4 => True,    --  Subtype_Mark (Node4)
+        5 => False),  --  Etype (Node5-Sem)
+
+     N_Validate_Unchecked_Conversion =>
+       (1 => False,   --  Source_Type (Node1-Sem)
+        2 => False,   --  Target_Type (Node2-Sem)
+        3 => False,   --  unused
+        4 => False,   --  unused
+        5 => False),  --  unused
+
+   --  End of inserted output from makeisf program
+
+   --  Entries for Empty, Error and Unused. Even thought these have a Chars
+   --  field for debugging purposes, they are not really syntactic fields, so
+   --  we mark all fields as unused.
+
+     N_Empty =>
+       (1 => False,   --  unused
+        2 => False,   --  unused
+        3 => False,   --  unused
+        4 => False,   --  unused
+        5 => False),  --  unused
+
+     N_Error =>
+       (1 => False,   --  unused
+        2 => False,   --  unused
+        3 => False,   --  unused
+        4 => False,   --  unused
+        5 => False),  --  unused
+
+     N_Unused_At_Start =>
+       (1 => False,   --  unused
+        2 => False,   --  unused
+        3 => False,   --  unused
+        4 => False,   --  unused
+        5 => False),  --  unused
+
+     N_Unused_At_End =>
+       (1 => False,   --  unused
+        2 => False,   --  unused
+        3 => False,   --  unused
+        4 => False,   --  unused
+        5 => False)); --  unused
+
    --------------------
    -- Inline Pragmas --
    --------------------
@@ -8426,10 +10844,14 @@ package Sinfo is
    pragma Inline (Abstract_Present);
    pragma Inline (Accept_Handler_Records);
    pragma Inline (Accept_Statement);
+   pragma Inline (Access_Definition);
+   pragma Inline (Access_To_Subprogram_Definition);
    pragma Inline (Access_Types_To_Process);
    pragma Inline (Actions);
    pragma Inline (Activation_Chain_Entity);
    pragma Inline (Acts_As_Spec);
+   pragma Inline (Actual_Designated_Subtype);
+   pragma Inline (Address_Warning_Posted);
    pragma Inline (Aggregate_Bounds);
    pragma Inline (Aliased_Present);
    pragma Inline (All_Others);
@@ -8453,9 +10875,12 @@ package Sinfo is
    pragma Inline (Check_Address_Alignment);
    pragma Inline (Choice_Parameter);
    pragma Inline (Choices);
+   pragma Inline (Coextensions);
+   pragma Inline (Comes_From_Extended_Return_Statement);
    pragma Inline (Compile_Time_Known_Aggregate);
    pragma Inline (Component_Associations);
    pragma Inline (Component_Clauses);
+   pragma Inline (Component_Definition);
    pragma Inline (Component_Items);
    pragma Inline (Component_List);
    pragma Inline (Component_Name);
@@ -8470,6 +10895,7 @@ package Sinfo is
    pragma Inline (Controlling_Argument);
    pragma Inline (Conversion_OK);
    pragma Inline (Corresponding_Body);
+   pragma Inline (Corresponding_Formal_Spec);
    pragma Inline (Corresponding_Generic_Association);
    pragma Inline (Corresponding_Integer_Value);
    pragma Inline (Corresponding_Spec);
@@ -8482,7 +10908,6 @@ package Sinfo is
    pragma Inline (Defining_Identifier);
    pragma Inline (Defining_Unit_Name);
    pragma Inline (Delay_Alternative);
-   pragma Inline (Delay_Finalize_Attach);
    pragma Inline (Delay_Statement);
    pragma Inline (Delta_Expression);
    pragma Inline (Digits_Expression);
@@ -8502,7 +10927,9 @@ package Sinfo is
    pragma Inline (Do_Storage_Check);
    pragma Inline (Do_Tag_Check);
    pragma Inline (Elaborate_Present);
+   pragma Inline (Elaborate_All_Desirable);
    pragma Inline (Elaborate_All_Present);
+   pragma Inline (Elaborate_Desirable);
    pragma Inline (Elaboration_Boolean);
    pragma Inline (Else_Actions);
    pragma Inline (Else_Statements);
@@ -8520,8 +10947,9 @@ package Sinfo is
    pragma Inline (Entry_Index_Specification);
    pragma Inline (Etype);
    pragma Inline (Exception_Choices);
-   pragma Inline (Exception_Junk);
    pragma Inline (Exception_Handlers);
+   pragma Inline (Exception_Junk);
+   pragma Inline (Exception_Label);
    pragma Inline (Expansion_Delayed);
    pragma Inline (Explicit_Actual_Parameter);
    pragma Inline (Explicit_Generic_Actual_Parameter);
@@ -8536,7 +10964,9 @@ package Sinfo is
    pragma Inline (Float_Truncate);
    pragma Inline (Formal_Type_Definition);
    pragma Inline (Forwards_OK);
+   pragma Inline (From_At_End);
    pragma Inline (From_At_Mod);
+   pragma Inline (From_Default);
    pragma Inline (Generic_Associations);
    pragma Inline (Generic_Formal_Declarations);
    pragma Inline (Generic_Parent);
@@ -8546,9 +10976,13 @@ package Sinfo is
    pragma Inline (Has_Created_Identifier);
    pragma Inline (Has_Dynamic_Length_Check);
    pragma Inline (Has_Dynamic_Range_Check);
+   pragma Inline (Has_Init_Expression);
+   pragma Inline (Has_Local_Raise);
+   pragma Inline (Has_Self_Reference);
    pragma Inline (Has_No_Elaboration_Code);
    pragma Inline (Has_Priority_Pragma);
    pragma Inline (Has_Private_View);
+   pragma Inline (Has_Relative_Deadline_Pragma);
    pragma Inline (Has_Storage_Size_Pragma);
    pragma Inline (Has_Task_Info_Pragma);
    pragma Inline (Has_Task_Name_Pragma);
@@ -8557,6 +10991,8 @@ package Sinfo is
    pragma Inline (High_Bound);
    pragma Inline (Identifier);
    pragma Inline (Implicit_With);
+   pragma Inline (Interface_List);
+   pragma Inline (Interface_Present);
    pragma Inline (Includes_Infinities);
    pragma Inline (In_Present);
    pragma Inline (Instance_Spec);
@@ -8565,12 +11001,17 @@ package Sinfo is
    pragma Inline (Is_Component_Left_Opnd);
    pragma Inline (Is_Component_Right_Opnd);
    pragma Inline (Is_Controlling_Actual);
+   pragma Inline (Is_Dynamic_Coextension);
+   pragma Inline (Is_Entry_Barrier_Function);
+   pragma Inline (Is_Expanded_Build_In_Place_Call);
+   pragma Inline (Is_Folded_In_Parser);
    pragma Inline (Is_In_Discriminant_Check);
    pragma Inline (Is_Machine_Number);
    pragma Inline (Is_Null_Loop);
    pragma Inline (Is_Overloaded);
    pragma Inline (Is_Power_Of_2_For_Shift);
    pragma Inline (Is_Protected_Subprogram_Body);
+   pragma Inline (Is_Static_Coextension);
    pragma Inline (Is_Static_Expression);
    pragma Inline (Is_Subprogram_Descriptor);
    pragma Inline (Is_Task_Allocation_Block);
@@ -8586,6 +11027,8 @@ package Sinfo is
    pragma Inline (Limited_View_Installed);
    pragma Inline (Limited_Present);
    pragma Inline (Literals);
+   pragma Inline (Local_Raise_Not_OK);
+   pragma Inline (Local_Raise_Statements);
    pragma Inline (Loop_Actions);
    pragma Inline (Loop_Parameter_Specification);
    pragma Inline (Low_Bound);
@@ -8593,20 +11036,24 @@ package Sinfo is
    pragma Inline (More_Ids);
    pragma Inline (Must_Be_Byte_Aligned);
    pragma Inline (Must_Not_Freeze);
+   pragma Inline (Must_Not_Override);
+   pragma Inline (Must_Override);
    pragma Inline (Name);
    pragma Inline (Names);
    pragma Inline (Next_Entity);
    pragma Inline (Next_Named_Actual);
+   pragma Inline (Next_Pragma);
    pragma Inline (Next_Rep_Item);
    pragma Inline (Next_Use_Clause);
    pragma Inline (No_Ctrl_Actions);
+   pragma Inline (No_Elaboration_Check);
    pragma Inline (No_Entities_Ref_In_Spec);
    pragma Inline (No_Initialization);
    pragma Inline (No_Truncation);
    pragma Inline (Null_Present);
+   pragma Inline (Null_Exclusion_Present);
    pragma Inline (Null_Record_Present);
    pragma Inline (Object_Definition);
-   pragma Inline (OK_For_Stream);
    pragma Inline (Original_Discriminant);
    pragma Inline (Original_Entity);
    pragma Inline (Others_Discrete_Choices);
@@ -8616,8 +11063,10 @@ package Sinfo is
    pragma Inline (Parameter_List_Truncated);
    pragma Inline (Parameter_Type);
    pragma Inline (Parent_Spec);
+   pragma Inline (PPC_Enabled);
    pragma Inline (Position);
    pragma Inline (Pragma_Argument_Associations);
+   pragma Inline (Pragma_Identifier);
    pragma Inline (Pragmas_After);
    pragma Inline (Pragmas_Before);
    pragma Inline (Prefix);
@@ -8638,7 +11087,10 @@ package Sinfo is
    pragma Inline (Reason);
    pragma Inline (Record_Extension_Part);
    pragma Inline (Redundant_Use);
-   pragma Inline (Return_Type);
+   pragma Inline (Renaming_Exception);
+   pragma Inline (Result_Definition);
+   pragma Inline (Return_Object_Declarations);
+   pragma Inline (Return_Statement_Entity);
    pragma Inline (Reverse_Present);
    pragma Inline (Right_Opnd);
    pragma Inline (Rounded_Result);
@@ -8656,10 +11108,11 @@ package Sinfo is
    pragma Inline (Subtype_Indication);
    pragma Inline (Subtype_Mark);
    pragma Inline (Subtype_Marks);
+   pragma Inline (Synchronized_Present);
    pragma Inline (Tagged_Present);
    pragma Inline (Target_Type);
-   pragma Inline (Task_Body_Procedure);
    pragma Inline (Task_Definition);
+   pragma Inline (Task_Present);
    pragma Inline (Then_Actions);
    pragma Inline (Then_Statements);
    pragma Inline (Triggering_Alternative);
@@ -8682,10 +11135,14 @@ package Sinfo is
    pragma Inline (Set_Abstract_Present);
    pragma Inline (Set_Accept_Handler_Records);
    pragma Inline (Set_Accept_Statement);
+   pragma Inline (Set_Access_Definition);
+   pragma Inline (Set_Access_To_Subprogram_Definition);
    pragma Inline (Set_Access_Types_To_Process);
    pragma Inline (Set_Actions);
    pragma Inline (Set_Activation_Chain_Entity);
    pragma Inline (Set_Acts_As_Spec);
+   pragma Inline (Set_Actual_Designated_Subtype);
+   pragma Inline (Set_Address_Warning_Posted);
    pragma Inline (Set_Aggregate_Bounds);
    pragma Inline (Set_Aliased_Present);
    pragma Inline (Set_All_Others);
@@ -8709,9 +11166,12 @@ package Sinfo is
    pragma Inline (Set_Check_Address_Alignment);
    pragma Inline (Set_Choice_Parameter);
    pragma Inline (Set_Choices);
+   pragma Inline (Set_Coextensions);
+   pragma Inline (Set_Comes_From_Extended_Return_Statement);
    pragma Inline (Set_Compile_Time_Known_Aggregate);
    pragma Inline (Set_Component_Associations);
    pragma Inline (Set_Component_Clauses);
+   pragma Inline (Set_Component_Definition);
    pragma Inline (Set_Component_Items);
    pragma Inline (Set_Component_List);
    pragma Inline (Set_Component_Name);
@@ -8726,6 +11186,7 @@ package Sinfo is
    pragma Inline (Set_Controlling_Argument);
    pragma Inline (Set_Conversion_OK);
    pragma Inline (Set_Corresponding_Body);
+   pragma Inline (Set_Corresponding_Formal_Spec);
    pragma Inline (Set_Corresponding_Generic_Association);
    pragma Inline (Set_Corresponding_Integer_Value);
    pragma Inline (Set_Corresponding_Spec);
@@ -8738,7 +11199,6 @@ package Sinfo is
    pragma Inline (Set_Defining_Identifier);
    pragma Inline (Set_Defining_Unit_Name);
    pragma Inline (Set_Delay_Alternative);
-   pragma Inline (Set_Delay_Finalize_Attach);
    pragma Inline (Set_Delay_Statement);
    pragma Inline (Set_Delta_Expression);
    pragma Inline (Set_Digits_Expression);
@@ -8758,7 +11218,9 @@ package Sinfo is
    pragma Inline (Set_Do_Storage_Check);
    pragma Inline (Set_Do_Tag_Check);
    pragma Inline (Set_Elaborate_Present);
+   pragma Inline (Set_Elaborate_All_Desirable);
    pragma Inline (Set_Elaborate_All_Present);
+   pragma Inline (Set_Elaborate_Desirable);
    pragma Inline (Set_Elaboration_Boolean);
    pragma Inline (Set_Else_Actions);
    pragma Inline (Set_Else_Statements);
@@ -8775,8 +11237,9 @@ package Sinfo is
    pragma Inline (Set_Entry_Index_Specification);
    pragma Inline (Set_Etype);
    pragma Inline (Set_Exception_Choices);
-   pragma Inline (Set_Exception_Junk);
    pragma Inline (Set_Exception_Handlers);
+   pragma Inline (Set_Exception_Junk);
+   pragma Inline (Set_Exception_Label);
    pragma Inline (Set_Expansion_Delayed);
    pragma Inline (Set_Explicit_Actual_Parameter);
    pragma Inline (Set_Explicit_Generic_Actual_Parameter);
@@ -8791,7 +11254,9 @@ package Sinfo is
    pragma Inline (Set_Float_Truncate);
    pragma Inline (Set_Formal_Type_Definition);
    pragma Inline (Set_Forwards_OK);
+   pragma Inline (Set_From_At_End);
    pragma Inline (Set_From_At_Mod);
+   pragma Inline (Set_From_Default);
    pragma Inline (Set_Generic_Associations);
    pragma Inline (Set_Generic_Formal_Declarations);
    pragma Inline (Set_Generic_Parent);
@@ -8800,10 +11265,13 @@ package Sinfo is
    pragma Inline (Set_Handler_List_Entry);
    pragma Inline (Set_Has_Created_Identifier);
    pragma Inline (Set_Has_Dynamic_Length_Check);
+   pragma Inline (Set_Has_Init_Expression);
+   pragma Inline (Set_Has_Local_Raise);
    pragma Inline (Set_Has_Dynamic_Range_Check);
    pragma Inline (Set_Has_No_Elaboration_Code);
    pragma Inline (Set_Has_Priority_Pragma);
    pragma Inline (Set_Has_Private_View);
+   pragma Inline (Set_Has_Relative_Deadline_Pragma);
    pragma Inline (Set_Has_Storage_Size_Pragma);
    pragma Inline (Set_Has_Task_Info_Pragma);
    pragma Inline (Set_Has_Task_Name_Pragma);
@@ -8813,6 +11281,8 @@ package Sinfo is
    pragma Inline (Set_Identifier);
    pragma Inline (Set_Implicit_With);
    pragma Inline (Set_Includes_Infinities);
+   pragma Inline (Set_Interface_List);
+   pragma Inline (Set_Interface_Present);
    pragma Inline (Set_In_Present);
    pragma Inline (Set_Instance_Spec);
    pragma Inline (Set_Intval);
@@ -8820,12 +11290,18 @@ package Sinfo is
    pragma Inline (Set_Is_Component_Left_Opnd);
    pragma Inline (Set_Is_Component_Right_Opnd);
    pragma Inline (Set_Is_Controlling_Actual);
+   pragma Inline (Set_Is_Dynamic_Coextension);
+   pragma Inline (Set_Is_Entry_Barrier_Function);
+   pragma Inline (Set_Is_Expanded_Build_In_Place_Call);
+   pragma Inline (Set_Is_Folded_In_Parser);
    pragma Inline (Set_Is_In_Discriminant_Check);
    pragma Inline (Set_Is_Machine_Number);
    pragma Inline (Set_Is_Null_Loop);
    pragma Inline (Set_Is_Overloaded);
    pragma Inline (Set_Is_Power_Of_2_For_Shift);
    pragma Inline (Set_Is_Protected_Subprogram_Body);
+   pragma Inline (Set_Has_Self_Reference);
+   pragma Inline (Set_Is_Static_Coextension);
    pragma Inline (Set_Is_Static_Expression);
    pragma Inline (Set_Is_Subprogram_Descriptor);
    pragma Inline (Set_Is_Task_Allocation_Block);
@@ -8841,6 +11317,8 @@ package Sinfo is
    pragma Inline (Set_Limited_View_Installed);
    pragma Inline (Set_Limited_Present);
    pragma Inline (Set_Literals);
+   pragma Inline (Set_Local_Raise_Not_OK);
+   pragma Inline (Set_Local_Raise_Statements);
    pragma Inline (Set_Loop_Actions);
    pragma Inline (Set_Loop_Parameter_Specification);
    pragma Inline (Set_Low_Bound);
@@ -8848,19 +11326,24 @@ package Sinfo is
    pragma Inline (Set_More_Ids);
    pragma Inline (Set_Must_Be_Byte_Aligned);
    pragma Inline (Set_Must_Not_Freeze);
+   pragma Inline (Set_Must_Not_Override);
+   pragma Inline (Set_Must_Override);
    pragma Inline (Set_Name);
    pragma Inline (Set_Names);
    pragma Inline (Set_Next_Entity);
    pragma Inline (Set_Next_Named_Actual);
+   pragma Inline (Set_Next_Pragma);
+   pragma Inline (Set_Next_Rep_Item);
    pragma Inline (Set_Next_Use_Clause);
    pragma Inline (Set_No_Ctrl_Actions);
+   pragma Inline (Set_No_Elaboration_Check);
    pragma Inline (Set_No_Entities_Ref_In_Spec);
    pragma Inline (Set_No_Initialization);
    pragma Inline (Set_No_Truncation);
    pragma Inline (Set_Null_Present);
+   pragma Inline (Set_Null_Exclusion_Present);
    pragma Inline (Set_Null_Record_Present);
    pragma Inline (Set_Object_Definition);
-   pragma Inline (Set_OK_For_Stream);
    pragma Inline (Set_Original_Discriminant);
    pragma Inline (Set_Original_Entity);
    pragma Inline (Set_Others_Discrete_Choices);
@@ -8870,8 +11353,10 @@ package Sinfo is
    pragma Inline (Set_Parameter_List_Truncated);
    pragma Inline (Set_Parameter_Type);
    pragma Inline (Set_Parent_Spec);
+   pragma Inline (Set_PPC_Enabled);
    pragma Inline (Set_Position);
    pragma Inline (Set_Pragma_Argument_Associations);
+   pragma Inline (Set_Pragma_Identifier);
    pragma Inline (Set_Pragmas_After);
    pragma Inline (Set_Pragmas_Before);
    pragma Inline (Set_Prefix);
@@ -8892,7 +11377,9 @@ package Sinfo is
    pragma Inline (Set_Reason);
    pragma Inline (Set_Record_Extension_Part);
    pragma Inline (Set_Redundant_Use);
-   pragma Inline (Set_Return_Type);
+   pragma Inline (Set_Renaming_Exception);
+   pragma Inline (Set_Result_Definition);
+   pragma Inline (Set_Return_Object_Declarations);
    pragma Inline (Set_Reverse_Present);
    pragma Inline (Set_Right_Opnd);
    pragma Inline (Set_Rounded_Result);
@@ -8910,10 +11397,11 @@ package Sinfo is
    pragma Inline (Set_Subtype_Indication);
    pragma Inline (Set_Subtype_Mark);
    pragma Inline (Set_Subtype_Marks);
+   pragma Inline (Set_Synchronized_Present);
    pragma Inline (Set_Tagged_Present);
    pragma Inline (Set_Target_Type);
-   pragma Inline (Set_Task_Body_Procedure);
    pragma Inline (Set_Task_Definition);
+   pragma Inline (Set_Task_Present);
    pragma Inline (Set_Then_Actions);
    pragma Inline (Set_Then_Statements);
    pragma Inline (Set_Triggering_Alternative);
@@ -8930,4 +11418,8 @@ package Sinfo is
    pragma Inline (Set_Was_Originally_Stub);
    pragma Inline (Set_Zero_Cost_Handling);
 
+   N_Simple_Return_Statement : constant Node_Kind := N_Return_Statement;
+   --  Rename N_Return_Statement to be N_Simple_Return_Statement. Clients
+   --  should refer to N_Simple_Return_Statement.
+
 end Sinfo;