emacs-elpa-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[elpa] externals/ada-ref-man af01ec1 04/18: * packages/ada-ref-man/*: re


From: Stefan Monnier
Subject: [elpa] externals/ada-ref-man af01ec1 04/18: * packages/ada-ref-man/*: release version 2012 TC1
Date: Sun, 29 Nov 2020 19:04:41 -0500 (EST)

branch: externals/ada-ref-man
commit af01ec1a66ce34ffc55fc85684befdee7a4935ac
Author: Stephen Leake <stephen_leake@stephe-leake.org>
Commit: Stephen Leake <stephen_leake@stephe-leake.org>

    * packages/ada-ref-man/*: release version 2012 TC1
---
 README        |     2 +-
 aarm2012.info | 47966 ++++++++++++++++++++++++++++++--------------------------
 arm2012.info  | 40663 ++++++++++++++++++++++++-----------------------
 dir           |     4 +-
 4 files changed, 47081 insertions(+), 41554 deletions(-)

diff --git a/README b/README
index f80fab9..3aca2be 100644
--- a/README
+++ b/README
@@ -1,4 +1,4 @@
-Emacs info version of Ada Reference Manual 2012
+Emacs info version of Ada Reference Manual 2012 TC1
 
 The Ada Reference Manual is provided as a Gnu ELPA package; to install
 the package, add to ~./emacs:
diff --git a/aarm2012.info b/aarm2012.info
index 419a80e..608a82c 100644
--- a/aarm2012.info
+++ b/aarm2012.info
@@ -1,10 +1,10 @@
-This is aarm2012.info, produced by texi2any version 5.2 from
+This is aarm2012.info, produced by texi2any version 6.3 from
 aarm2012.texinfo.
 
 INFO-DIR-SECTION GNU Ada tools
 START-INFO-DIR-ENTRY
-* Ada Reference Manual: (arm2012).
-* Annotated ARM: (arm2012).
+* Ada Reference Manual TC1: (arm2012).
+* Annotated ARM TC1: (arm2012).
 END-INFO-DIR-ENTRY
 
 
@@ -13,12 +13,14 @@ File: aarm2012.info,  Node: Top,  Next: Front Matter,  Up: 
(dir)
 Annotated Ada Reference Manual
 ******************************
 
-Ada Reference Manual, ISO/IEC 8652:2012(E)
+Ada Reference Manual, ISO/IEC 8652:2012(E) with COR.1:2016
 
                     Annotated Ada Reference Manual
 
                          ISO/IEC 8652:2012(E)
 
+                     with Technical Corrigendum 1
+
                     Language and Standard Libraries
 
 * Menu:
@@ -68,7 +70,8 @@ Copyright 
 
 Copyright � 2004, 2005, 2006 Ada-Europe
 
-Copyright � 2008, 2009, 2010, 2011, 2012 AXE Consultants
+Copyright � 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016 AXE
+Consultants
 
  
 
@@ -167,6 +170,31 @@ BE LIABLE FOR ANY GENERAL, CONSEQUENTIAL, INDIRECT, 
INCIDENTAL,
 EXEMPLARY, OR SPECIAL DAMAGES, EVEN IF AXE HAS BEEN ADVISED OF THE
 POSSIBILITY OF SUCH DAMAGES.
 
+Technical Corrigendum 1 for Ada 2012
+
+Copyright � 2013, 2014, 2015, 2016 AXE Consultants.  All Rights
+Reserved.
+
+This document may be copied, in whole or in part, in any form or by any
+means, as is, or with alterations, provided that (1) alterations are
+clearly marked as alterations and (2) this copyright notice is included
+unmodified in any copy.  Any other use or distribution of this document
+is prohibited without the prior express permission of AXE.
+
+You use this document on the condition that you indemnify and hold
+harmless AXE, its board, officers, agents, and employees, from any and
+all liability or damages to yourself or your hardware or software, or
+third parties, including attorneys' fees, court costs, and other related
+costs and expenses, arising out of your use of this document
+irrespective of the cause of said liability.
+
+AXE MAKES THIS DOCUMENT AVAILABLE ON AN "AS IS" BASIS AND MAKES NO
+WARRANTY, EXPRESS OR IMPLIED, AS TO THE ACCURACY, CAPABILITY, EFFICIENCY
+MERCHANTABILITY, OR FUNCTIONING OF THIS DOCUMENT. IN NO EVENT WILL AXE
+BE LIABLE FOR ANY GENERAL, CONSEQUENTIAL, INDIRECT, INCIDENTAL,
+EXEMPLARY, OR SPECIAL DAMAGES, EVEN IF AXE HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
  
 
 Ada 2005 Consolidated Standard
@@ -203,7 +231,64 @@ ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
 
 File: aarm2012.info,  Node: 0.1,  Next: 0.2,  Up: Front Matter
 
-0.1 Foreword
+0.1 Foreword to this version of the Ada Reference Manual
+========================================================
+
+0.1/4
+The International Standard for the programming language Ada is ISO/IEC
+8652:2012(E).
+
+0.2/4
+The Ada Working Group ISO/IEC JTC 1/SC 22/WG 9 is tasked by ISO with the
+work item to interpret and maintain the International Standard and to
+produce Technical Corrigenda, as appropriate.  The technical work on the
+International Standard is performed by the Ada Rapporteur Group (ARG) of
+WG 9.  In June 2015, WG 9 approved and forwarded Technical Corrigendum 1
+to SC 22 for ISO approval, which was granted in December 2015.
+Technical Corrigendum 1 was published in February 2016.
+
+0.4/4
+The Technical Corrigendum lists the individual changes that need to be
+made to the text of the International Standard to correct errors,
+omissions or inconsistencies.  The corrections specified in Technical
+Corrigendum 1 are part of the International Standard ISO/IEC
+8652:2012(E).
+
+0.6/4
+When ISO published Technical Corrigendum 1, it did not also publish a
+document that merges the changes from the Technical Corrigendum into the
+text of the International Standard.  However, ISO rules require that the
+project editor for the International Standard be able to produce such a
+document on demand.
+
+0.7/4
+This version of the Ada Reference Manual is what the project editor
+would provide to ISO in response to such a request.  It incorporates the
+changes specified in the Technical Corrigendum into the text of ISO/IEC
+8652:2012(E). It should be understood that the publication of any ISO
+document involves changes in general format, boilerplate, headers, etc.,
+as well as a review by professional editors that may introduce editorial
+changes to the text.  This version of the Ada Reference Manual is
+therefore neither an official ISO document, nor a version guaranteed to
+be identical to an official ISO document, should ISO decide to reprint
+the International Standard incorporating an approved Technical
+Corrigendum.  It is nevertheless a best effort to be as close as
+possible to the technical content of such an updated document.  In the
+case of a conflict between this document and Technical Corrigendum 1 as
+approved by ISO (or between this document and the original 8652:2012 in
+the case of paragraphs not changed by Technical Corrigendum 1), the
+other documents contain the official text of the International Standard
+ISO/IEC 8652:2012(E).
+
+0.8/4
+As it is very inconvenient to have the Reference Manual for Ada
+specified in two documents, this consolidated version of the Ada
+Reference Manual is made available to the public.
+
+
+File: aarm2012.info,  Node: 0.2,  Next: 0.3,  Prev: 0.1,  Up: Front Matter
+
+0.2 Foreword
 ============
 
 1/3
@@ -241,25 +326,23 @@ Committee ISO/IEC JTC 1, Information Technology 
Subcommittee SC22,
 Programming languages, their environments and system software
 interfaces.
 
-4/3
-{AI05-0299-1AI05-0299-1} This third edition cancels and replaces the
-second edition (ISO/IEC 8652:1995), which has been technically revised.
-It also incorporates the Technical Corrigendum ISO/IEC
-8652:1995:COR.1:2001 and Amendment ISO/IEC 8652:1995:AMD 1:2007.
+4/4
+{AI05-0299-1AI05-0299-1} This consolidated edition updates the third
+edition (ISO/IEC 8652:2012).
 
 5.a/3
           Discussion: This document is the Annotated Ada Reference
           Manual (AARM). It contains the entire text of the Ada 2012
-          standard (ISO/IEC 8652:201x), plus various annotations.  It is
+          standard (ISO/IEC 8652:2012), plus various annotations.  It is
           intended primarily for compiler writers, validation test
           writers, and other language lawyers.  The annotations include
           detailed rationale for individual rules and explanations of
           some of the more arcane interactions among the rules.
 
 
-File: aarm2012.info,  Node: 0.2,  Next: 0.99,  Prev: 0.1,  Up: Front Matter
+File: aarm2012.info,  Node: 0.3,  Next: 0.99,  Prev: 0.2,  Up: Front Matter
 
-0.2 Introduction
+0.3 Introduction
 ================
 
 1
@@ -276,18 +359,12 @@ Other available Ada documents include:
      in depth.  Rationales for Ada 83, Ada 95, and Ada 2005 are also
      available.
 
-3.a/3
-          Discussion: {AI05-0245-1AI05-0245-1} As of this writing
-          (December 2012), only five chapters of the Ada 2012 Rationale
-          have been published.  Additional chapters are in development
-          and should be published during 2013.
-
 4/1
    * This paragraph was deleted.
 
 5/3
    * The Ada Reference Manual (RM). This is the International Standard
-     -- ISO/IEC 8652:201x.
+     -- ISO/IEC 8652:2012.
 
 Design Goals
 
@@ -712,24 +789,25 @@ Amendment 1 are incorporated:
      structured manner than through pragmas.  See subclause *note
      13.1.1::.
 
-57.15/3
-   * The concept of assertions introduced in the 2005 edition is
-     extended with the ability to specify preconditions and
-     postconditions for subprograms, and invariants for private types.
-     The concept of constraints in defining subtypes is supplemented
-     with subtype predicates that enable subsets to be specified other
-     than as simple ranges.  These properties are all indicated using
-     aspect specifications.  See subclauses *note 3.2.4::, *note
-     6.1.1::, and *note 7.3.2::.
-
-57.16/3
-   * New forms of expressions are introduced.  These are if expressions,
-     case expressions, quantified expressions, and expression functions.
-     As well as being useful for programming in general by avoiding the
-     introduction of unnecessary assignments, they are especially
-     valuable in conditions and invariants since they avoid the need to
-     introduce auxiliary functions.  See subclauses *note 4.5.7::, *note
-     4.5.8::, and *note 6.8::.  Membership tests are also made more
+57.15/4
+   * {AI12-0141-1AI12-0141-1} The concept of assertions introduced in
+     the 2005 edition is extended with the ability to specify
+     preconditions and postconditions for subprograms, and invariants
+     for private types and interfaces.  The concept of constraints in
+     defining subtypes is supplemented with subtype predicates that
+     enable subsets to be specified other than as simple ranges.  These
+     properties are all indicated using aspect specifications.  See
+     subclauses *note 3.2.4::, *note 6.1.1::, and *note 7.3.2::.
+
+57.16/4
+   * {AI12-0141-1AI12-0141-1} New forms of expressions are introduced.
+     These are if expressions, case expressions, quantified expressions,
+     expression functions, and raise expressions.  As well as being
+     useful for programming in general by avoiding the introduction of
+     unnecessary assignments, they are especially valuable in conditions
+     and invariants since they avoid the need to introduce auxiliary
+     functions.  See subclauses *note 4.5.7::, *note 4.5.8::, *note
+     6.8::, and *note 11.3::.  Membership tests are also made more
      flexible.  See subclauses *note 4.4:: and *note 4.5.2::.
 
 57.17/3
@@ -1045,6 +1123,31 @@ improve the containers packages.  Finally, special 
thanks go to the
 convenor of ISO/IEC JTC 1/SC 22/WG 9, J. Tokar (USA), who guided the
 document through the standardization process.
 
+Acknowledgements for the Ada 2012 Corrigendum 1 version
+
+71.10/4
+The editor [R. Brukardt (USA)] would like to thank the many people whose
+hard work and assistance has made this update possible.
+
+71.11/4
+Thanks go out to all of the members of the ISO/IEC JTC 1/SC 22/WG 9 Ada
+Rapporteur Group, whose work on creating and editing the wording changes
+was critical to the entire process.  Especially valuable contributions
+came from the chairman of the ARG, J. Cousins (UK), who guided the work;
+T. Taft (USA), who seems to have the ability to cut any Gordian knot we
+encounter in wording; ; J. Barnes (UK) who continues to be able to find
+editorial errors invisible to most; S. Baird (USA), who so frequently
+finds obscure interactions that we now have named such things for him.
+Other ARG members who substantially contributed were: A. Burns (UK), R.
+Dewar (USA), G. Dismukes (USA), R. Duff (USA), B. Moore (Canada), E.
+Ploedereder (Germany), J.P. Rosen (France), E. Schonberg (USA), and T.
+Vardanega (Italy).
+
+71.12/4
+Finally, special thanks go to the convenor of ISO/IEC JTC 1/SC 22/WG 9,
+J. Tokar (USA), who guided the document through the standardization
+process.
+
 Changes
 
 72
@@ -1083,35 +1186,37 @@ Manual, except:
 
 Using this version of the Ada Reference Manual
 
-77.4/3
+77.4/4
 This document has been revised with the corrections specified in
-Technical Corrigendum 1 (ISO/IEC 8652:1995/COR.1:2001) and Amendment 1
-(ISO/IEC 8652/AMD 1:2007), along with changes specifically for this
-third edition.  In addition, more annotations have been added and a
-variety of editorial errors have been corrected.
+Technical Corrigendum 1 (ISO/IEC 8652:2012/COR.1:2016).  In addition,
+more annotations have been added and a variety of editorial errors have
+been corrected.
 
-77.5/3
+77.5/4
 Changes to the original 8652:1995 can be identified by the version
 number following the paragraph number.  Paragraphs with a version number
-of /1 were changed by Technical Corrigendum 1 or were editorial
-corrections at that time, while paragraphs with a version number of /2
-were changed by Amendment 1 or were more recent editorial corrections,
-and paragraphs with a version number of /3 were changed by the third
-(2012) edition of the Standard or were still more recent editorial
-corrections.  Paragraphs not so marked are unchanged by the third
-edition, Amendment 1, Technical Corrigendum 1, or editorial corrections.
-Paragraph numbers of unchanged paragraphs are the same as in the 1995
-edition of the Ada Reference Manual.  Inserted text is indicated by
-underlining, and deleted text is indicated by strikethroughs.  Some
-versions also use color to indicate the version of the change.Where
-paragraphs are inserted, the paragraph numbers are of the form pp.nn,
-where pp is the number of the preceding paragraph, and nn is an
-insertion number.  For instance, the first paragraph inserted after
-paragraph 8 is numbered 8.1, the second paragraph inserted is numbered
-8.2, and so on.  Deleted paragraphs are indicated by the text This
-paragraph was deleted.  Deleted paragraphs include empty paragraphs that
-were numbered in the 1995 edition of the Ada Reference Manual.  Similar
-markings and numbering are used for changes to annotations.
+of /1 were changed by Technical Corrigendum 1 for Ada 95 or were
+editorial corrections at that time, while paragraphs with a version
+number of /2 were changed by Amendment 1 or were more recent editorial
+corrections, and paragraphs with a version number of /3 were changed by
+the third (2012) edition of the Standard or were still more recent
+editorial corrections.  Paragraphs with a version number of /4 are
+changed by Technical Corrigendum 1 for Ada 2012 or were editorial
+corrections at that time.  Paragraphs not so marked are unchanged by
+Technical Corrigendum 1 for Ada 2012, the third edition, Amendment 1,
+Technical Corrigendum 1, or editorial corrections.  Paragraph numbers of
+unchanged paragraphs are the same as in the 1995 edition of the Ada
+Reference Manual.  Inserted text is indicated by underlining, and
+deleted text is indicated by strikethroughs.  Some versions also use
+color to indicate the version of the change.Where paragraphs are
+inserted, the paragraph numbers are of the form pp.nn, where pp is the
+number of the preceding paragraph, and nn is an insertion number.  For
+instance, the first paragraph inserted after paragraph 8 is numbered
+8.1, the second paragraph inserted is numbered 8.2, and so on.  Deleted
+paragraphs are indicated by the text This paragraph was deleted.
+Deleted paragraphs include empty paragraphs that were numbered in the
+1995 edition of the Ada Reference Manual.  Similar markings and
+numbering are used for changes to annotations.
 
 77.a/3
           To be honest: The paragraph number is considered part of the
@@ -1120,12 +1225,12 @@ markings and numbering are used for changes to 
annotations.
           changed.
 
 
-File: aarm2012.info,  Node: 0.99,  Prev: 0.2,  Up: Front Matter
+File: aarm2012.info,  Node: 0.99,  Prev: 0.3,  Up: Front Matter
 
 0.99
 ====
 
-========== INTERNATIONAL STANDARD   ISO/IEC 8652:2012(E)
+========== INTERNATIONAL STANDARD   ISO/IEC 8652:2012(E) with Cor 1:2016
 
 ==========  
 
@@ -1140,16 +1245,17 @@ File: aarm2012.info,  Node: 1,  Next: 2,  Prev: Front 
Matter,  Up: Top
 1 General
 *********
 
-2.a/3
+2.a/4
           Discussion: This Annotated Ada Reference Manual (AARM)
           contains the entire text of the third edition of the Ada
-          Reference Manual (the Ada 2012 RM), plus certain annotations.
-          The annotations give a more in-depth analysis of the language.
-          They describe the reason for each nonobvious rule, and point
-          out interesting ramifications of the rules and interactions
-          among the rules (interesting to language lawyers, that is).
-          Differences between Ada 83, Ada 95, Ada 2005, and Ada 2012 are
-          listed.  (The text you are reading now is an annotation.)
+          Reference Manual as updated by Technical Corrigendum 1 (the
+          Ada 2012 RM), plus certain annotations.  The annotations give
+          a more in-depth analysis of the language.  They describe the
+          reason for each nonobvious rule, and point out interesting
+          ramifications of the rules and interactions among the rules
+          (interesting to language lawyers, that is).  Differences
+          between Ada 83, Ada 95, Ada 2005, and Ada 2012 are listed.
+          (The text you are reading now is an annotation.)
 
 2.b/3
           The AARM stresses detailed correctness and uniformity over
@@ -1274,6 +1380,18 @@ File: aarm2012.info,  Node: 1,  Next: 2,  Prev: Front 
Matter,  Up: Top
 2.bb.8/3
                        * Wording Changes from Ada 2005.
 
+2.bb.9/4
+                       * Inconsistencies With Ada 2012,
+
+2.bb.10/4
+                       * Incompatibilities With Ada 2012,
+
+2.bb.11/4
+                       * Extensions to Ada 2012,
+
+2.bb.12/4
+                       * Wording Changes from Ada 2012.
+
 2.cc
              * The AARM also includes the following kinds of
                annotations.  These do not necessarily annotate the
@@ -1371,17 +1489,17 @@ inheritance, polymorphism of variables and methods, and 
generic units.
 The language treats modularity in the physical sense as well, with a
 facility to support separate compilation.
 
-3/3
-{AI05-0269-1AI05-0269-1} {AI05-0299-1AI05-0299-1} The language provides
-rich support for real-time, concurrent programming, and includes
-facilities for multicore and multiprocessor programming.  Errors can be
-signaled as exceptions and handled explicitly.  The language also covers
-systems programming; this requires precise control over the
-representation of data and access to system-dependent properties.
-Finally, a predefined environment of standard packages is provided,
-including facilities for, among others, input-output, string
-manipulation, numeric elementary functions, and random number
-generation, and definition and use of containers.
+3/4
+{AI05-0269-1AI05-0269-1} {AI05-0299-1AI05-0299-1}
+{AI12-0056-1AI12-0056-1} The language provides rich support for
+real-time, concurrent programming, and includes facilities for multicore
+and multiprocessor programming.  Errors can be signaled as exceptions
+and handled explicitly.  The language also covers systems programming;
+this requires precise control over the representation of data and access
+to system-dependent properties.  Finally, a predefined environment of
+standard packages is provided, including facilities for, among others,
+input-output, string manipulation, numeric elementary functions, random
+number generation, and definition and use of containers.
 
 * Menu:
 
@@ -1611,11 +1729,11 @@ The following Annexes are informative:
           each other; it is the intent that a single implementation can
           conform to all of them.
 
-24/3
-{AI05-0299-1AI05-0299-1} Each section is divided into subclauses that
-have a common structure.  Each clause and subclause first introduces its
-subject.  After the introductory text, text is labeled with the
-following headings:
+24/4
+{AI05-0299-1AI05-0299-1} {AI12-0056-1AI12-0056-1} Each clause is divided
+into subclauses that have a common structure.  Each clause and subclause
+first introduces its subject.  After the introductory text, text is
+labeled with the following headings:
 
                      _Language Design Principles_
 
@@ -1661,7 +1779,7 @@ resolution, including overload resolution.
                            _Legality Rules_
 
 27
-Rules that are enforced at compile time.  A construct is legal if it
+Rules that are enforced at compile time. A construct is legal if it
 obeys all of the Legality Rules.
 
 27.a
@@ -1693,8 +1811,8 @@ A definition of the compile-time effect of each construct.
                        _Post-Compilation Rules_
 
 29
-Rules that are enforced before running a partition.  A partition is
-legal if its compilation units are legal and it obeys all of the
+Rules that are enforced before running a partition. A partition is legal
+if its compilation units are legal and it obeys all of the
 Post-Compilation Rules.
 
 29.a
@@ -1863,7 +1981,7 @@ This material is informative.
           whether the semantics changes, we are asking whether the set
           of behaviors changes.)
 
-39.d/3
+39.d/4
           This is not part of the definition of the language, and does
           not appear in the Ada 95, Ada 2005, or Ada 2012 RM.
 
@@ -1878,7 +1996,7 @@ This material is informative.
           into an exception, or into an illegality, to be upwardly
           incompatible.
 
-39.f/3
+39.f/4
           This is not part of the definition of the language, and does
           not appear in the Ada 95, Ada 2005, or Ada 2012 RM.
 
@@ -1891,7 +2009,7 @@ This material is informative.
           83 program.  The vast majority of language changes fall into
           this category.
 
-39.h/3
+39.h/4
           This is not part of the definition of the language, and does
           not appear in the Ada 95, Ada 2005, or Ada 2012 RM.
 
@@ -1909,7 +2027,7 @@ This material is informative.
           attempted to list all wording changes, but only the
           "interesting" ones.
 
-39.k/3
+39.k/4
           This is not part of the definition of the language, and does
           not appear in the Ada 95, Ada 2005, or Ada 2012 RM.
 
@@ -1947,7 +2065,7 @@ This material is informative.
           defined behavior.  Therefore, we document these for
           completeness.
 
-39.o/3
+39.o/4
           This is not part of the definition of the language, and does
           not appear in the Ada 2005 or Ada 2012 RM.
 
@@ -1977,7 +2095,7 @@ This material is informative.
           In contrast, Ada 2005 compilers will have consistent behavior.
           Therefore, we document these for completeness.
 
-39.r/3
+39.r/4
           This is not part of the definition of the language, and does
           not appear in the Ada 2005 or Ada 2012 RM.
 
@@ -2008,7 +2126,7 @@ This material is informative.
           support the extensions.  Therefore, we document these for
           completeness.
 
-39.u/3
+39.u/4
           This is not part of the definition of the language, and does
           not appear in the Ada 2005 or Ada 2012 RM.
 
@@ -2028,7 +2146,7 @@ This material is informative.
           are marked Corrigendum; unmarked changes come from Amendment
           1.
 
-39.x/3
+39.x/4
           This is not part of the definition of the language, and does
           not appear in the Ada 2005 or Ada 2012 RM.
 
@@ -2065,7 +2183,7 @@ This material is informative.
           defined behavior.  Therefore, we document these for
           completeness.
 
-39.bb/3
+39.bb/4
           This is not part of the definition of the language, and does
           not appear in the Ada 2012 RM.
 
@@ -2094,7 +2212,7 @@ This material is informative.
           Ada 2012 compilers will have consistent behavior.  Therefore,
           we document these for completeness.
 
-39.ee/3
+39.ee/4
           This is not part of the definition of the language, and does
           not appear in the Ada 2012 RM.
 
@@ -2123,7 +2241,7 @@ This material is informative.
           support the extensions.  Therefore, we document these for
           completeness.
 
-39.hh/3
+39.hh/4
           This is not part of the definition of the language, and does
           not appear in the Ada 2012 RM.
 
@@ -2143,10 +2261,124 @@ This material is informative.
           classified as Binding Interpretations and strictly speaking
           belong to Ada 2005; other items only belong to Ada 2012.
 
-39.kk/3
+39.kk/4
           This is not part of the definition of the language, and does
           not appear in the Ada 2012 RM.
 
+39.ll/4
+          Discussion:  
+
+          The next three headings list all language changes between
+          original Ada 2012 (the language defined by unmodified ISO/IEC
+          8652:2012(E)) and current Ada 2012 (the language defined by
+          ISO/IEC 8652:2012(E) as corrected by the Corrigendum ISO/IEC
+          8652:2012/Cor 1:2016).  Each language change falls into one of
+          the following three categories:
+
+                    _Inconsistencies With Ada 2012_
+
+39.mm/4
+          This heading lists all of the upward inconsistencies between
+          original and current Ada 2012.  Upward inconsistencies are
+          situations in which a legal original Ada 2012 program is a
+          legal current Ada 2012 program with different semantics.
+
+39.nn/4
+          Inconsistencies marked with Corrigendum: are corrections to
+          the original Ada 2012 definition added by Technical
+          Corrigendum 1 to Ada 2012.  Formally, these are
+          inconsistencies caused by Ada Issues classified as Binding
+          Interpretations; implementations of Ada 2012 are supposed to
+          follow these corrections, not the original flawed language
+          definition.  Thus, these strictly speaking are not
+          inconsistencies between current and original Ada 2012.
+          Practically, however, they very well may be, as early Ada 2012
+          implementations might not follow the recommendation.
+          Inconsistencies so marked are not portable between Ada 2012
+          implementations.  Therefore, we document these for
+          completeness.
+
+39.oo/4
+          This is not part of the definition of the language, and does
+          not appear in any version of the Ada RM.
+
+                   _Incompatibilities With Ada 2012_
+
+39.pp/4
+          This heading lists all of the upward incompatibilities between
+          original and current Ada 2012, except for the ones listed
+          under "Inconsistencies With Ada 2012" above.  These are the
+          situations in which a legal original Ada 2012 program is
+          illegal in current Ada 2012.
+
+39.qq/4
+          As with inconsistencies, incompatibilities marked with
+          Corrigendum: are corrections to the original Ada 2012
+          definition added by Corrigendum 1 to Ada 2012 Formally, these
+          are incompatibilities caused by Ada Issues classified as
+          Binding Interpretations; implementations of Ada 2012 are
+          supposed to follow these corrections, not the original flawed
+          language definition.  Thus, these strictly speaking are not
+          incompatibilities between current and original Ada 2012.
+          Practically, however, they very well may be, as early Ada 2012
+          implementations might not follow the recommendation.
+          Therefore, some Ada 2012 implementations may be able to
+          compile the examples, while others might not.  Therefore, we
+          document these for completeness.
+
+39.rr/4
+          This is not part of the definition of the language, and does
+          not appear in any version of the Ada RM.
+
+                       _Extensions to Ada 2012_
+
+39.ss/4
+          This heading is used to list all upward compatible language
+          changes; that is, language extensions.  These are the
+          situations in which a legal current Ada 2012 program is not a
+          legal original Ada 2012 program.  The vast majority of
+          language changes fall into this category.
+
+39.tt/4
+          As with incompatibilities, extensions marked with Corrigendum:
+          are corrections to the original Ada 2012 definition added by
+          Corrigendum 1 to Ada 2012.  Formally, these are extensions
+          allowed by Ada Issues classified as Binding Interpretations.
+          As corrections, implementations of Ada 2012 (and sometimes Ada
+          95) are allowed to implement these extensions.  Thus, these
+          strictly speaking are not extensions of Ada 2012; they're part
+          of Ada 2012.  Practically, however, they very well may be
+          extensions, as early Ada 2012 implementations might not
+          implement the extension.  Therefore, some Ada 2012
+          implementations may be able to compile the examples, while
+          others might not.  Therefore, we document these for
+          completeness.
+
+39.uu/4
+          This is not part of the definition of the language, and does
+          not appear in any version of the Ada RM.
+
+39.vv/4
+           
+
+          As explained above, the next heading does not represent any
+          language change:
+
+                    _Wording Changes from Ada 2012_
+
+39.ww/4
+          This heading lists some of the nonsemantic changes between the
+          original and corrected Ada 2012 RM. This heading lists only
+          "interesting" changes (for instance, editorial corrections are
+          not listed).  Items marked Corrigendum: are included in
+          Corrigendum 1 to Ada 2012.  These items come from Ada Issues
+          classified as Binding Interpretations and strictly speaking
+          belong to Ada 2012.
+
+39.xx/4
+          This is not part of the definition of the language, and does
+          not appear in any version of the Ada RM.
+
 
 File: aarm2012.info,  Node: 1.1.3,  Next: 1.1.4,  Prev: 1.1.2,  Up: 1.1
 
@@ -2271,7 +2503,7 @@ A conforming implementation shall:
 
 8
 The external effect of the execution of an Ada program is defined in
-terms of its interactions with its external environment.  The following
+terms of its interactions with its external environment. The following
 are defined as external interactions:
 
 9
@@ -2710,9 +2942,9 @@ evaluations are defined to happen in an arbitrary order, 
with conversion
 of the results to some subtypes, or with some run-time checks, the
 evaluations, conversions, and checks may be arbitrarily interspersed, so
 long as each expression is evaluated before converting or checking its
-value.  [Note that the effect of a program can depend on the order
-chosen by the implementation.  This can happen, for example, if two
-actual parameters of a given call have side effects.]
+value. [Note that the effect of a program can depend on the order chosen
+by the implementation.  This can happen, for example, if two actual
+parameters of a given call have side effects.]
 
 18.a
           Discussion: Programs will be more portable if their external
@@ -2849,10 +3081,10 @@ categories:
 8
      The language rules define certain kinds of errors that need not be
      detected either prior to or during run time, but if not detected,
-     the range of possible effects shall be bounded.  The errors of this
-     category are called bounded errors.  The possible effects of a
-     given bounded error are specified for each such error, but in any
-     case one possible effect of a bounded error is the raising of the
+     the range of possible effects shall be bounded. The errors of this
+     category are called bounded errors. The possible effects of a given
+     bounded error are specified for each such error, but in any case
+     one possible effect of a bounded error is the raising of the
      exception Program_Error.
 
 9
@@ -2901,7 +3133,7 @@ conform to additional requirements associated with the 
mode, such as an
 excessive number of warnings or violation of coding style guidelines.
 Similarly, in a nonstandard mode, the implementation may apply special
 optimizations or alternative algorithms that are only meaningful for
-programs that satisfy certain criteria specified by the implementation.  
+programs that satisfy certain criteria specified by the implementation. 
 In any case, an implementation shall support a standard mode that
 conforms to the requirements of this International Standard; in
 particular, in the standard mode, all legal compilation_units shall be
@@ -2938,10 +3170,10 @@ should raise Program_Error.
 12.b
           Other situations that are erroneous in Ada 83 are changed to
           be bounded errors.  In particular, evaluating an uninitialized
-          scalar variable is a bounded error.  The possible results are
+          scalar variable is a bounded error. The possible results are
           to raise Program_Error (as always), or to produce a
           machine-representable value (which might not be in the subtype
-          of the variable).  Violating a Range_Check or Overflow_Check
+          of the variable). Violating a Range_Check or Overflow_Check
           raises Constraint_Error, even if the value came from an
           uninitialized variable.  This means that optimizers can no
           longer "assume" that all variables are initialized within
@@ -3074,7 +3306,7 @@ to the CRC Concise Encyclopedia of Mathematics, Second 
Edition.  Other
 terms not defined in this International Standard are to be interpreted
 according to the Webster's Third New International Dictionary of the
 English Language.  Informal descriptions of some terms are also given in
-*note Annex N::, "*note Annex N:: Glossary".  
+*note Annex N::, "*note Annex N:: Glossary". 
 
 1.a
           Discussion: The index contains an entry for every defined
@@ -3092,24 +3324,24 @@ English Language.  Informal descriptions of some terms 
are also given in
 
 1.c/3
           Discussion: Here are some AARM-only definitions: The Ada
-          Rapporteur Group (ARG) interprets the Ada Reference Manual.  
-          An Ada Issue (AI) is a numbered ruling from the ARG. Ada
-          Issues created for Ada 83 are denoted as "AI83", while Ada
-          Issues created for Ada 95 are denoted as "AI95" in this
-          document.  Similarly, Ada Issues created for Ada 2005 are
-          denoted as "AI05" The Ada Commentary Integration Document
-          (ACID) is an edition of the Ada 83 RM in which clearly marked
-          insertions and deletions indicate the effect of integrating
-          the approved AIs.  The Uniformity Rapporteur Group (URG)
-          issued recommendations intended to increase uniformity across
-          Ada implementations.  The functions of the URG have been
-          assumed by the ARG. A Uniformity Issue (UI) was a numbered
+          Rapporteur Group (ARG) interprets the Ada Reference Manual. An
+          Ada Issue (AI) is a numbered ruling from the ARG. Ada Issues
+          created for Ada 83 are denoted as "AI83", while Ada Issues
+          created for Ada 95 are denoted as "AI95" in this document.
+          Similarly, Ada Issues created for Ada 2005 are denoted as
+          "AI05" The Ada Commentary Integration Document (ACID) is an
+          edition of the Ada 83 RM in which clearly marked insertions
+          and deletions indicate the effect of integrating the approved
+          AIs. The Uniformity Rapporteur Group (URG) issued
+          recommendations intended to increase uniformity across Ada
+          implementations.  The functions of the URG have been assumed
+          by the ARG. A Uniformity Issue (UI) was a numbered
           recommendation from the URG. A Defect Report and Response is
           an official query to WG9 about an error in the standard.
           Defect Reports are processed by the ARG, and are referenced
           here by their ISO numbers: 8652/nnnn.  Most changes to the Ada
           95 standard include reference(s) to the Defect Report(s) that
-          prompted the change.  The Ada Conformity Assessment Test Suite
+          prompted the change. The Ada Conformity Assessment Test Suite
           (ACATS) is a set of tests intended to check the conformity of
           Ada implementations to this standard.  This set of tests was
           previously known as the Ada Compiler Validation Capability
@@ -3151,7 +3383,7 @@ File: aarm2012.info,  Node: 2.1,  Next: 2.2,  Up: 2
 {AI05-0266-1AI05-0266-1} The character repertoire for the text of an Ada
 program consists of the entire coding space described by the ISO/IEC
 10646:2011 Universal Multiple-Octet Coded Character Set.  This coding
-space is organized in planes, each plane comprising 65536 characters.  
+space is organized in planes, each plane comprising 65536 characters. 
 
 1.a/2
           This paragraph was deleted.{AI95-00285-01AI95-00285-01}
@@ -3219,7 +3451,7 @@ Category, Simple Uppercase Mapping, Uppercase Mapping, 
and Special Case
 Condition of the documents referenced by the note in Clause 1 of ISO/IEC
 10646:2011.  The actual set of graphic symbols used by an implementation
 for the visual representation of the text of an Ada program is not
-specified.  
+specified. 
 
 6/3
 {AI95-00285-01AI95-00285-01} {AI05-0266-1AI05-0266-1} Characters are
@@ -3319,7 +3551,7 @@ categorized as follows:
                TABULATION), 16#0A# (LINE FEED), 16#0B# (LINE
                TABULATION), 16#0C# (FORM FEED), 16#0D# (CARRIAGE
                RETURN), 16#85# (NEXT LINE), and the characters in
-               categories separator_line and separator_paragraph.  
+               categories separator_line and separator_paragraph. 
 
 13.a/2
           Discussion: ISO/IEC 10646:2003 does not define the names of
@@ -3608,8 +3840,8 @@ that form its compilations, excluding comments.
 
 2/3
 {AI95-00285-01AI95-00285-01} {AI05-0262-1AI05-0262-1} The text of a
-compilation is divided into lines.  In general, the representation for
-an end of line is implementation defined.  However, a sequence of one or
+compilation is divided into lines. In general, the representation for an
+end of line is implementation defined.  However, a sequence of one or
 more format_effectors other than the character whose code point is
 16#09# (CHARACTER TABULATION) signifies at least one end of line.
 
@@ -3937,7 +4169,7 @@ File: aarm2012.info,  Node: 2.4,  Next: 2.5,  Prev: 2.3,  
Up: 2
 
 1
 There are two kinds of numeric_literals, real literals and integer
-literals.  A real literal is a numeric_literal that includes a point; an
+literals. A real literal is a numeric_literal that includes a point; an
 integer literal is a numeric_literal without a point.
 
                                _Syntax_
@@ -4137,7 +4369,7 @@ File: aarm2012.info,  Node: 2.6,  Next: 2.7,  Prev: 2.5,  
Up: 2
 (possibly none) enclosed between two quotation marks used as string
 brackets.  They are used to represent operator_symbols (see *note
 6.1::), values of a string type (see *note 4.2::), and array
-subaggregates (see *note 4.3.3::).  ]
+subaggregates (see *note 4.3.3::). ]
 
                                _Syntax_
 
@@ -4333,7 +4565,7 @@ implementation may support additional 
(implementation-defined) pragmas.
 
 9
 The name of a pragma is the identifier following the reserved word
-pragma.  The name or expression of a pragma_argument_association is a
+pragma. The name or expression of a pragma_argument_association is a
 pragma argument.
 
 9.a/2
@@ -4874,7 +5106,7 @@ File: aarm2012.info,  Node: 3.1,  Next: 3.2,  Up: 3
 
 1
 The language defines several kinds of named entities that are declared
-by declarations.  The entity's name is defined by the declaration,
+by declarations. The entity's name is defined by the declaration,
 usually by a defining_identifier (*note 3.1: S0022.), but sometimes by a
 defining_character_literal (*note 3.5.1: S0040.) or
 defining_operator_symbol (*note 6.1: S0171.).
@@ -4903,7 +5135,7 @@ of declaration defined as follows.
 
 5
 A declaration is a language construct that associates a name with (a
-view of) an entity.  A declaration may appear explicitly in the program
+view of) an entity. A declaration may appear explicitly in the program
 text (an explicit declaration), or may be supposed to occur at a given
 place in the text as a consequence of the semantics of another construct
 (an implicit declaration).
@@ -4927,7 +5159,7 @@ parameter_specification (*note 6.1: S0175.); a 
subprogram_body (*note
 6.3: S0177.); an extended_return_object_declaration (*note 6.5: S0185.);
 an entry_declaration (*note 9.5.2: S0218.); an entry_index_specification
 (*note 9.5.2: S0224.); a choice_parameter_specification (*note 11.2:
-S0267.); a generic_formal_parameter_declaration (*note 12.1: S0274.).
+S0267.); a generic_formal_parameter_declaration (*note 12.1: S0275.).
 
 6.a
           Discussion: This list (when basic_declaration is expanded out)
@@ -4994,7 +5226,7 @@ declarations associate an identifier with a declared 
entity.  Within its
 scope, and only there, there are places where it is possible to use the
 identifier to refer to the declaration, the view it defines, and the
 associated entity; these places are defined by the visibility rules (see
-*note 8.3::).  At such places the identifier is said to be a name of the
+*note 8.3::). At such places the identifier is said to be a name of the
 entity (the direct_name or selector_name); the name is said to denote
 the declaration, the view, and the associated entity (see *note 8.6::).
 The declaration is said to declare the name, the view, and in most
@@ -5010,7 +5242,7 @@ function can be declared with an operator_symbol as its 
name (see *note
 The syntax rules use the terms defining_identifier,
 defining_character_literal (*note 3.5.1: S0040.), and
 defining_operator_symbol (*note 6.1: S0171.) for the defining occurrence
-of a name; these are collectively called defining names.  The terms
+of a name; these are collectively called defining names. The terms
 direct_name and selector_name are used for usage occurrences of
 identifiers, character_literals, and operator_symbols.  These are
 collectively called usage names.
@@ -5027,14 +5259,14 @@ collectively called usage names.
 
 11
 The process by which a construct achieves its run-time effect is called
-execution.  This process is also called elaboration for declarations and
+execution. This process is also called elaboration for declarations and
 evaluation for expressions.  One of the terms execution, elaboration, or
 evaluation is defined by this International Standard for each construct
 that has a run-time effect.
 
 11.a
           Glossary entry: The process by which a construct achieves its
-          run-time effect is called execution.  Execution of a
+          run-time effect is called execution. Execution of a
           declaration is also called elaboration.  Execution of an
           expression is also called evaluation.
 
@@ -5089,8 +5321,8 @@ that has a run-time effect.
 
 11.g
           To be honest: A construct is elaborable if elaboration is
-          defined for it.  A construct is evaluable if evaluation is
-          defined for it.  A construct is executable if execution is
+          defined for it. A construct is evaluable if evaluation is
+          defined for it. A construct is executable if execution is
           defined for it.
 
 11.h
@@ -5123,8 +5355,8 @@ that has a run-time effect.
 
 12
      1  At compile time, the declaration of an entity declares the
-     entity.  At run time, the elaboration of the declaration creates
-     the entity.
+     entity. At run time, the elaboration of the declaration creates the
+     entity.
 
 12.a
           Ramification: Syntactic categories for declarations are named
@@ -5270,7 +5502,7 @@ File: aarm2012.info,  Node: 3.2,  Next: 3.3,  Prev: 3.1,  
Up: 3
 
 1
 A type is characterized by a set of values, and a set of primitive
-operations which implement the fundamental aspects of its semantics.  An
+operations which implement the fundamental aspects of its semantics. An
 object of a given type is a run-time entity that contains (has) a value
 of the type.
 
@@ -5401,9 +5633,9 @@ composite types are those whose values are composed of 
component values.
 
 3
 The elementary types are the scalar types (discrete and real) and the
-access types (whose values provide access to objects or subprograms).  
+access types (whose values provide access to objects or subprograms). 
 Discrete types are either integer types or are defined by enumeration of
-their values (enumeration types).  Real types are either floating point
+their values (enumeration types). Real types are either floating point
 types or fixed point types.
 
 4/2
@@ -5477,10 +5709,10 @@ subjected to a condition that excludes the null value 
(see *note
 {AI95-00231-01AI95-00231-01} {AI95-00415-01AI95-00415-01} A subtype of a
 given type is a combination of the type, a constraint on values of the
 type, and certain attributes specific to the subtype.  The given type is
-called the type of the subtype.  Similarly, the associated constraint is
+called the type of the subtype. Similarly, the associated constraint is
 called the constraint of the subtype.   The set of values of a subtype
 consists of the values of its type that satisfy its constraint and any
-exclusion of the null value.  Such values belong to the subtype.  
+exclusion of the null value. Such values belong to the subtype. 
 
 8.a
           Discussion: We make a strong distinction between a type and
@@ -5547,7 +5779,7 @@ unconstrained characteristics).
      description of the rules of the language -- generally those that
      have their own particular set of primitive operations (see *note
      3.2.3::), or that correspond to a set of types that are matched by
-     a given kind of generic formal type (see *note 12.5::).  The
+     a given kind of generic formal type (see *note 12.5::). The
      following are examples of "interesting" language-defined classes:
      elementary, scalar, discrete, enumeration, character, boolean,
      integer, signed integer, modular, real, floating point, fixed
@@ -5562,9 +5794,9 @@ unconstrained characteristics).
 10.a
           Discussion: A value is a run-time entity with a given type
           which can be assigned to an object of an appropriate subtype
-          of the type.  An operation is a program entity that operates
-          on zero or more operands to produce an effect, or yield a
-          result, or both.
+          of the type. An operation is a program entity that operates on
+          zero or more operands to produce an effect, or yield a result,
+          or both.
 
 10.b/2
           Ramification: {AI95-00442-01AI95-00442-01} Note that a type's
@@ -5759,9 +5991,9 @@ S0023.) defines the remaining characteristics of (the 
view of) the type.
 7/2
 {AI95-00230-01AI95-00230-01} A type defined by a type_declaration (*note
 3.2.1: S0023.) is a named type; such a type has one or more nameable
-subtypes.  Certain other forms of declaration also include type
+subtypes. Certain other forms of declaration also include type
 definitions as part of the declaration for an object.  The type defined
-by such a declaration is anonymous -- it has no nameable subtypes.  For
+by such a declaration is anonymous -- it has no nameable subtypes. For
 explanatory purposes, this International Standard sometimes refers to an
 anonymous type by a pseudo-name, written in italics, and uses such
 pseudo-names at places where the syntax normally requires an identifier.
@@ -5831,7 +6063,7 @@ operators].  [The package Standard is described in *note 
A.1::.]
 
 11
 The elaboration of a full_type_declaration consists of the elaboration
-of the full type definition.  Each elaboration of a full type definition
+of the full type definition. Each elaboration of a full type definition
 creates a distinct type and its first subtype.
 
 11.a
@@ -5974,9 +6206,8 @@ type, as defined by a subtype_indication.
                         _Name Resolution Rules_
 
 8
-A subtype_mark shall resolve to denote a subtype.  The type determined
-by a subtype_mark is the type of the subtype denoted by the
-subtype_mark.
+A subtype_mark shall resolve to denote a subtype. The type determined by
+a subtype_mark is the type of the subtype denoted by the subtype_mark.
 
 8.a/3
           Ramification: {AI05-0005-1AI05-0005-1} Types are never
@@ -5989,7 +6220,7 @@ subtype_mark.
 
 9
 The elaboration of a subtype_declaration consists of the elaboration of
-the subtype_indication.  The elaboration of a subtype_indication creates
+the subtype_indication. The elaboration of a subtype_indication creates
 a new subtype.  If the subtype_indication does not include a constraint,
 the new subtype has the same (possibly null) constraint as that denoted
 by the subtype_mark.  The elaboration of a subtype_indication that
@@ -6010,11 +6241,11 @@ includes a constraint proceeds as follows:
 
 12
 The condition imposed by a constraint is the condition obtained after
-elaboration of the constraint.  The rules defining compatibility are
+elaboration of the constraint. The rules defining compatibility are
 given for each form of constraint in the appropriate subclause.  These
 rules are such that if a constraint is compatible with a subtype, then
 the condition imposed by the constraint cannot contradict any condition
-already imposed by the subtype on its values.  The exception
+already imposed by the subtype on its values. The exception
 Constraint_Error is raised if any check of compatibility fails.
 
 12.a
@@ -6100,7 +6331,7 @@ yields a value of type T, if it has an operand whose 
expected type (see
 *note 8.6::) is T, or if it has an access parameter or access result
 type (see *note 6.1::) designating T. A predefined operator, or other
 language-defined operation such as assignment or a membership test, that
-operates on a type, is called a predefined operation of the type.  The
+operates on a type, is called a predefined operation of the type. The
 primitive operations of a type are the predefined operations of the
 type, plus any user-defined primitive subprograms.
 
@@ -6278,19 +6509,18 @@ type_declaration or a subtype_declaration, and applies 
to the declared
 subtype.  In addition, predicate specifications apply to certain other
 subtypes:
 
-4/3
-   * For a (first) subtype defined by a derived type declaration, the
-     predicates of the parent subtype and the progenitor subtypes apply.
+4/4
+   * {AI12-0071-1AI12-0071-1} {AI12-0099-1AI12-0099-1} For a (first)
+     subtype defined by a type declaration, any predicates of parent or
+     progenitor subtypes apply.
 
 5/3
    * For a subtype created by a subtype_indication, the predicate of the
      subtype denoted by the subtype_mark applies.
 
-6/3
-{AI05-0153-3AI05-0153-3} The predicate of a subtype consists of all
-predicate specifications that apply, and-ed together; if no predicate
-specifications apply, the predicate is True [(in particular, the
-predicate of a base subtype is True)].
+6/4
+This paragraph was deleted.{AI05-0153-3AI05-0153-3}
+{AI12-0071-1AI12-0071-1}
 
 7/3
 {AI05-0290-1AI05-0290-1} Predicate checks are defined to be enabled or
@@ -6317,11 +6547,11 @@ disabled for a given subtype as follows:
           regardless of whether predicate checking is enabled for any
           other subtypes mentioned in the declaration];
 
-12/3
-   * If a subtype is defined by a derived type declaration that does not
-     include a predicate specification, then predicate checks are
-     enabled for the subtype if and only if predicate checks are enabled
-     for at least one of the parent subtype and the progenitor subtypes;
+12/4
+   * {AI12-0099-1AI12-0099-1} If a subtype is defined by a type
+     declaration that does not include a predicate specification, then
+     predicate checks are enabled for the subtype if and only if any
+     predicate checks are enabled for parent or progenitor subtypes;
 
 13/3
    * If a subtype is created by a subtype_indication other than in one
@@ -6341,11 +6571,33 @@ disabled for a given subtype as follows:
           progenitors.  See the "derived type declaration" wording
           above.
 
-14.b/3
-          Even when predicate checks are disabled, a predicate cam
-          affect various Legality Rules, the results of membership
-          tests, the items in a for loop, and the result of the Valid
-          attribute.
+14.b/4
+          {AI12-0071-1AI12-0071-1} Even when predicate checks are
+          disabled, a predicate can affect various Legality Rules, the
+          results of membership tests, the items in a for loop, and the
+          result of the Valid attribute.
+
+14.1/4
+{AI12-0054-2AI12-0054-2} For a subtype with a directly-specified
+predicate aspect, the following additional language-defined aspect may
+be specified with an aspect_specification (see *note 13.1.1::):
+
+14.2/4
+Predicate_Failure
+               This aspect shall be specified by an expression, which
+               determines the action to be performed when a predicate
+               check fails because a directly-specified predicate aspect
+               of the subtype evaluates to False, as explained below.
+
+14.b.1/4
+          Aspect Description for Predicate_Failure: Action to be
+          performed when a predicate check fails.
+
+                        _Name Resolution Rules_
+
+14.3/4
+{AI12-0054-2AI12-0054-2} The expected type for the Predicate_Failure
+expression is String.
 
                            _Legality Rules_
 
@@ -6357,10 +6609,11 @@ of the following:
 16/3
    * a static expression;
 
-17/3
-   * a membership test whose simple_expression is the current instance,
-     and whose membership_choice_list meets the requirements for a
-     static membership test (see *note 4.9::);
+17/4
+   * {AI12-0039-1AI12-0039-1} a membership test whose
+     tested_simple_expression is the current instance, and whose
+     membership_choice_list meets the requirements for a static
+     membership test (see *note 4.9::);
 
 18/3
    * a case_expression whose selecting_expression is the current
@@ -6371,9 +6624,10 @@ of the following:
      operand is the current instance, and the other is a static
      expression;
 
-20/3
-   * {AI05-0262-1AI05-0262-1} a call to a predefined boolean logical
-     operator, where each operand is predicate-static;
+20/4
+   * {AI05-0262-1AI05-0262-1} {AI12-0099-1AI12-0099-1} a call to a
+     predefined boolean operator and, or, xor, or not, where each
+     operand is predicate-static;
 
 21/3
    * {AI05-0269-1AI05-0269-1} a short-circuit control form where both
@@ -6460,26 +6714,94 @@ part of an instance of a generic unit.
 
                           _Dynamic Semantics_
 
+29.1/4
+{AI125-0071AI125-0071} If any of the above Legality Rules is violated in
+an instance of a generic unit, Program_Error is raised at the point of
+the violation.
+
+29.a/4
+          Discussion: This is the usual way around the contract model;
+          this applies even in instance bodies.  Note that errors in
+          instance specifications will be detected at compile-time by
+          the "re-check" of the specification, only errors in the body
+          should raise Program_Error.
+
+29.2/4
+{AI12-0071-1AI12-0071-1} To determine whether a value satisfies the
+predicates of a subtype S, the following tests are performed in the
+following order, until one of the tests fails, in which case the
+predicates are not satisfied and no further tests are performed, or all
+of the tests succeed, in which case the predicates are satisfied:
+
+29.3/4
+   * the value is first tested to determine whether it satisfies any
+     constraints or any null exclusion of S;
+
+29.4/4
+   * then:
+
+29.5/4
+        * if S is a first subtype, the value is tested to determine
+          whether it satisfies the predicates of the parent and
+          progenitor subtypes (if any) of S (in an arbitrary order);
+
+29.b/4
+          Ramification: This rule has an effect for derived types (which
+          have a parent subtype and may have progenitors) and for task
+          and protected types (which may have progentitors).  Other
+          kinds of type declarations can have neither, and no test is
+          required for other first subtypes.
+
+29.6/4
+        * if S is defined by a subtype_indication, the value is tested
+          to determine whether it satisfies the predicates of the
+          subtype denoted by the subtype_mark of the subtype_indication;
+
+29.7/4
+   * finally, if S is defined by a declaration to which one or more
+     predicate specifications apply, the predicates are evaluated (in an
+     arbitrary order) to test that all of them yield True for the given
+     value.
+
+29.b.1/4
+          Discussion: It is important to stop on the first of the above
+          steps that fails, as later steps might presume that the
+          earlier steps had succeeded.
+
 30/3
 {AI05-0153-3AI05-0153-3} {AI05-0290-1AI05-0290-1} If predicate checks
 are enabled for a given subtype, then:
 
-31/3
-          [On every subtype conversion, the predicate of the target
-          subtype is evaluated, and a check is performed that the
-          predicate is True.  This includes all parameter passing,
-          except for certain parameters passed by reference, which are
-          covered by the following rule: ] After normal completion and
-          leaving of a subprogram, for each in out or out parameter that
-          is passed by reference, the predicate of the subtype of the
-          actual is evaluated, and a check is performed that the
-          predicate is True.  For an object created by an
-          object_declaration with no explicit initialization expression,
-          or by an uninitialized allocator, if any subcomponents have
-          default_expressions, the predicate of the nominal subtype of
-          the created object is evaluated, and a check is performed that
-          the predicate is True.  Assertions.Assertion_Error is raised
-          if any of these checks fail.
+31/4
+          {AI12-0054-2AI12-0054-2} {AI12-0071-1AI12-0071-1} [On every
+          subtype conversion, a check is performed that the operand
+          satisfies the predicates of the target subtype.  This includes
+          all parameter passing, except for certain parameters passed by
+          reference, which are covered by the following rule: ] After
+          normal completion and leaving of a subprogram, for each in out
+          or out parameter that is passed by reference, a check is
+          performed that the value of the parameter satisfies the
+          predicates of the subtype of the actual.  For an object
+          created by an object_declaration with no explicit
+          initialization expression, or by an uninitialized allocator,
+          if any subcomponents have default_expressions, a check is
+          performed that the value of the created object satisfies the
+          predicates of the nominal subtype.
+
+31.1/4
+          {AI12-0054-2AI12-0054-2} If any of the predicate checks fail,
+          Assertion_Error is raised, unless the subtype whose
+          directly-specified predicate aspect evaluated to False also
+          has a directly-specified Predicate_Failure aspect.  In that
+          case, the specified Predicate_Failure expression is evaluated;
+          if the evaluation of the Predicate_Failure expression
+          propagates an exception occurrence, then this occurrence is
+          propagated for the failure of the predicate check; otherwise,
+          Assertion_Error is raised, with an associated message string
+          defined by the value of the Predicate_Failure expression.  In
+          the absence of such a Predicate_Failure aspect, an
+          implementation-defined message string is associated with the
+          Assertion_Error exception.
 
 31.a/3
           Ramification: Predicates are not evaluated at the point of the
@@ -6490,21 +6812,21 @@ are enabled for a given subtype, then:
           even in the presence of potentially invalid values, just as
           constraint checks can be removed.
 
-32/3
-{AI05-0262-1AI05-0262-1} A value satisfies a predicate if the predicate
-is True for that value.
+31.c/4
+          Implementation defined: The message string associated with the
+          Assertion_Error exception raised by the failure of a predicate
+          check if there is no applicable Predicate_Failure aspect.
 
-33/3
-{AI05-0153-3AI05-0153-3} {AI05-0276-1AI05-0276-1} If any of the above
-Legality Rules is violated in an instance of a generic unit,
-Program_Error is raised at the point of the violation.
+32/4
+This paragraph was deleted.{AI05-0262-1AI05-0262-1}
+{AI125-0071AI125-0071}
 
-33.a/3
-          Discussion: This is the usual way around the contract model;
-          this applies even in instance bodies.  Note that errors in
-          instance specifications will be detected at compile-time by
-          the "re-check" of the specification, only errors in the body
-          should raise Program_Error.
+33/4
+This paragraph was deleted.{AI05-0153-3AI05-0153-3}
+{AI05-0276-1AI05-0276-1} {AI125-0071AI125-0071}
+
+33.a/4
+          This paragraph was deleted.
 
      NOTES
 
@@ -6521,13 +6843,116 @@ Program_Error is raised at the point of the violation.
      predicate of a record subtype is not checked when a subcomponent is
      modified.
 
+36/4
+     7  {AI12-0071-1AI12-0071-1} No predicates apply to the base subtype
+     of a scalar type; every value of a scalar type T is considered to
+     satisfy the predicates of T'Base.
+
+37/4
+     8  {AI12-0054-2AI12-0054-2} Predicate_Failure expressions are never
+     evaluated during the evaluation of a membership test (see *note
+     4.5.2::) or Valid attribute (see *note 13.9.2::).
+
+38/4
+     9  {AI12-0054-2AI12-0054-2} A Predicate_Failure expression can be a
+     raise_expression (see *note 11.3::).
+
+                              _Examples_
+
+39/4
+     {AI12-0054-2AI12-0054-2} subtype Basic_Letter is Character -- See *note 
A.3.2:: for "basic letter".
+        with Static_Predicate => Basic_Letter in 'A'..'Z' | 'a'..'z' | '�' | 
'�' | '�' | '�' | '�' | '�' | '�';
+
+40/4
+     {AI12-0054-2AI12-0054-2} subtype Even_Integer is Integer
+        with Dynamic_Predicate => Even_Integer mod 2 = 0,
+            Predicate_Failure => "Even_Integer must be a multiple of 2";
+
+41/4
+{AI12-0054-2AI12-0054-2} Text_IO (see *note A.10.1::) could have used
+predicates to describe some common exceptional conditions as follows:
+
+42/4
+     with Ada.IO_Exceptions;
+     package Ada.Text_IO is
+
+43/4
+        type File_Type is limited private;
+
+44/4
+        subtype Open_File_Type is File_Type
+           with Dynamic_Predicate => Is_Open (Open_File_Type),
+                Predicate_Failure => raise Status_Error with "File not open";
+        subtype Input_File_Type is Open_File_Type
+           with Dynamic_Predicate => Mode (Input_File_Type) = In_File,
+                Predicate_Failure => raise Mode_Error with "Cannot read file: 
" &
+                   Name (Input_File_Type);
+        subtype Output_File_Type is Open_File_Type
+           with Dynamic_Predicate => Mode (Output_File_Type) /= In_File,
+                Predicate_Failure => raise Mode_Error with "Cannot write file: 
" &
+                   Name (Output_File_Type);
+
+45/4
+        ...
+
+46/4
+        function Mode (File : in Open_File_Type) return File_Mode;
+        function Name (File : in Open_File_Type) return String;
+        function Form (File : in Open_File_Type) return String;
+
+47/4
+        ...
+
+48/4
+        procedure Get (File : in Input_File_Type; Item : out Character);
+
+49/4
+        procedure Put (File : in Output_File_Type; Item : in Character);
+
+50/4
+        ...
+
+51/4
+        -- Similarly for all of the other input and output subprograms.
+
                        _Extensions to Ada 2005_
 
-35.a/3
+51.a/3
           {AI05-0153-3AI05-0153-3} {AI05-0262-1AI05-0262-1}
           {AI05-0276-1AI05-0276-1} {AI05-0290-1AI05-0290-1} Predicate
           aspects are new in Ada 2012.
 
+                       _Extensions to Ada 2012_
+
+51.b/4
+          {AI12-0054-2AI12-0054-2} Corrigendum: The Predicate_Failure
+          aspect is new.  We can consider this a correction as it is
+          always possible for implementers to add implementation-defined
+          aspects, so the same is true for language-defined aspects.
+
+                    _Wording Changes from Ada 2012_
+
+51.c/4
+          {AI12-0071-1AI12-0071-1} Corrigendum: Specified the order of
+          evaluation of most predicates, by defining the new term
+          "satisfies the predicates of the subtype".  This is not
+          inconsistent, as the order previously was unspecified, so any
+          code depending on the order was incorrect.  The change is
+          necessary so that the Predicate_Failure aspect has consistent
+          results in cases where multiple predicates and aspects apply;
+          see the Ada.Text_IO example above for such a case.
+
+51.d/4
+          {AI12-0099-1AI12-0099-1} Corrigendum: Revised wording to
+          ensure all kinds of types are covered, including the anonymous
+          task associated with a single_task_declaration, and
+          generalized it.
+
+51.e/4
+          {AI12-0099-1AI12-0099-1} Corrigendum: Revised wording to list
+          the boolean operators that can be predicate-static, to
+          eliminate confusion about whether not is included.
+
 
 File: aarm2012.info,  Node: 3.3,  Next: 3.4,  Prev: 3.2,  Up: 3
 
@@ -6535,8 +6960,8 @@ File: aarm2012.info,  Node: 3.3,  Next: 3.4,  Prev: 3.2,  
Up: 3
 =============================
 
 1
-[Objects are created at run time and contain a value of a given type.
-An object can be created and initialized as part of elaborating a
+[Objects are created at run time and contain a value of a given type. An
+object can be created and initialized as part of elaborating a
 declaration, evaluating an allocator, aggregate, or function_call, or
 passing a parameter by copy.  Prior to reclaiming the storage for an
 object, it is finalized if necessary (see *note 7.6.1::).]
@@ -6603,10 +7028,10 @@ views of objects.
 
 14
 The value of an object is read when the value of any part of the object
-is evaluated, or when the value of an enclosing object is evaluated.
-The value of a variable is updated when an assignment is performed to
-any part of the variable, or when an assignment is performed to an
-enclosing object.
+is evaluated, or when the value of an enclosing object is evaluated. The
+value of a variable is updated when an assignment is performed to any
+part of the variable, or when an assignment is performed to an enclosing
+object.
 
 14.a
           Ramification: Reading and updating are intended to include
@@ -6681,10 +7106,10 @@ constants:
 
 23/3
 {AI05-0264-1AI05-0264-1} At the place where a view of an object is
-defined, a nominal subtype is associated with the view.  The object's
+defined, a nominal subtype is associated with the view. The object's
 actual subtype (that is, its subtype) can be more restrictive than the
 nominal subtype of the view; it always is if the nominal subtype is an
-indefinite subtype.  A subtype is an indefinite subtype if it is an
+indefinite subtype. A subtype is an indefinite subtype if it is an
 unconstrained array subtype, or if it has unknown discriminants or
 unconstrained discriminants without defaults (see *note 3.7::);
 otherwise, the subtype is a definite subtype [(all elementary subtypes
@@ -6769,18 +7194,18 @@ time.  It is declared by a number_declaration.
      NOTES
 
 25
-     7  A constant cannot be the target of an assignment operation, nor
+     10  A constant cannot be the target of an assignment operation, nor
      be passed as an in out or out parameter, between its initialization
      and finalization, if any.
 
 25.1/3
-     8  {AI05-0054-2AI05-0054-2} The value of a constant object cannot
+     11  {AI05-0054-2AI05-0054-2} The value of a constant object cannot
      be changed after its initialization, except in some cases where the
      object has a controlled or immutably limited part (see *note 7.5::,
      *note 7.6::, and *note 13.9.1::).
 
 26/3
-     9  {AI05-0264-1AI05-0264-1} The nominal and actual subtypes of an
+     12  {AI05-0264-1AI05-0264-1} The nominal and actual subtypes of an
      elementary object are always the same.  For a discriminated or
      array object, if the nominal subtype is constrained, then so is the
      actual subtype.
@@ -6890,9 +7315,9 @@ File: aarm2012.info,  Node: 3.3.1,  Next: 3.3.2,  Up: 3.3
 1/3
 {AI05-0262-1AI05-0262-1} An object_declaration declares a stand-alone
 object with a given nominal subtype and, optionally, an explicit initial
-value given by an initialization expression.  For an array, access,
-task, or protected object, the object_declaration may include the
-definition of the (anonymous) type of the object.
+value given by an initialization expression. For an array, access, task,
+or protected object, the object_declaration may include the definition
+of the (anonymous) type of the object.
 
                                _Syntax_
 
@@ -6920,7 +7345,7 @@ definition of the (anonymous) type of the object.
 4
 For an object_declaration with an expression following the compound
 delimiter :=, the type expected for the expression is that of the
-object.  This expression is called the initialization expression.  
+object. This expression is called the initialization expression. 
 
                            _Legality Rules_
 
@@ -6934,9 +7359,9 @@ indefinite subtype, then there shall be an initialization 
expression.
 
 6/3
 {AI05-0264-1AI05-0264-1} {AI05-0299-1AI05-0299-1} An object_declaration
-with the reserved word constant declares a constant object.  If it has
-an initialization expression, then it is called a full constant
-declaration.  Otherwise, it is called a deferred constant declaration.
+with the reserved word constant declares a constant object. If it has an
+initialization expression, then it is called a full constant
+declaration. Otherwise, it is called a deferred constant declaration.
 The rules for deferred constant declarations are given in subclause
 *note 7.4::.  The rules for full constant declarations are given in this
 subclause.
@@ -6981,8 +7406,8 @@ object_declaration has an unconstrained nominal subtype, 
then if this
 subtype is indefinite or the object is constant the actual subtype of
 this object is constrained.  The constraint is determined by the bounds
 or discriminants (if any) of its initial value; the object is said to be
-constrained by its initial value.  When not constrained by its initial
-value, the actual and nominal subtypes of the object are the same.  If
+constrained by its initial value. When not constrained by its initial
+value, the actual and nominal subtypes of the object are the same. If
 its actual subtype is constrained, the object is called a constrained
 object.
 
@@ -7020,7 +7445,7 @@ implicit initial values defined for its nominal subtype, 
as follows:
      component's nominal subtype (which might raise Constraint_Error),
      unless the component is a discriminant of a constrained subtype
      (the previous case), or is in an excluded variant (see *note
-     3.8.1::).  For each component that does not have a
+     3.8.1::). For each component that does not have a
      default_expression, if the composite subtype has the
      Default_Component_Value aspect specified, the implicit initial
      value is the value of that aspect converted to the component's
@@ -7056,19 +7481,19 @@ sequence of steps:
      2.  If the object_declaration includes an initialization
      expression, the (explicit) initial value is obtained by evaluating
      the expression and converting it to the nominal subtype (which
-     might raise Constraint_Error -- see *note 4.6::).  
+     might raise Constraint_Error -- see *note 4.6::). 
 
 18/2
      3.  {8652/00028652/0002} {AI95-00171-01AI95-00171-01}
      {AI95-00373-01AI95-00373-01} The object is created, and, if there
      is not an initialization expression, the object is initialized by
-     default.  When an object is initialized by default, any per-object
+     default. When an object is initialized by default, any per-object
      constraints (see *note 3.8::) are elaborated and any implicit
      initial values for the object or for its subcomponents are obtained
-     as determined by the nominal subtype.  Any initial values (whether
+     as determined by the nominal subtype. Any initial values (whether
      explicit or implicit) are assigned to the object or to the
      corresponding subcomponents.  As described in *note 5.2:: and *note
-     7.6::, Initialize and Adjust procedures can be called.  
+     7.6::, Initialize and Adjust procedures can be called. 
 
 18.a
           Discussion: For a per-object constraint that contains some
@@ -7200,7 +7625,7 @@ restrictions:
 21/3
 {AI05-0228-1AI05-0228-1} [There is no implicit initial value defined for
 a scalar subtype unless the Default_Value aspect has been specified for
-the type.]  In the absence of an explicit initialization or the
+the type.] In the absence of an explicit initialization or the
 specification of the Default_Value aspect, a newly created scalar object
 might have a value that does not belong to its subtype (see *note
 13.9.1:: and *note H.1::).
@@ -7228,12 +7653,12 @@ might have a value that does not belong to its subtype 
(see *note
      NOTES
 
 22
-     10  Implicit initial values are not defined for an indefinite
+     13  Implicit initial values are not defined for an indefinite
      subtype, because if an object's nominal subtype is indefinite, an
      explicit initial value is required.
 
 23/3
-     11  {AI05-0092-1AI05-0092-1} {AI05-0255-1AI05-0255-1} As indicated
+     14  {AI05-0092-1AI05-0092-1} {AI05-0255-1AI05-0255-1} As indicated
      above, a stand-alone object is an object declared by an
      object_declaration.  Similar definitions apply to "stand-alone
      constant" and "stand-alone variable."  A subcomponent of an object
@@ -7245,7 +7670,7 @@ might have a value that does not belong to its subtype 
(see *note
      in out is not considered a stand-alone object.
 
 24
-     12  The type of a stand-alone object cannot be abstract (see *note
+     15  The type of a stand-alone object cannot be abstract (see *note
      3.9.3::).
 
                               _Examples_
@@ -7438,7 +7863,7 @@ real type.
 
 6
 The value denoted by the named number is the value of the
-static_expression, converted to the corresponding universal type.  
+static_expression, converted to the corresponding universal type. 
 
                           _Dynamic Semantics_
 
@@ -7496,7 +7921,7 @@ File: aarm2012.info,  Node: 3.4,  Next: 3.5,  Prev: 3.3,  
Up: 3
 {AI95-00401-01AI95-00401-01} {AI95-00419-01AI95-00419-01} A
 derived_type_definition defines a derived type (and its first subtype)
 whose characteristics are derived from those of a parent type, and
-possibly from progenitor types.  
+possibly from progenitor types. 
 
 1.a/2
           Glossary entry: A derived type is a type defined in terms of
@@ -7663,7 +8088,7 @@ generic unit.
 6
 The first subtype of the derived type is unconstrained if a
 known_discriminant_part is provided in the declaration of the derived
-type, or if the parent subtype is unconstrained.  Otherwise, the
+type, or if the parent subtype is unconstrained. Otherwise, the
 constraint of the first subtype corresponds to that of the parent
 subtype in the following sense: it is the same as that of the parent
 subtype except that for a range constraint (implicit or explicit), the
@@ -7832,7 +8257,7 @@ primitive subprograms of the derived type are defined as 
follows:
      below) of the parent type or of a progenitor type that already
      exists at the place of the derived_type_definition, there exists a
      corresponding inherited primitive subprogram of the derived type
-     with the same defining name.  Primitive user-defined equality
+     with the same defining name. Primitive user-defined equality
      operators of the parent type and any progenitor types are also
      inherited by the derived type, except when the derived type is a
      nonlimited record extension, and the inherited operator would have
@@ -7840,7 +8265,7 @@ primitive subprograms of the derived type are defined as 
follows:
      corresponding predefined equality operator; in this case, the
      user-defined equality operator is not inherited, but is rather
      incorporated into the implementation of the predefined equality
-     operator of the record extension (see *note 4.5.2::).  
+     operator of the record extension (see *note 4.5.2::). 
 
 17.a
           Ramification: We say "...already exists..."  rather than "is
@@ -7890,7 +8315,7 @@ primitive subprograms of the derived type are defined as 
follows:
      subtype of its profile (see *note 6.1::) that is of the parent or
      progenitor type, other than those subtypes found in the designated
      profile of an access_definition, with a corresponding subtype of
-     the derived type.  For a given subtype of the parent or progenitor
+     the derived type. For a given subtype of the parent or progenitor
      type, the corresponding subtype of the derived type is defined as
      follows:
 
@@ -7911,7 +8336,7 @@ primitive subprograms of the derived type are defined as 
follows:
                is not a record extension, then the corresponding subtype
                is constrained to those values that when converted to the
                parent type belong to the given subtype (see *note
-               4.6::).  
+               4.6::). 
 
 21.a
           Reason: An inherited subprogram of an untagged type has an
@@ -7958,7 +8383,7 @@ subprogram is implicitly declared later or not at all, as 
explained in
 24
 A derived type can also be defined by a private_extension_declaration
 (*note 7.3: S0194.) (see *note 7.3::) or a
-formal_derived_type_definition (*note 12.5.1: S0285.) (see *note
+formal_derived_type_definition (*note 12.5.1: S0286.) (see *note
 12.5.1::).  Such a derived type is a partial view of the corresponding
 full or actual type.
 
@@ -7994,7 +8419,7 @@ subprogram is the derived type, the result of calling the 
subprogram of
 the parent or progenitor is converted to the derived type, or in the
 case of a null extension, extended to the derived type using the
 equivalent of an extension_aggregate with the original result as the
-ancestor_part and null record as the record_component_association_list.  
+ancestor_part and null record as the record_component_association_list. 
 
 27.a/2
           Discussion: {AI95-00391-01AI95-00391-01} If an inherited
@@ -8007,42 +8432,42 @@ ancestor_part and null record as the 
record_component_association_list.
      NOTES
 
 28
-     13  Classes are closed under derivation -- any class that contains
+     16  Classes are closed under derivation -- any class that contains
      a type also contains its derivatives.  Operations available for a
      given class of types are available for the derived types in that
      class.
 
 29
-     14  Evaluating an inherited enumeration literal is equivalent to
+     17  Evaluating an inherited enumeration literal is equivalent to
      evaluating the corresponding enumeration literal of the parent
      type, and then converting the result to the derived type.  This
-     follows from their equivalence to parameterless functions.  
+     follows from their equivalence to parameterless functions. 
 
 30
-     15  A generic subprogram is not a subprogram, and hence cannot be a
+     18  A generic subprogram is not a subprogram, and hence cannot be a
      primitive subprogram and cannot be inherited by a derived type.  On
      the other hand, an instance of a generic subprogram can be a
      primitive subprogram, and hence can be inherited.
 
 31
-     16  If the parent type is an access type, then the parent and the
+     19  If the parent type is an access type, then the parent and the
      derived type share the same storage pool; there is a null access
      value for the derived type and it is the implicit initial value for
      the type.  See *note 3.10::.
 
 32
-     17  If the parent type is a boolean type, the predefined relational
+     20  If the parent type is a boolean type, the predefined relational
      operators of the derived type deliver a result of the predefined
      type Boolean (see *note 4.5.2::).  If the parent type is an integer
      type, the right operand of the predefined exponentiation operator
      is of the predefined type Integer (see *note 4.5.6::).
 
 33
-     18  Any discriminants of the parent type are either all inherited,
+     21  Any discriminants of the parent type are either all inherited,
      or completely replaced with a new set of discriminants.
 
 34
-     19  For an inherited subprogram, the subtype of a formal parameter
+     22  For an inherited subprogram, the subtype of a formal parameter
      of the derived type need not have any value in common with the
      first subtype of the derived type.
 
@@ -8062,17 +8487,17 @@ ancestor_part and null record as the 
record_component_association_list.
                --      X cannot be in T2'First .. T2'Last
 
 35
-     20  If the reserved word abstract is given in the declaration of a
+     23  If the reserved word abstract is given in the declaration of a
      type, the type is abstract (see *note 3.9.3::).
 
 35.1/2
-     21  {AI95-00251-01AI95-00251-01} {AI95-00401-01AI95-00401-01} An
+     24  {AI95-00251-01AI95-00251-01} {AI95-00401-01AI95-00401-01} An
      interface type that has a progenitor type "is derived from" that
      type.  A derived_type_definition, however, never defines an
      interface type.
 
 35.2/2
-     22  {AI95-00345-01AI95-00345-01} It is illegal for the parent type
+     25  {AI95-00345-01AI95-00345-01} It is illegal for the parent type
      of a derived_type_definition to be a synchronized tagged type.
 
 35.a/3
@@ -8240,7 +8665,7 @@ is derived from its parent type directly; it is derived 
indirectly from
 any type from which its parent type is derived.  A derived type,
 interface type, type extension, task type, protected type, or formal
 derived type is also derived from every ancestor of each of its
-progenitor types, if any.  The derivation class of types for a type T
+progenitor types, if any. The derivation class of types for a type T
 (also called the class rooted at T) is the set consisting of T (the root
 type of the class) and all types derived from T (directly or indirectly)
 plus any associated universal or class-wide types (defined below).
@@ -8260,7 +8685,7 @@ plus any associated universal or class-wide types 
(defined below).
 
 3/2
 {AI95-00230-01AI95-00230-01} Every type is either a specific type, a
-class-wide type, or a universal type.  A specific type is one defined by
+class-wide type, or a universal type. A specific type is one defined by
 a type_declaration, a formal_type_declaration, or a full type definition
 embedded in another construct.  Class-wide and universal types are
 implicitly defined, to act as representatives for an entire class of
@@ -8298,7 +8723,7 @@ Class-wide types
 
 5.a
           Reason: We want S'Class to be a first subtype when S is, so
-          that an attribute_definition_clause (*note 13.3: S0309.) like
+          that an attribute_definition_clause (*note 13.3: S0310.) like
           "for S'Class'Output use ...;" will be legal.
 
 6/2
@@ -8376,8 +8801,8 @@ type T2 is defined to be a descendant of a type T1 if T2 
is the same as
 T1, or if T2 is derived (directly or indirectly) from T1.  A class-wide
 type T2'Class is defined to be a descendant of type T1 if T2 is a
 descendant of T1.  Similarly, the numeric universal types are defined to
-be descendants of the root types of their classes.  If a type T2 is a
-descendant of a type T1, then T1 is called an ancestor of T2.  An
+be descendants of the root types of their classes. If a type T2 is a
+descendant of a type T1, then T1 is called an ancestor of T2. An
 ultimate ancestor of a type is an ancestor of that type that is not
 itself a descendant of any other type.  Every untagged type has a unique
 ultimate ancestor.
@@ -8438,7 +8863,7 @@ of derivations going back to the given ancestor.
      NOTES
 
 12
-     23  Because operands of a universal type are acceptable to the
+     26  Because operands of a universal type are acceptable to the
      predefined operators of any type in their class, ambiguity can
      result.  For universal_integer and universal_real, this potential
      ambiguity is resolved by giving a preference (see *note 8.6::) to
@@ -8483,7 +8908,7 @@ File: aarm2012.info,  Node: 3.5,  Next: 3.6,  Prev: 3.4,  
Up: 3
 Scalar types comprise enumeration types, integer types, and real types.
 Enumeration types and integer types are called discrete types; each
 value of a discrete type has a position number which is an integer
-value.  Integer types and real types are called numeric types.  [All
+value. Integer types and real types are called numeric types.  [All
 scalar types are ordered, that is, all relational operators are
 predefined for their values.]
 
@@ -8508,11 +8933,11 @@ the values of some scalar type (the type of the range). 
 A range with
 lower bound L and upper bound R is described by "L ..  R". If R is less
 than L, then the range is a null range, and specifies an empty set of
 values.  Otherwise, the range specifies the values of the type from the
-lower bound to the upper bound, inclusive.  A value belongs to a range
-if it is of the type of the range, and is in the subset of values
-specified by the range.  A value satisfies a range constraint if it
-belongs to the associated range.  One range is included in another if
-all values that belong to the first range also belong to the second.
+lower bound to the upper bound, inclusive. A value belongs to a range if
+it is of the type of the range, and is in the subset of values specified
+by the range. A value satisfies a range constraint if it belongs to the
+associated range. One range is included in another if all values that
+belong to the first range also belong to the second.
 
                         _Name Resolution Rules_
 
@@ -8520,7 +8945,7 @@ all values that belong to the first range also belong to 
the second.
 For a subtype_indication containing a range_constraint, either directly
 or as part of some other scalar_constraint, the type of the range shall
 resolve to that of the type determined by the subtype_mark of the
-subtype_indication.  For a range of a given type, the simple_expressions
+subtype_indication. For a range of a given type, the simple_expressions
 of the range (likewise, the simple_expressions of the equivalent range
 for a range_attribute_reference) are expected to be of the type of the
 range.
@@ -8591,7 +9016,7 @@ the type.
 
 7
 [A constrained scalar subtype is one to which a range constraint
-applies.]  The range of a constrained scalar subtype is the range
+applies.] The range of a constrained scalar subtype is the range
 associated with the range constraint of the subtype.  The range of an
 unconstrained scalar subtype is the base range of its type.
 
@@ -8600,7 +9025,7 @@ unconstrained scalar subtype is the base range of its 
type.
 8
 A range is compatible with a scalar subtype if and only if it is either
 a null range or each bound of the range belongs to the range of the
-subtype.  A range_constraint is compatible with a scalar subtype if and
+subtype. A range_constraint is compatible with a scalar subtype if and
 only if its range is compatible with the subtype.
 
 8.a
@@ -8618,10 +9043,10 @@ only if its range is compatible with the subtype.
 
 9
 The elaboration of a range_constraint consists of the evaluation of the
-range.  The evaluation of a range determines a lower bound and an upper
+range. The evaluation of a range determines a lower bound and an upper
 bound.  If simple_expressions are given to specify bounds, the
 evaluation of the range evaluates these simple_expressions in an
-arbitrary order, and converts them to the type of the range.  If a
+arbitrary order, and converts them to the type of the range. If a
 range_attribute_reference is given, the evaluation of the range consists
 of the evaluation of the range_attribute_reference.
 
@@ -8656,7 +9081,7 @@ S'Range
 S'Base
                S'Base denotes an unconstrained subtype of the type of S.
                This unconstrained subtype is called the base subtype of
-               the type.  
+               the type. 
 
 16
 S'Min
@@ -8795,7 +9220,7 @@ S'Wide_Wide_Image
 27.c/2
           Implementation Note: For an enumeration type T that has
           "holes" (caused by an enumeration_representation_clause (*note
-          13.4: S0310.)), T'Wide_Image should raise Program_Error if the
+          13.4: S0311.)), T'Wide_Image should raise Program_Error if the
           value is one of the holes (which is a bounded error anyway,
           since holes can be generated only via uninitialized variables
           and similar things).
@@ -9100,6 +9525,29 @@ S'Value
           different from S'Wide_Wide_Value for enumeration subtypes; see
           the discussion under S'Wide_Value.
 
+55.1/4
+{AI12-0124-1AI12-0124-1} For a prefix X that denotes an object of a
+scalar type[ (after any implicit dereference)], the following attributes
+are defined:
+
+55.2/4
+X'Wide_Wide_Image
+               {AI12-0124-1AI12-0124-1} X'Wide_Wide_Image denotes the
+               result of calling function S'Wide_Wide_Image with Arg
+               being X, where S is the nominal subtype of X.
+
+55.3/4
+X'Wide_Image
+               {AI12-0124-1AI12-0124-1} X'Wide_Image denotes the result
+               of calling function S'Wide_Image with Arg being X, where
+               S is the nominal subtype of X.
+
+55.4/4
+X'Image
+               {AI12-0124-1AI12-0124-1} X'Image denotes the result of
+               calling function S'Image with Arg being X, where S is the
+               nominal subtype of X.
+
                      _Implementation Permissions_
 
 56/2
@@ -9179,7 +9627,7 @@ full_type_declaration on which it appears.
      NOTES
 
 57
-     24  The evaluation of S'First or S'Last never raises an exception.
+     27  The evaluation of S'First or S'Last never raises an exception.
      If a scalar subtype S has a nonnull range, S'First and S'Last
      belong to this range.  These values can, for example, always be
      assigned to a variable of subtype S.
@@ -9196,13 +9644,13 @@ full_type_declaration on which it appears.
           outside the ultimately chosen base range).
 
 58
-     25  For a subtype of a scalar type, the result delivered by the
+     28  For a subtype of a scalar type, the result delivered by the
      attributes Succ, Pred, and Value might not belong to the subtype;
      similarly, the actual parameters of the attributes Succ, Pred, and
      Image need not belong to the subtype.
 
 59
-     26  For any value V (including any nongraphic character) of an
+     29  For any value V (including any nongraphic character) of an
      enumeration subtype S, S'Value(S'Image(V)) equals V, as do
      S'Wide_Value(S'Wide_Image(V)) and
      S'Wide_Wide_Value(S'Wide_Wide_Image(V)). None of these expressions
@@ -9254,7 +9702,7 @@ Examples of range constraints:
           The attribute S'Base for a scalar subtype is now permitted
           anywhere a subtype_mark is permitted.  S'Base'First ..
           S'Base'Last is the base range of the type.  Using an
-          attribute_definition_clause (*note 13.3: S0309.), one cannot
+          attribute_definition_clause (*note 13.3: S0310.), one cannot
           specify any subtype-specific attributes for the subtype
           denoted by S'Base (the base subtype).
 
@@ -9341,6 +9789,14 @@ Examples of range constraints:
           defining implicit initial values (see *note 3.3.1::) for
           scalar types.
 
+                       _Extensions to Ada 2012_
+
+63.o/4
+          {AI12-0124-1AI12-0124-1} Corrigendum: An object can be now
+          used as the prefix of the Image attribute (as well as
+          Wide_Image and Wide_Wide_Image), a convenience feature already
+          present in some implementations.
+
 * Menu:
 
 * 3.5.1 ::    Enumeration Types
@@ -9423,8 +9879,8 @@ the enumeration type.
 
 7
 Each enumeration literal corresponds to a distinct value of the
-enumeration type, and to a distinct position number.  The position
-number of the value of the first listed enumeration literal is zero; the
+enumeration type, and to a distinct position number. The position number
+of the value of the first listed enumeration literal is zero; the
 position number of the value of each subsequent enumeration literal is
 one more than that of its predecessor in the list.
 
@@ -9459,7 +9915,7 @@ literal returns the corresponding value of the 
enumeration type.
      NOTES
 
 12
-     27  If an enumeration literal occurs in a context that does not
+     30  If an enumeration literal occurs in a context that does not
      otherwise suffice to determine the type of the literal, then
      qualification by the name of the enumeration type is one way to
      resolve the ambiguity (see *note 4.7::).
@@ -9544,7 +10000,7 @@ name, which is not usable as an enumeration literal, but 
which is usable
 with the attributes Image, Wide_Image, Wide_Wide_Image, Value,
 Wide_Value, and Wide_Wide_Value; these names are given in the definition
 of type Character in *note A.1::, "*note A.1:: The Package Standard",
-but are set in italics.  
+but are set in italics. 
 
 2.a/3
           Discussion: {AI05-0262-1AI05-0262-1} Code point is defined in
@@ -9592,7 +10048,7 @@ Paragraphs 6 and 7 were deleted.
      NOTES
 
 8
-     28  The language-defined library package Characters.Latin_1 (see
+     31  The language-defined library package Characters.Latin_1 (see
      *note A.3.3::) includes the declaration of constants denoting
      control characters, lower case characters, and special characters
      of the predefined type Character.
@@ -9603,7 +10059,7 @@ Paragraphs 6 and 7 were deleted.
           obsolescent package, and we no longer mention it here.
 
 9/3
-     29  {AI05-0299-1AI05-0299-1} A conventional character set such as
+     32  {AI05-0299-1AI05-0299-1} A conventional character set such as
      EBCDIC can be declared as a character type; the internal codes of
      the characters can be specified by an
      enumeration_representation_clause as explained in subclause *note
@@ -9750,9 +10206,9 @@ File: aarm2012.info,  Node: 3.5.3,  Next: 3.5.4,  Prev: 
3.5.2,  Up: 3.5
 
 1
 There is a predefined enumeration type named Boolean, [declared in the
-visible part of package Standard].  It has the two enumeration literals
-False and True ordered with the relation False < True.  Any descendant
-of the predefined type Boolean is called a boolean type.
+visible part of package Standard]. It has the two enumeration literals
+False and True ordered with the relation False < True. Any descendant of
+the predefined type Boolean is called a boolean type.
 
 1.a
           Implementation Note: An implementation is not required to
@@ -9775,7 +10231,7 @@ signed integer type, or a modular integer type.  The 
base range of a
 signed integer type includes at least the values of the specified range.
 A modular type is an integer type with all arithmetic modulo a specified
 positive modulus; such a type corresponds to an unsigned type with
-wrap-around semantics.  
+wrap-around semantics. 
 
                                _Syntax_
 
@@ -9808,7 +10264,7 @@ wrap-around semantics.
 
 5
 Each simple_expression in a signed_integer_type_definition is expected
-to be of any integer type; they need not be of the same type.  The
+to be of any integer type; they need not be of the same type. The
 expression in a modular_type_definition is likewise expected to be of
 any integer type.
 
@@ -9844,7 +10300,7 @@ inclusive.
 9
 A signed_integer_type_definition defines an integer type whose base
 range includes at least the values of the simple_expressions and is
-symmetric about zero, excepting possibly an extra negative value.  A
+symmetric about zero, excepting possibly an extra negative value. A
 signed_integer_type_definition also defines a constrained first subtype
 of the type, with a range whose bounds are given by the values of the
 simple_expressions, converted to the type being defined.
@@ -9860,11 +10316,11 @@ simple_expressions, converted to the type being 
defined.
           at overload resolution, see *note 4.6::), although it happens
           implicitly.  Therefore, the freezing rules are not invoked on
           the type (which is important so that representation items can
-          be given for the type).  
+          be given for the type). 
 
 10
 A modular_type_definition defines a modular type whose base range is
-from zero to one less than the given modulus.  A modular_type_definition
+from zero to one less than the given modulus. A modular_type_definition
 also defines a constrained first subtype of the type with a range that
 is the same as the base range of the type.
 
@@ -9908,7 +10364,7 @@ root_integer, an anonymous predefined (specific) integer 
type, whose
 base range is System.Min_Int ..  System.Max_Int.  However, the base
 range of the new type is not inherited from root_integer, but is instead
 determined by the range or modulus specified by the
-integer_type_definition.  [Integer literals are all of the type
+integer_type_definition. [Integer literals are all of the type
 universal_integer, the universal type (see *note 3.4.1::) for the class
 rooted at root_integer, allowing their use with the operations of any
 integer type.]
@@ -10133,14 +10589,14 @@ should support a nonbinary modulus up to Integer'Last.
      NOTES
 
 30
-     30  Integer literals are of the anonymous predefined integer type
+     33  Integer literals are of the anonymous predefined integer type
      universal_integer.  Other integer types have no literals.  However,
      the overload resolution rules (see *note 8.6::, "*note 8.6:: The
      Context of Overload Resolution") allow expressions of the type
      universal_integer whenever an integer type is expected.
 
 31
-     31  The same arithmetic operators are predefined for all signed
+     34  The same arithmetic operators are predefined for all signed
      integer types defined by a signed_integer_type_definition (see
      *note 4.5::, "*note 4.5:: Operators and Expression Evaluation").
      For modular types, these same operators are predefined, plus
@@ -10150,7 +10606,7 @@ should support a nonbinary modulus up to Integer'Last.
      bit-wise shifting and rotating.
 
 32
-     32  Modular types match a generic_formal_parameter_declaration of
+     35  Modular types match a generic_formal_parameter_declaration of
      the form "type T is mod <>;"; signed integer types match "type T is
      range <>;" (see *note 12.5.2::).
 
@@ -10283,7 +10739,7 @@ S'Val
 
 7
                This function returns a value of the type of S whose
-               position number equals the value of Arg.  For the
+               position number equals the value of Arg. For the
                evaluation of a call on S'Val, if there is no value in
                the base range of its type with the given position
                number, Constraint_Error is raised.
@@ -10299,23 +10755,25 @@ S'Val
           were required for enumeration and modular types anyway, the
           allowance didn't seem worth the complexity of the rule.
 
-7.1/3
-{AI05-0297-1AI05-0297-1} For every static discrete subtype S for which
-there exists at least one value belonging to S that satisfies any
-predicate of S, the following attributes are defined:
+7.1/4
+{AI05-0297-1AI05-0297-1} {AI12-0071-1AI12-0071-1} For every static
+discrete subtype S for which there exists at least one value belonging
+to S that satisfies the predicates of S, the following attributes are
+defined:
 
-7.2/3
+7.2/4
 S'First_Valid
-               {AI05-0297-1AI05-0297-1} S'First_Valid denotes the
-               smallest value that belongs to S and satisfies the
-               predicate of S. The value of this attribute is of the
-               type of S.
+               {AI05-0297-1AI05-0297-1} {AI12-0071-1AI12-0071-1}
+               S'First_Valid denotes the smallest value that belongs to
+               S and satisfies the predicates of S. The value of this
+               attribute is of the type of S.
 
-7.3/3
+7.3/4
 S'Last_Valid
-               {AI05-0297-1AI05-0297-1} S'Last_Valid denotes the largest
-               value that belongs to S and satisfies the predicate of S.
-               The value of this attribute is of the type of S.
+               {AI05-0297-1AI05-0297-1} {AI12-0071-1AI12-0071-1}
+               S'Last_Valid denotes the largest value that belongs to S
+               and satisfies the predicates of S. The value of this
+               attribute is of the type of S.
 
 7.4/3
 {AI05-0297-1AI05-0297-1} [First_Valid and Last_Valid
@@ -10346,10 +10804,10 @@ aspect.]
 For the evaluation of a call on S'Pos for an enumeration subtype, if the
 value of the operand does not correspond to the internal code for any
 enumeration literal of its type [(perhaps due to an uninitialized
-variable)], then the implementation should raise Program_Error.  This is
+variable)], then the implementation should raise Program_Error. This is
 particularly important for enumeration types with noncontiguous internal
 codes specified by an enumeration_representation_clause (*note 13.4:
-S0310.).
+S0311.).
 
 8.a.1/2
           Implementation Advice: Program_Error should be raised for the
@@ -10368,10 +10826,10 @@ S0310.).
      NOTES
 
 9
-     33  Indexing and loop iteration use values of discrete types.
+     36  Indexing and loop iteration use values of discrete types.
 
 10/3
-     34  {AI05-0299-1AI05-0299-1} The predefined operations of a
+     37  {AI05-0299-1AI05-0299-1} The predefined operations of a
      discrete type include the assignment operation, qualification, the
      membership tests, and the relational operators; for a boolean type
      they include the short-circuit control forms and the logical
@@ -10383,11 +10841,11 @@ S0310.).
      described in Clause *note 4::.
 
 11
-     35  As for all types, objects of a discrete type have Size and
+     38  As for all types, objects of a discrete type have Size and
      Address attributes (see *note 13.3::).
 
 12
-     36  For a subtype of a discrete type, the result delivered by the
+     39  For a subtype of a discrete type, the result delivered by the
      attribute Val might not belong to the subtype; similarly, the
      actual parameter of the attribute Pos need not belong to the
      subtype.  The following relations are satisfied (in the absence of
@@ -10427,6 +10885,13 @@ Examples of attributes of discrete subtypes:
           {AI05-0297-1AI05-0297-1} The attributes S'First_Valid and
           S'Last_Valid are new.
 
+                    _Wording Changes from Ada 2012_
+
+17.c/4
+          {AI12-0071-1AI12-0071-1} Corrigendum: Updated wording of the
+          attributes S'First_Valid and S'Last_Valid to use the new term
+          "satisfies the predicates" (see *note 3.2.4::).
+
 
 File: aarm2012.info,  Node: 3.5.6,  Next: 3.5.7,  Prev: 3.5.5,  Up: 3.5
 
@@ -10469,7 +10934,7 @@ class rooted at root_real.]
 4
 [ Real literals are all of the type universal_real, the universal type
 (see *note 3.4.1::) for the class rooted at root_real, allowing their
-use with the operations of any real type.  Certain multiplying operators
+use with the operations of any real type. Certain multiplying operators
 have a result type of universal_fixed (see *note 4.5.5::), the universal
 type for the class of fixed point types, allowing the result of the
 multiplication or division to be used where any specific fixed point
@@ -10538,7 +11003,7 @@ explicit_generic_actual_parameters for formal scalar 
types -- see *note
      NOTES
 
 9
-     37  As stated, real literals are of the anonymous predefined real
+     40  As stated, real literals are of the anonymous predefined real
      type universal_real.  Other real types have no literals.  However,
      the overload resolution rules (see *note 8.6::) allow expressions
      of the type universal_real whenever a real type is expected.
@@ -10588,7 +11053,7 @@ digits.
 The requested decimal precision, which is the minimum number of
 significant decimal digits required for the floating point type, is
 specified by the value of the expression given after the reserved word
-digits.  This expression is expected to be of any integer type.
+digits. This expression is expected to be of any integer type.
 
 5
 Each simple_expression of a real_range_specification is expected to be
@@ -10600,7 +11065,7 @@ of any real type[; the types need not be the same].
 The requested decimal precision shall be specified by a static
 expression whose value is positive and no greater than
 System.Max_Base_Digits.  Each simple_expression of a
-real_range_specification shall also be static.  If the
+real_range_specification shall also be static. If the
 real_range_specification is omitted, the requested decimal precision
 shall be no greater than System.Max_Digits.
 
@@ -10626,9 +11091,9 @@ precision and range.
 
 8
 The set of values for a floating point type is the (infinite) set of
-rational numbers.  The machine numbers of a floating point type are the
+rational numbers. The machine numbers of a floating point type are the
 values of the type that can be represented exactly in every
-unconstrained variable of the type.  The base range (see *note 3.5::) of
+unconstrained variable of the type. The base range (see *note 3.5::) of
 a floating point type is symmetric around zero, except that it can
 include some extra negative values in some implementations.
 
@@ -10646,7 +11111,7 @@ include some extra negative values in some 
implementations.
 
 9
 The base decimal precision of a floating point type is the number of
-decimal digits of precision representable in objects of the type.  The
+decimal digits of precision representable in objects of the type. The
 safe range of a floating point type is that part of its base range for
 which the accuracy corresponding to the base decimal precision is
 preserved by all predefined operations.
@@ -10661,7 +11126,7 @@ preserved by all predefined operations.
 
 10
 A floating_point_definition defines a floating point type whose base
-decimal precision is no less than the requested decimal precision.  If a
+decimal precision is no less than the requested decimal precision. If a
 real_range_specification is given, the safe range of the floating point
 type (and hence, also its base range) includes at least the values of
 the simple expressions given in the real_range_specification.  If a
@@ -10672,9 +11137,9 @@ range might include other values as well.  The 
attributes Safe_First and
 Safe_Last give the actual bounds of the safe range.]
 
 11
-A floating_point_definition also defines a first subtype of the type.  
-If a real_range_specification is given, then the subtype is constrained
-to a range whose bounds are given by a conversion of the values of the
+A floating_point_definition also defines a first subtype of the type. If
+a real_range_specification is given, then the subtype is constrained to
+a range whose bounds are given by a conversion of the values of the
 simple_expressions of the real_range_specification to the type being
 defined.  Otherwise, the subtype is unconstrained.
 
@@ -10684,7 +11149,7 @@ defined.  Otherwise, the subtype is unconstrained.
           at overload resolution, see *note 4.6::), although it happens
           implicitly.  Therefore, the freezing rules are not invoked on
           the type (which is important so that representation items can
-          be given for the type).  
+          be given for the type). 
 
 12
 There is a predefined, unconstrained, floating point subtype named
@@ -10756,7 +11221,7 @@ library package Interfaces (see *note B.2::).
      NOTES
 
 18
-     38  If a floating point subtype is unconstrained, then assignments
+     41  If a floating point subtype is unconstrained, then assignments
      to variables of the subtype involve only Overflow_Checks, never
      Range_Checks.
 
@@ -10847,7 +11312,7 @@ S'Digits
      NOTES
 
 3
-     39  The predefined operations of a floating point type include the
+     42  The predefined operations of a floating point type include the
      assignment operation, qualification, the membership tests, and
      explicit conversion to and from other numeric types.  They also
      include the relational operators and the following predefined
@@ -10856,7 +11321,7 @@ S'Digits
      exponentiation operator.
 
 4
-     40  As for all types, objects of a floating point type have Size
+     43  As for all types, objects of a floating point type have Size
      and Address attributes (see *note 13.3::).  Other attributes of
      floating point types are defined in *note A.5.3::.
 
@@ -10874,7 +11339,7 @@ File: aarm2012.info,  Node: 3.5.9,  Next: 3.5.10,  
Prev: 3.5.8,  Up: 3.5
 
 1
 A fixed point type is either an ordinary fixed point type, or a decimal
-fixed point type.  The error bound of a fixed point type is specified as
+fixed point type. The error bound of a fixed point type is specified as
 an absolute value, called the delta of the fixed point type.
 
                                _Syntax_
@@ -10892,22 +11357,26 @@ an absolute value, called the delta of the fixed 
point type.
         delta static_expression digits static_expression [
      real_range_specification]
 
-5
-     digits_constraint ::=
-        digits static_expression [range_constraint]
+5/4
+     {AI12-0152-1AI12-0152-1} digits_constraint ::=
+        digits static_simple_expression [range_constraint]
 
                         _Name Resolution Rules_
 
 6
 For a type defined by a fixed_point_definition, the delta of the type is
 specified by the value of the expression given after the reserved word
-delta; this expression is expected to be of any real type.  For a type
+delta; this expression is expected to be of any real type. For a type
 defined by a decimal_fixed_point_definition (a decimal fixed point
 type), the number of significant decimal digits for its first subtype
 (the digits of the first subtype) is specified by the expression given
 after the reserved word digits; this expression is expected to be of any
 integer type.
 
+6.1/4
+{AI12-0159-1AI12-0159-1} The simple_expression of a digits_constraint is
+expected to be of any integer type.
+
                            _Legality Rules_
 
 7
@@ -10920,9 +11389,9 @@ shall be positive.
 comprise the integral multiples of a number called the small of the
 type.  The machine numbers of a fixed point type are the values of the
 type that can be represented exactly in every unconstrained variable of
-the type.  For a type defined by an ordinary_fixed_point_definition (an
+the type. For a type defined by an ordinary_fixed_point_definition (an
 ordinary fixed point type), the small may be specified by an
-attribute_definition_clause (*note 13.3: S0309.) (see *note 13.3::); if
+attribute_definition_clause (*note 13.3: S0310.) (see *note 13.3::); if
 so specified, it shall be no greater than the delta of the type.  If not
 specified, the small of an ordinary fixed point type is an
 implementation-defined power of two less than or equal to the delta.
@@ -10966,7 +11435,7 @@ An ordinary_fixed_point_definition defines an ordinary 
fixed point type
 whose base range includes at least all multiples of small that are
 between the bounds specified in the real_range_specification.  The base
 range of the type does not necessarily include the specified bounds
-themselves.  An ordinary_fixed_point_definition (*note 3.5.9: S0048.)
+themselves. An ordinary_fixed_point_definition (*note 3.5.9: S0048.)
 also defines a constrained first subtype of the type, with each bound of
 its range given by the closer to zero of:
 
@@ -10980,7 +11449,7 @@ its range given by the closer to zero of:
           at overload resolution, see *note 4.6::), although it happens
           implicitly.  Therefore, the freezing rules are not invoked on
           the type (which is important so that representation items can
-          be given for the type).  
+          be given for the type). 
 
 15
    * the corresponding bound of the base range.
@@ -10988,10 +11457,10 @@ its range given by the closer to zero of:
 16
 A decimal_fixed_point_definition defines a decimal fixed point type
 whose base range includes at least the range -(10**digits-1)*delta ..
-+(10**digits-1)*delta.  A decimal_fixed_point_definition also defines a
++(10**digits-1)*delta. A decimal_fixed_point_definition also defines a
 constrained first subtype of the type.  If a real_range_specification is
 given, the bounds of the first subtype are given by a conversion of the
-values of the expressions of the real_range_specification.  Otherwise,
+values of the expressions of the real_range_specification. Otherwise,
 the range of the first subtype is -(10**digits-1)*delta ..
 +(10**digits-1)*delta.
 
@@ -11001,7 +11470,7 @@ the range of the first subtype is -(10**digits-1)*delta 
..
           at overload resolution, see *note 4.6::), although it happens
           implicitly.  Therefore, the freezing rules are not invoked on
           the type (which is important so that representation items can
-          be given for the type).  
+          be given for the type). 
 
                           _Dynamic Semantics_
 
@@ -11009,14 +11478,15 @@ the range of the first subtype is 
-(10**digits-1)*delta ..
 The elaboration of a fixed_point_definition creates the fixed point type
 and its first subtype.
 
-18
-For a digits_constraint on a decimal fixed point subtype with a given
-delta, if it does not have a range_constraint, then it specifies an
-implicit range -(10**D-1)*delta ..  +(10**D-1)*delta, where D is the
-value of the expression.  A digits_constraint is compatible with a
-decimal fixed point subtype if the value of the expression is no greater
-than the digits of the subtype, and if it specifies (explicitly or
-implicitly) a range that is compatible with the subtype.
+18/4
+{AI12-0152-1AI12-0152-1} For a digits_constraint on a decimal fixed
+point subtype with a given delta, if it does not have a
+range_constraint, then it specifies an implicit range -(10**D-1)*delta
+..  +(10**D-1)*delta, where D is the value of the simple_expression. A
+digits_constraint is compatible with a decimal fixed point subtype if
+the value of the simple_expression is no greater than the digits of the
+subtype, and if it specifies (explicitly or implicitly) a range that is
+compatible with the subtype.
 
 18.a
           Discussion: Except for the requirement that the digits
@@ -11056,13 +11526,13 @@ implicitly) a range that is compatible with the 
subtype.
           range of the subtype being defined, either explicit or
           implicit.
 
-19
-The elaboration of a digits_constraint consists of the elaboration of
-the range_constraint, if any.  If a range_constraint is given, a check
-is made that the bounds of the range are both in the range
--(10**D-1)*delta ..  +(10**D-1)*delta, where D is the value of the
-(static) expression given after the reserved word digits.  If this check
-fails, Constraint_Error is raised.
+19/4
+{AI12-0152-1AI12-0152-1} The elaboration of a digits_constraint consists
+of the elaboration of the range_constraint, if any. If a
+range_constraint is given, a check is made that the bounds of the range
+are both in the range -(10**D-1)*delta ..  +(10**D-1)*delta, where D is
+the value of the (static) simple_expression given after the reserved
+word digits. If this check fails, Constraint_Error is raised.
 
                      _Implementation Requirements_
 
@@ -11098,7 +11568,7 @@ declarations with digits up to at least 18.
      NOTES
 
 22
-     41  The base range of an ordinary fixed point type need not include
+     44  The base range of an ordinary fixed point type need not include
      the specified bounds themselves so that the range specification can
      be given in a natural way, such as:
 
@@ -11165,6 +11635,26 @@ Examples of fixed point types and subtypes:
           machine numbers of fixed point types; this is needed by the
           static evaluation rules.
 
+                   _Incompatibilities With Ada 2012_
+
+28.e/4
+          {AI12-0152-1AI12-0152-1} Corrigendum: Changed the syntax so
+          that the value following digits in a digits_constraint is a
+          simple_expression.  This is compatible with one very unlikely
+          exception: if the digits expression is a static expression of
+          a modular type using an unparenthesized logical operator (like
+          and or or).  Parenthesizing the expression will make it legal
+          in that case.  The change is necessary to eliminate syntax
+          ambguities in derived_type_definitions.
+
+                    _Wording Changes from Ada 2012_
+
+28.f/4
+          {AI12-0159-1AI12-0159-1} Corrigendum:Added wording to define
+          the expected type for a digits_constraint.  This was missing
+          since Ada 95, but as it is obvious and unchanged from Ada 83,
+          we don't consider it an incompatibility.
+
 
 File: aarm2012.info,  Node: 3.5.10,  Prev: 3.5.9,  Up: 3.5
 
@@ -11180,9 +11670,9 @@ The following attributes are defined for every fixed 
point subtype S:
 S'Small
                {8652/00058652/0005} {AI95-00054-01AI95-00054-01} S'Small
                denotes the small of the type of S. The value of this
-               attribute is of the type universal_real.  Small may be
+               attribute is of the type universal_real. Small may be
                specified for nonderived ordinary fixed point types via
-               an attribute_definition_clause (*note 13.3: S0309.) (see
+               an attribute_definition_clause (*note 13.3: S0310.) (see
                *note 13.3::); the expression of such a clause shall be
                static.
 
@@ -11288,16 +11778,16 @@ S'Round
      NOTES
 
 15
-     42  All subtypes of a fixed point type will have the same value for
+     45  All subtypes of a fixed point type will have the same value for
      the Delta attribute, in the absence of delta_constraints (see *note
      J.3::).
 
 16
-     43  S'Scale is not always the same as S'Aft for a decimal subtype;
+     46  S'Scale is not always the same as S'Aft for a decimal subtype;
      for example, if S'Delta = 1.0 then S'Aft is 1 while S'Scale is 0.
 
 17
-     44  The predefined operations of a fixed point type include the
+     47  The predefined operations of a fixed point type include the
      assignment operation, qualification, the membership tests, and
      explicit conversion to and from other numeric types.  They also
      include the relational operators and the following predefined
@@ -11305,7 +11795,7 @@ S'Round
      +, multiplying operators, and the unary operator abs.
 
 18
-     45  As for all types, objects of a fixed point type have Size and
+     48  As for all types, objects of a fixed point type have Size and
      Address attributes (see *note 13.3::).  Other attributes of fixed
      point types are defined in *note A.5.4::.
 
@@ -11403,11 +11893,11 @@ value.  A multidimensional array has a distinct 
component for each
 possible sequence of index values that can be formed by selecting one
 value for each index position (in the given order).  The possible values
 for a given index are all the values between the lower and upper bounds,
-inclusive; this range of values is called the index range.  The bounds
-of an array are the bounds of its index ranges.  The length of a
-dimension of an array is the number of values of the index range of the
-dimension (zero for a null range).  The length of a one-dimensional
-array is the length of its only dimension.
+inclusive; this range of values is called the index range. The bounds of
+an array are the bounds of its index ranges. The length of a dimension
+of an array is the number of values of the index range of the dimension
+(zero for a null range). The length of a one-dimensional array is the
+length of its only dimension.
 
 14
 An array_type_definition defines an array type and its first subtype.
@@ -11430,7 +11920,7 @@ bounds).]
 A constrained_array_definition defines an array type with a constrained
 first subtype.  Each discrete_subtype_definition (*note 3.6: S0055.)
 defines the corresponding index subtype, as well as the corresponding
-index range for the constrained first subtype.  The constraint of the
+index range for the constrained first subtype. The constraint of the
 first subtype consists of the bounds of the index ranges.
 
 16.a/3
@@ -11458,7 +11948,7 @@ The discrete subtype defined by a 
discrete_subtype_definition (*note
 
 18.b
           Discussion: We considered doing this by simply creating a
-          "preference" for Integer when resolving the range.  However,
+          "preference" for Integer when resolving the range. However,
           this can introduce Beaujolais effects when the
           simple_expressions involve calls on functions visible due to
           use clauses.
@@ -11489,7 +11979,7 @@ expressions creates the discrete subtype, and consists 
of the
 elaboration of the subtype_indication (*note 3.2.2: S0027.) or the
 evaluation of the range.  The elaboration of a
 discrete_subtype_definition that contains one or more per-object
-expressions is defined in *note 3.8::.  The elaboration of a
+expressions is defined in *note 3.8::. The elaboration of a
 component_definition (*note 3.6: S0056.) in an array_type_definition
 (*note 3.6: S0051.) consists of the elaboration of the
 subtype_indication (*note 3.2.2: S0027.) or access_definition.  The
@@ -11546,13 +12036,13 @@ array type defined by the full_type_declaration on 
which it appears.
      NOTES
 
 23
-     46  All components of an array have the same subtype.  In
+     49  All components of an array have the same subtype.  In
      particular, for an array of components that are one-dimensional
      arrays, this means that all components have the same bounds and
      hence the same length.
 
 24
-     47  Each elaboration of an array_type_definition creates a distinct
+     50  Each elaboration of an array_type_definition creates a distinct
      array type.  A consequence of this is that each object whose
      object_declaration contains an array_type_definition is of its own
      unique type.
@@ -11684,7 +12174,7 @@ index of an array subtype, and thereby the 
corresponding array bounds.
 
 4
 The type of a discrete_range is the type of the subtype defined by the
-subtype_indication, or the type of the range.  For an index_constraint,
+subtype_indication, or the type of the range. For an index_constraint,
 each discrete_range shall resolve to be of the type of the corresponding
 index.
 
@@ -11713,9 +12203,9 @@ by the range of the subtype defined by the 
subtype_indication.
 7
 An index_constraint is compatible with an unconstrained array subtype if
 and only if the index range defined by each discrete_range is compatible
-(see *note 3.5::) with the corresponding index subtype.  If any of the
+(see *note 3.5::) with the corresponding index subtype. If any of the
 discrete_ranges defines a null range, any array thus constrained is a
-null array, having no components.  An array value satisfies an
+null array, having no components. An array value satisfies an
 index_constraint if at each index position the array value and the
 index_constraint have the same index bounds.
 
@@ -11726,20 +12216,20 @@ index_constraint have the same index bounds.
 
 8
 The elaboration of an index_constraint consists of the evaluation of the
-discrete_range(s), in an arbitrary order.  The evaluation of a
+discrete_range(s), in an arbitrary order. The evaluation of a
 discrete_range consists of the elaboration of the subtype_indication or
 the evaluation of the range.
 
      NOTES
 
 9
-     48  The elaboration of a subtype_indication consisting of a
+     51  The elaboration of a subtype_indication consisting of a
      subtype_mark followed by an index_constraint checks the
      compatibility of the index_constraint with the subtype_mark (see
      *note 3.2.2::).
 
 10
-     49  Even if an array value does not satisfy the index constraint of
+     52  Even if an array value does not satisfy the index constraint of
      an array subtype, Constraint_Error is not raised on conversion to
      the array subtype, so long as the length of each dimension of the
      array value and the array subtype match.  See *note 4.6::.
@@ -11887,7 +12377,7 @@ type, then column-major order should be used instead 
(see *note B.5::,
      NOTES
 
 12
-     50  The attribute_references A'First and A'First(1) denote the same
+     53  The attribute_references A'First and A'First(1) denote the same
      value.  A similar relation exists for the attribute_references
      A'Last, A'Range, and A'Length.  The following relation is satisfied
      (except for a null array) by the above attributes if the index type
@@ -11897,11 +12387,11 @@ type, then column-major order should be used instead 
(see *note B.5::,
              A'Length(N) = A'Last(N) - A'First(N) + 1
 
 14
-     51  An array type is limited if its component type is limited (see
+     54  An array type is limited if its component type is limited (see
      *note 7.5::).
 
 15
-     52  The predefined operations of an array type include the
+     55  The predefined operations of an array type include the
      membership tests, qualification, and explicit conversion.  If the
      array type is not limited, they also include assignment and the
      predefined equality operators.  For a one-dimensional array type,
@@ -11911,7 +12401,7 @@ type, then column-major order should be used instead 
(see *note B.5::,
      operators are also included.
 
 16/2
-     53  {AI95-00287-01AI95-00287-01} A component of an array can be
+     56  {AI95-00287-01AI95-00287-01} A component of an array can be
      named with an indexed_component.  A value of an array type can be
      specified with an array_aggregate.  For a one-dimensional array
      type, a slice of the array can be named; also, string literals are
@@ -11957,7 +12447,7 @@ package Standard:]
      NOTES
 
 5
-     54  String literals (see *note 2.6:: and *note 4.2::) are defined
+     57  String literals (see *note 2.6:: and *note 4.2::) are defined
      for all string types.  The concatenation operator & is predefined
      for string types, as for all nonlimited one-dimensional array
      types.  The ordering operators <, <=, >, and >= are predefined for
@@ -12161,7 +12651,7 @@ that inherits (known) discriminants.
 {AI95-00231-01AI95-00231-01} {AI95-00254-01AI95-00254-01} The subtype of
 a discriminant may be defined by an optional null_exclusion and a
 subtype_mark, in which case the subtype_mark shall denote a discrete or
-access subtype, or it may be defined by an access_definition.  A
+access subtype, or it may be defined by an access_definition. A
 discriminant that is defined by an access_definition is called an access
 discriminant and is of an anonymous access type.
 
@@ -12370,11 +12860,11 @@ defined by the access_definition.
 [For a type defined by a derived_type_definition, each discriminant of
 the parent type is either inherited, constrained to equal some new
 discriminant of the derived type, or constrained to the value of an
-expression.]  When inherited or constrained to equal some new
+expression.] When inherited or constrained to equal some new
 discriminant, the parent discriminant and the discriminant of the
 derived type are said to correspond.  Two discriminants also correspond
 if there is some common discriminant to which they both correspond.  A
-discriminant corresponds to itself as well.  If a discriminant of a
+discriminant corresponds to itself as well. If a discriminant of a
 parent type is constrained to a specific value by a
 derived_type_definition, then that discriminant is said to be specified
 by that derived_type_definition.
@@ -12467,12 +12957,12 @@ type.
 
 26
 A type declared with a known_discriminant_part is said to have known
-discriminants; its first subtype is unconstrained.  A type declared with
+discriminants; its first subtype is unconstrained. A type declared with
 an unknown_discriminant_part is said to have unknown discriminants.  A
 type declared without a discriminant_part has no discriminants, unless
 it is a derived type; if derived, such a type has the same sort of
 discriminants (known, unknown, or none) as its parent (or ancestor)
-type.  A tagged class-wide type also has unknown discriminants.  [Any
+type.  A tagged class-wide type also has unknown discriminants. [Any
 subtype of a type with unknown discriminants is an unconstrained and
 indefinite subtype (see *note 3.2:: and *note 3.3::).]
 
@@ -12517,7 +13007,7 @@ indefinite subtype (see *note 3.2:: and *note 3.3::).]
 discriminant, its access_definition is elaborated when the value of the
 access discriminant is defined: by evaluation of its default_expression,
 by elaboration of a discriminant_constraint, or by an assignment that
-initializes the enclosing object.  
+initializes the enclosing object. 
 
 27.a/2
           Ramification: {AI95-00231-01AI95-00231-01}
@@ -12531,7 +13021,7 @@ initializes the enclosing object.
      NOTES
 
 28
-     55  If a discriminated type has default_expressions for its
+     58  If a discriminated type has default_expressions for its
      discriminants, then unconstrained variables of the type are
      permitted, and the values of the discriminants can be changed by an
      assignment to such a variable.  If defaults are not provided for
@@ -12565,12 +13055,12 @@ initializes the enclosing object.
           inappropriate.)
 
 29
-     56  The default_expression for a discriminant of a type is
+     59  The default_expression for a discriminant of a type is
      evaluated when an object of an unconstrained subtype of the type is
      created.
 
 30
-     57  Assignment to a discriminant of an object (after its
+     60  Assignment to a discriminant of an object (after its
      initialization) is not allowed, since the name of a discriminant is
      a constant; neither assignment_statements nor assignments inherent
      in passing as an in out or out parameter are allowed.  Note however
@@ -12605,7 +13095,7 @@ initializes the enclosing object.
           storage with the parent's discriminant.
 
 31
-     58  A discriminant that is of a named access type is not called an
+     61  A discriminant that is of a named access type is not called an
      access discriminant; that term is used only for discriminants
      defined by an access_definition.
 
@@ -12781,7 +13271,7 @@ a given discriminated type.
 Each selector_name of a named discriminant_association (*note 3.7.1:
 S0065.) shall resolve to denote a discriminant of the subtype being
 constrained; the discriminants so named are the associated discriminants
-of the named association.  For a positional association, the associated
+of the named association. For a positional association, the associated
 discriminant is the one whose discriminant_specification (*note 3.7:
 S0062.) occurred in the corresponding position in the
 known_discriminant_part (*note 3.7: S0061.) that defined the
@@ -12881,7 +13371,7 @@ discriminant_associations are evaluated in an arbitrary 
order and
 converted to the type of the associated discriminant (which might raise
 Constraint_Error -- see *note 4.6::); the expression of a named
 association is evaluated (and converted) once for each associated
-discriminant.  The result of each evaluation and conversion is the value
+discriminant. The result of each evaluation and conversion is the value
 imposed by the constraint for the associated discriminant.
 
 12.a
@@ -12892,7 +13382,7 @@ imposed by the constraint for the associated 
discriminant.
      NOTES
 
 13
-     59  The rules of the language ensure that a discriminant of an
+     62  The rules of the language ensure that a discriminant of an
      object always has a value, either from explicit or implicit
      initialization.
 
@@ -13015,18 +13505,19 @@ A'Constrained
           the type, and hence might be able to assign to the object and
           change its discriminants.
 
-3.b/3
-          Reason: {AI05-0214-1AI05-0214-1} All tagged objects are known
-          to be constrained (as nonlimited tagged types cannot have
-          discriminant defaults, and limited tagged objects are
-          immutably limited), and are always considered constrained by
-          this attribute to avoid distributed overhead for parameters of
-          limited classwide types, as limited tagged objects may
-          technically be unconstrained if they use defaulted
-          discriminants.  Such objects still cannot have their
-          discriminants changed, as assignment is not supported for
-          them, so there is no use for this attribute that would justify
-          the overhead of passing it with all classwide parameters.
+3.b/4
+          Reason: {AI05-0214-1AI05-0214-1} {AI12-0005-1AI12-0005-1} All
+          tagged objects are known to be constrained (as nonlimited
+          tagged types cannot have discriminant defaults, and limited
+          tagged objects are immutably limited), and are always
+          considered constrained by this attribute to avoid distributed
+          overhead for parameters of limited class-wide types, as
+          limited tagged objects may technically be unconstrained if
+          they use defaulted discriminants.  Such objects still cannot
+          have their discriminants changed, as assignment is not
+          supported for them, so there is no use for this attribute that
+          would justify the overhead of passing it with all class-wide
+          parameters.
 
 3.c/3
           Discussion: {AI05-0005-1AI05-0005-1} {AI05-0214-1AI05-0214-1}
@@ -13099,7 +13590,7 @@ File: aarm2012.info,  Node: 3.8,  Next: 3.9,  Prev: 
3.7,  Up: 3
 1
 A record object is a composite object consisting of named components.
 The value of a record object is a composite value consisting of the
-values of the components.  
+values of the components. 
 
                                _Syntax_
 
@@ -13255,13 +13746,13 @@ record.
 16
 The elaboration of a record_type_definition creates the record type and
 its first subtype, and consists of the elaboration of the
-record_definition.  The elaboration of a record_definition consists of
+record_definition. The elaboration of a record_definition consists of
 the elaboration of its component_list, if any.
 
 17
 The elaboration of a component_list consists of the elaboration of the
 component_items and variant_part, if any, in the order in which they
-appear.  The elaboration of a component_declaration consists of the
+appear. The elaboration of a component_declaration consists of the
 elaboration of the component_definition.
 
 17.a
@@ -13279,7 +13770,7 @@ if a component_definition or 
discrete_subtype_definition (see *note
 that is an attribute_reference whose prefix denotes the current instance
 of the type, the expression containing the name is called a per-object
 expression, and the constraint or range being defined is called a
-per-object constraint.  For the elaboration of a component_definition of
+per-object constraint. For the elaboration of a component_definition of
 a component_declaration or the discrete_subtype_definition (*note 3.6:
 S0055.) of an entry_declaration (*note 9.5.2: S0218.) for an entry
 family (see *note 9.5.2::), if the component subtype is defined by an
@@ -13318,37 +13809,37 @@ associated subtype is created.
      NOTES
 
 19
-     60  A component_declaration with several identifiers is equivalent
+     63  A component_declaration with several identifiers is equivalent
      to a sequence of single component_declarations, as explained in
      *note 3.3.1::.
 
 20
-     61  The default_expression of a record component is only evaluated
+     64  The default_expression of a record component is only evaluated
      upon the creation of a default-initialized object of the record
      type (presuming the object has the component, if it is in a
      variant_part -- see *note 3.3.1::).
 
 21
-     62  The subtype defined by a component_definition (see *note 3.6::)
+     65  The subtype defined by a component_definition (see *note 3.6::)
      has to be a definite subtype.
 
 22
-     63  If a record type does not have a variant_part, then the same
+     66  If a record type does not have a variant_part, then the same
      components are present in all values of the type.
 
 23
-     64  A record type is limited if it has the reserved word limited in
+     67  A record type is limited if it has the reserved word limited in
      its definition, or if any of its components are limited (see *note
      7.5::).
 
 24
-     65  The predefined operations of a record type include membership
+     68  The predefined operations of a record type include membership
      tests, qualification, and explicit conversion.  If the record type
      is nonlimited, they also include assignment and the predefined
      equality operators.
 
 25/2
-     66  {AI95-00287-01AI95-00287-01} A component of a record can be
+     69  {AI95-00287-01AI95-00287-01} A component of a record can be
      named with a selected_component.  A value of a record can be
      specified with a record_aggregate.
 
@@ -13516,8 +14007,8 @@ of the discriminant covered by its discrete_choice_list.
 The discriminant_direct_name shall resolve to denote a discriminant
 (called the discriminant of the variant_part) specified in the
 known_discriminant_part of the full_type_declaration that contains the
-variant_part.  The expected type for each discrete_choice in a variant
-is the type of the discriminant of the variant_part.
+variant_part. The expected type for each discrete_choice in a variant is
+the type of the discriminant of the variant_part.
 
 6.a
           Ramification: A full_type_declaration with a variant_part has
@@ -13548,11 +14039,12 @@ A discrete_choice is defined to cover a value in the 
following cases:
      choice_expression covers a value if the value equals the value of
      the choice_expression converted to the expected type.
 
-10.1/3
-   * {AI05-0153-3AI05-0153-3} {AI05-0262-1AI05-0262-1} A discrete_choice
-     that is a subtype_indication covers all values (possibly none) that
-     belong to the subtype and that satisfy the static predicate of the
-     subtype (see *note 3.2.4::).
+10.1/4
+   * {AI05-0153-3AI05-0153-3} {AI05-0262-1AI05-0262-1}
+     {AI12-0071-1AI12-0071-1} A discrete_choice that is a
+     subtype_indication covers all values (possibly none) that belong to
+     the subtype and that satisfy the static predicates of the subtype
+     (see *note 3.2.4::).
 
 10.a/3
           Ramification: {AI05-0262-1AI05-0262-1} A dynamic predicate is
@@ -13587,15 +14079,16 @@ covers the value.
 The possible values of the discriminant of a variant_part shall be
 covered as follows:
 
-15/3
+15/4
    * {AI05-0153-3AI05-0153-3} {AI05-0188-1AI05-0188-1}
-     {AI05-0262-1AI05-0262-1} If the discriminant is of a static
-     constrained scalar subtype then, except within an instance of a
-     generic unit, each non-others discrete_choice (*note 3.8.1: S0074.)
-     shall cover only values in that subtype that satisfy its predicate,
-     and each value of that subtype that satisfies its predicate shall
-     be covered by some discrete_choice (*note 3.8.1: S0074.) [(either
-     explicitly or by others)];
+     {AI05-0262-1AI05-0262-1} {AI12-0071-1AI12-0071-1} If the
+     discriminant is of a static constrained scalar subtype then, except
+     within an instance of a generic unit, each non-others
+     discrete_choice (*note 3.8.1: S0074.) shall cover only values in
+     that subtype that satisfy its predicates, and each value of that
+     subtype that satisfies its predicates shall be covered by some
+     discrete_choice (*note 3.8.1: S0074.) [(either explicitly or by
+     others)];
 
 15.a/3
           Reason: {AI05-0188-1AI05-0188-1} The exemption for a
@@ -13790,6 +14283,13 @@ Examples of constrained record variables:
           cannot change the behavior of any nonerroneous Ada 2005
           program, so it is not an inconsistency.
 
+                    _Wording Changes from Ada 2012_
+
+29.i/4
+          {AI12-0071-1AI12-0071-1} Corrigendum: Updated wording of the
+          coverage rules to use the new term "satisfies the predicates"
+          (see *note 3.2.4::).
+
 
 File: aarm2012.info,  Node: 3.9,  Next: 3.10,  Prev: 3.8,  Up: 3
 
@@ -13799,7 +14299,7 @@ File: aarm2012.info,  Node: 3.9,  Next: 3.10,  Prev: 
3.8,  Up: 3
 1
 [ Tagged types and type extensions support object-oriented programming,
 based on inheritance with extension and run-time polymorphism via
-dispatching operations.  ]
+dispatching operations. ]
 
                      _Language Design Principles_
 
@@ -13927,7 +14427,7 @@ reserved word tagged in its declaration is called a 
tagged type.  In
 addition, an interface type is a tagged type, as is a task or protected
 type derived from an interface (see *note 3.9.4::).  [When deriving from
 a tagged type, as for any derived type, additional primitive subprograms
-may be defined, and inherited primitive subprograms may be overridden.]  
+may be defined, and inherited primitive subprograms may be overridden.] 
 The derived type is called an extension of its ancestor types, or simply
 a type extension.
 
@@ -13973,7 +14473,7 @@ identifies the specific tagged type used to create the 
object
 originally.  [ The tag of an operand of a class-wide tagged type T'Class
 controls which subprogram body is to be executed when a primitive
 subprogram of type T is applied to the operand (see *note 3.9.2::);
-using a tag to control which body to execute is called dispatching.]  
+using a tag to control which body to execute is called dispatching.] 
 
 4/2
 {AI95-00344-01AI95-00344-01} The tag of a specific tagged type
@@ -14228,17 +14728,18 @@ derivations in the chain is not visible].
           visibility, and the particular view a derived type has of its
           parent type.  See *note 7.3.1::.
 
-12.4/3
-{AI95-00260-02AI95-00260-02} The function Parent_Tag returns the tag of
-the parent type of the type whose tag is T. If the type does not have a
-parent type (that is, it was not declared by a
-derived_type_declaration), then No_Tag is returned.
+12.4/4
+{AI95-00260-02AI95-00260-02} {AI12-0056-1AI12-0056-1} The function
+Parent_Tag returns the tag of the parent type of the type whose tag is
+T. If the type does not have a parent type (that is, it was not defined
+by a derived_type_definition), then No_Tag is returned.
 
-12.d/2
-          Ramification: The parent type is always the parent of the full
-          type; a private extension appears to define a parent type, but
-          it does not (only the various forms of derivation do that).
-          As this is a run-time operation, ignoring privateness is OK.
+12.d/4
+          Ramification: {AI12-0005-1AI12-0005-1} The parent type is
+          always the parent of the full type; a private extension
+          appears to define a parent type, but it does not (only the
+          various forms of derivation do that).  As this is a run-time
+          operation, ignoring privacy is OK.
 
 12.5/3
 {AI95-00405-01AI95-00405-01} The function Interface_Ancestor_Tags
@@ -14555,15 +15056,15 @@ is a master of the point of the function call.
      NOTES
 
 27
-     67  A type declared with the reserved word tagged should normally
+     70  A type declared with the reserved word tagged should normally
      be declared in a package_specification, so that new primitive
      subprograms can be declared for it.
 
 28
-     68  Once an object has been created, its tag never changes.
+     71  Once an object has been created, its tag never changes.
 
 29
-     69  Class-wide types are defined to have unknown discriminants (see
+     72  Class-wide types are defined to have unknown discriminants (see
      *note 3.7::).  This means that objects of a class-wide type have to
      be explicitly initialized (whether created by an object_declaration
      or an allocator), and that aggregates have to be explicitly
@@ -14571,7 +15072,7 @@ is a master of the point of the function call.
      class-wide.
 
 30/2
-     70  {AI95-00260-02AI95-00260-02} {AI95-00326-01AI95-00326-01} The
+     73  {AI95-00260-02AI95-00260-02} {AI95-00326-01AI95-00326-01} The
      capability provided by Tags.Generic_Dispatching_Constructor is
      sometimes known as a factory.
 
@@ -14736,7 +15237,7 @@ type, or a noninterface synchronized tagged type.]
 not be a class-wide type nor shall it be a synchronized tagged type (see
 *note 3.9.4::).  If the parent type or any progenitor is nonlimited,
 then each of the components of the record_extension_part shall be
-nonlimited.  In addition to the places where Legality Rules normally
+nonlimited. In addition to the places where Legality Rules normally
 apply (see *note 12.3::), these rules apply also in the private part of
 an instance of a generic unit.
 
@@ -14818,7 +15319,7 @@ part of the generic unit.
           (inherited as abstract) and Q (explicitly declared as
           abstract).  But the generic body doesn't know about F, so we
           don't know that it needs to be overridden to make a
-          nonabstract extension of NT.Hence, we have to disallow this
+          nonabstract extension of NT. Hence, we have to disallow this
           case.
 
 4.h.1/2
@@ -14875,7 +15376,7 @@ of the record_definition.
      NOTES
 
 6
-     71  The term "type extension" refers to a type as a whole.  The
+     74  The term "type extension" refers to a type as a whole.  The
      term "extension part" refers to the piece of text that defines the
      additional components (if any) the type extension has relative to
      its specified ancestor type.
@@ -14896,12 +15397,12 @@ of the record_definition.
           extension").
 
 7/2
-     72  {AI95-00344-01AI95-00344-01} When an extension is declared
+     75  {AI95-00344-01AI95-00344-01} When an extension is declared
      immediately within a body, primitive subprograms are inherited and
      are overridable, but new primitive subprograms cannot be added.
 
 8
-     73  A name that denotes a component (including a discriminant) of
+     76  A name that denotes a component (including a discriminant) of
      the parent type is not allowed within the record_extension_part.
      Similarly, a name that denotes a component defined within the
      record_extension_part is not allowed within the
@@ -14918,7 +15419,7 @@ of the record_definition.
           implementation as well.
 
 9
-     74  Each visible component of a record extension has to have a
+     77  Each visible component of a record extension has to have a
      unique name, whether the component is (visibly) inherited from the
      parent type or declared in the record_extension_part (see *note
      8.3::).
@@ -14999,7 +15500,7 @@ File: aarm2012.info,  Node: 3.9.2,  Next: 3.9.3,  Prev: 
3.9.1,  Up: 3.9
 1/2
 {AI95-00260-02AI95-00260-02} {AI95-00335-01AI95-00335-01} The primitive
 subprograms of a tagged type, the subprograms declared by
-formal_abstract_subprogram_declaration (*note 12.6: S0297.)s, and the
+formal_abstract_subprogram_declaration (*note 12.6: S0298.)s, and the
 stream attributes of a specific tagged type that are available (see
 *note 13.13.2::) at the end of the declaration list where the type is
 declared are called dispatching operations.  [A dispatching operation
@@ -15012,7 +15513,7 @@ the properties of the operands and the context of a 
particular call on a
 dispatching operation determine how the controlling tag is determined,
 and hence whether or not the call is a dispatching call.  Run-time
 polymorphism is achieved when a dispatching operation is called by a
-dispatching call.]  
+dispatching call.] 
 
 1.a.1/2
           Reason: {AI95-00335-01AI95-00335-01} For the stream attributes
@@ -15047,7 +15548,7 @@ an anonymous access type with designated type T; the 
corresponding
 formal parameter is called a controlling formal parameter.  If the
 controlling formal parameter is an access parameter, the controlling
 operand is the object designated by the actual parameter, rather than
-the actual parameter itself.  If the call is to a (primitive) function
+the actual parameter itself. If the call is to a (primitive) function
 with result type T (a function with a controlling result), then the call
 has a controlling result -- the context of the call can control the
 dispatching.  Similarly, if the call is to a function with an access
@@ -15147,11 +15648,12 @@ dispatching operation.
           object/formal.  An explicit conversion is required to request
           this truncation.
 
-9.b/2
-          Ramification: {AI95-00252-01AI95-00252-01} This rule applies
-          to all expressions or names with a specific expected type, not
-          just those that are actual parameters to a dispatching call.
-          This rule does not apply to a membership test whose expression
+9.b/4
+          Ramification: {AI95-00252-01AI95-00252-01}
+          {AI12-0039-1AI12-0039-1} This rule applies to all expressions
+          or names with a specific expected type, not just those that
+          are actual parameters to a dispatching call.  This rule does
+          not apply to a membership test whose tested_simple_expression
           is class-wide, since any type that covers the tested type is
           explicitly allowed.  See *note 4.5.2::.  This rule also
           doesn't apply to a selected_component whose selector_name is a
@@ -15163,9 +15665,9 @@ dispatching operation.
 {AI95-00430-01AI95-00430-01} In the declaration of a dispatching
 operation of a tagged type, everywhere a subtype of the tagged type
 appears as a subtype of the profile (see *note 6.1::), it shall
-statically match the first subtype of the tagged type.  If the
+statically match the first subtype of the tagged type. If the
 dispatching operation overrides an inherited subprogram, it shall be
-subtype conformant with the inherited subprogram.  The convention of an
+subtype conformant with the inherited subprogram. The convention of an
 inherited dispatching operation is the convention of the corresponding
 primitive operation of the parent or progenitor type.  The default
 convention of a dispatching operation that overrides an inherited
@@ -15288,16 +15790,15 @@ controlling tag value is defined as follows:
 16
    * If one or more controlling operands are dynamically tagged, then
      the controlling tag value is not statically determined, but is
-     rather determined by the tags of the controlling operands.  If
-     there is more than one dynamically tagged controlling operand, a
-     check is made that they all have the same tag.  If this check
-     fails, Constraint_Error is raised unless the call is a
-     function_call whose name denotes the declaration of an equality
-     operator (predefined or user defined) that returns Boolean, in
-     which case the result of the call is defined to indicate
-     inequality, and no subprogram_body is executed.  This check is
-     performed prior to evaluating any tag-indeterminate controlling
-     operands.
+     rather determined by the tags of the controlling operands. If there
+     is more than one dynamically tagged controlling operand, a check is
+     made that they all have the same tag. If this check fails,
+     Constraint_Error is raised unless the call is a function_call whose
+     name denotes the declaration of an equality operator (predefined or
+     user defined) that returns Boolean, in which case the result of the
+     call is defined to indicate inequality, and no subprogram_body is
+     executed.  This check is performed prior to evaluating any
+     tag-indeterminate controlling operands.
 
 16.a
           Reason: Tag mismatch is considered an error (except for "="
@@ -15502,25 +16003,25 @@ specific type identified by the controlling tag value:
      NOTES
 
 21
-     75  The body to be executed for a call on a dispatching operation
+     78  The body to be executed for a call on a dispatching operation
      is determined by the tag; it does not matter whether that tag is
      determined statically or dynamically, and it does not matter
      whether the subprogram's declaration is visible at the place of the
      call.
 
 22/2
-     76  {AI95-00260-02AI95-00260-02} This subclause covers calls on
+     79  {AI95-00260-02AI95-00260-02} This subclause covers calls on
      dispatching subprograms of a tagged type.  Rules for tagged type
      membership tests are described in *note 4.5.2::.  Controlling tag
      determination for an assignment_statement is described in *note
      5.2::.
 
 23
-     77  A dispatching call can dispatch to a body whose declaration is
+     80  A dispatching call can dispatch to a body whose declaration is
      not visible at the place of the call.
 
 24
-     78  A call through an access-to-subprogram value is never a
+     81  A call through an access-to-subprogram value is never a
      dispatching call, even if the access value designates a dispatching
      operation.  Similarly a call whose prefix denotes a
      subprogram_renaming_declaration cannot be a dispatching call unless
@@ -15623,7 +16124,7 @@ File: aarm2012.info,  Node: 3.9.3,  Next: 3.9.4,  Prev: 
3.9.2,  Up: 3.9
 1/2
 {AI95-00345-01AI95-00345-01} [ An abstract type is a tagged type
 intended for use as an ancestor of other types, but which is not allowed
-to have objects of its own.  An abstract subprogram is a subprogram that
+to have objects of its own. An abstract subprogram is a subprogram that
 has no body, but is intended to be overridden at some point when
 inherited.  Because objects of an abstract type cannot be created, a
 dispatching call to an abstract subprogram always dispatches to some
@@ -15689,7 +16190,7 @@ word abstract in its declaration.
 3/2
 {AI95-00260-02AI95-00260-02} {AI95-00348-01AI95-00348-01} A subprogram
 declared by an abstract_subprogram_declaration (*note 3.9.3: S0076.) or
-a formal_abstract_subprogram_declaration (*note 12.6: S0297.) (see *note
+a formal_abstract_subprogram_declaration (*note 12.6: S0298.) (see *note
 12.6::) is an abstract subprogram.  If it is a primitive subprogram of a
 tagged type, then the tagged type shall be abstract.
 
@@ -15809,17 +16310,17 @@ controlling result, then:
           Ramification: Note that it is possible to override a concrete
           subprogram with an abstract one.
 
-6/2
-   * {AI95-00391-01AI95-00391-01} Otherwise, the subprogram shall be
-     overridden with a nonabstract subprogram or, in the case of a
-     private extension inheriting a function with a controlling result,
-     have a full type that is a null extension[; for a type declared in
-     the visible part of a package, the overriding may be either in the
-     visible or the private part].  Such a subprogram is said to require
-     overriding.  However, if the type is a generic formal type, the
-     subprogram need not be overridden for the formal type itself; [a
-     nonabstract version will necessarily be provided by the actual
-     type.]
+6/4
+   * {AI95-00391-01AI95-00391-01} {AI12-0080-1AI12-0080-1} Otherwise,
+     the subprogram shall be overridden with a nonabstract subprogram
+     or, in the case of a private extension inheriting a nonabstract
+     function with a controlling result, have a full type that is a null
+     extension[; for a type declared in the visible part of a package,
+     the overriding may be either in the visible or the private part].
+     Such a subprogram is said to require overriding.  However, if the
+     type is a generic formal type, the subprogram need not be
+     overridden for the formal type itself; [a nonabstract version will
+     necessarily be provided by the actual type.]
 
 6.a/2
           Reason: {AI95-00228-01AI95-00228-01}
@@ -16061,7 +16562,7 @@ abstract_subprogram_declaration has no effect.
      NOTES
 
 12
-     79  Abstractness is not inherited; to declare an abstract type, the
+     82  Abstractness is not inherited; to declare an abstract type, the
      reserved word abstract has to be used in the declaration of the
      type extension.
 
@@ -16071,7 +16572,7 @@ abstract_subprogram_declaration has no effect.
           can be overridden with an abstract subprogram.
 
 13
-     80  A class-wide type is never abstract.  Even if a class is rooted
+     83  A class-wide type is never abstract.  Even if a class is rooted
      at an abstract type, the class-wide type for the class is not
      abstract, and an object of the class-wide type can be created; the
      tag of such an object will identify some nonabstract type in the
@@ -16097,7 +16598,7 @@ Example of an abstract type representing a set of 
natural numbers:
      NOTES
 
 16
-     81  Notes on the example: Given the above abstract type, one could
+     84  Notes on the example: Given the above abstract type, one could
      then derive various (nonabstract) extensions of the type,
      representing alternative implementations of a set.  One might use a
      bit vector, but impose an upper bound on the largest element
@@ -16435,7 +16936,7 @@ subtype.
      NOTES
 
 19/2
-     82  {AI95-00411-01AI95-00411-01} Nonlimited interface types have
+     85  {AI95-00411-01AI95-00411-01} Nonlimited interface types have
      predefined nonabstract equality operators.  These may be overridden
      with user-defined abstract equality operators.  Such operators will
      then require an explicit overriding for any nonabstract descendant
@@ -16572,7 +17073,7 @@ A value of an access type (an access value) provides 
indirect access to
 the object or subprogram it designates.  Depending on its type, an
 access value can designate either subprograms, objects created by
 allocators (see *note 4.8::), or more generally aliased objects of an
-appropriate type.  
+appropriate type. 
 
 1.a
           Discussion: A name denotes an entity; an access value
@@ -16626,7 +17127,7 @@ access types, access-to-object types, whose values 
designate objects,
 and access-to-subprogram types, whose values designate subprograms.
 Associated with an access-to-object type is a storage pool; several
 access types may share the same storage pool.  All descendants of an
-access type share the same storage pool.  A storage pool is an area of
+access type share the same storage pool. A storage pool is an area of
 storage used to hold dynamically allocated objects (called pool
 elements) created by allocators[; storage pools are described further in
 *note 13.11::, "*note 13.11:: Storage Management"].
@@ -16751,11 +17252,11 @@ An access_to_object_definition defines an 
access-to-object type and its
 first subtype; the subtype_indication (*note 3.2.2: S0027.) defines the
 designated subtype of the access type.  If a general_access_modifier
 (*note 3.10: S0081.) appears, then the access type is a general access
-type.  If the modifier is the reserved word constant, then the type is
-an access-to-constant type[; a designated object cannot be updated
-through a value of such a type].  If the modifier is the reserved word
-all, then the type is an access-to-variable type[; a designated object
-can be both read and updated through a value of such a type].  If no
+type. If the modifier is the reserved word constant, then the type is an
+access-to-constant type[; a designated object cannot be updated through
+a value of such a type]. If the modifier is the reserved word all, then
+the type is an access-to-variable type[; a designated object can be both
+read and updated through a value of such a type].  If no
 general_access_modifier (*note 3.10: S0081.) appears in the
 access_to_object_definition (*note 3.10: S0080.), the access type is a
 pool-specific access-to-variable type.
@@ -16800,7 +17301,7 @@ pool-specific access-to-variable type.
 An access_to_subprogram_definition defines an access-to-subprogram type
 and its first subtype; the parameter_profile or
 parameter_and_result_profile defines the designated profile of the
-access type.  There is a calling convention associated with the
+access type. There is a calling convention associated with the
 designated profile[; only subprograms with this calling convention can
 be designated by values of the access type.]  By default, the calling
 convention is "protected" if the reserved word protected appears, and
@@ -16991,7 +17492,7 @@ S0027.), discriminant_specification (*note 3.7: S0062.),
 parameter_specification (*note 6.1: S0175.),
 parameter_and_result_profile (*note 6.1: S0173.),
 object_renaming_declaration (*note 8.5.1: S0200.), or
-formal_object_declaration (*note 12.4: S0279.) has a null_exclusion
+formal_object_declaration (*note 12.4: S0280.) has a null_exclusion
 (*note 3.10: S0083.), the subtype_mark (*note 3.2.2: S0028.) in that
 construct shall denote an access subtype that does not exclude null.
 
@@ -17012,7 +17513,7 @@ construct shall denote an access subtype that does not 
exclude null.
 {AI95-00231-01AI95-00231-01} A composite_constraint is compatible with
 an unconstrained access subtype if it is compatible with the designated
 subtype.  A null_exclusion is compatible with any access subtype that
-does not exclude null.  An access value satisfies a composite_constraint
+does not exclude null. An access value satisfies a composite_constraint
 of an access subtype if it equals the null value of its type or if it
 designates an object whose value satisfies the constraint.  An access
 value satisfies an exclusion of the null value if it does not equal the
@@ -17031,11 +17532,11 @@ elaboration of an access_definition creates an 
anonymous access type.
      NOTES
 
 18
-     83  Access values are called "pointers" or "references" in some
+     86  Access values are called "pointers" or "references" in some
      other languages.
 
 19
-     84  Each access-to-object type has an associated storage pool;
+     87  Each access-to-object type has an associated storage pool;
      several access types can share the same pool.  An object can be
      created in the storage pool of an access type by an allocator (see
      *note 4.8::) for the access type.  A storage pool (roughly)
@@ -17043,7 +17544,7 @@ elaboration of an access_definition creates an 
anonymous access type.
      13.11:: for a discussion of pools.
 
 20
-     85  Only index_constraints and discriminant_constraints can be
+     88  Only index_constraints and discriminant_constraints can be
      applied to access types (see *note 3.6.1:: and *note 3.7.1::).
 
                               _Examples_
@@ -17051,8 +17552,9 @@ elaboration of an access_definition creates an 
anonymous access type.
 21
 Examples of access-to-object types:
 
-22/2
-     {AI95-00433-01AI95-00433-01} type Peripheral_Ref is not null access 
Peripheral;  --  see *note 3.8.1::
+22/4
+     {AI95-00433-01AI95-00433-01} {AI12-0056-1AI12-0056-1} type Frame is 
access Matrix;    --  see *note 3.6::
+     type Peripheral_Ref is not null access Peripheral;  --  see *note 3.8.1::
      type Binop_Ptr is access all Binary_Operation'Class;
                                                 -- general 
access-to-class-wide, see *note 3.9.1::
 
@@ -17221,13 +17723,15 @@ subsequent full_type_declaration.
 
                           _Static Semantics_
 
-2.1/2
-{AI95-00326-01AI95-00326-01} An incomplete_type_declaration declares an
-incomplete view of a type and its first subtype; the first subtype is
-unconstrained if a discriminant_part appears.  If the
-incomplete_type_declaration (*note 3.10.1: S0085.) includes the reserved
-word tagged, it declares a tagged incomplete view.  [An incomplete view
-of a type is a limited view of the type (see *note 7.5::).]
+2.1/4
+{AI95-00326-01AI95-00326-01} {AI12-0137-1AI12-0137-1} An
+incomplete_type_declaration declares an incomplete view of a type and
+its first subtype; the first subtype is unconstrained if a
+discriminant_part appears.  If the incomplete_type_declaration (*note
+3.10.1: S0085.) includes the reserved word tagged, it declares a tagged
+incomplete view.  If T denotes a tagged incomplete view, then T'Class
+denotes a tagged incomplete view.  [An incomplete view of a type is a
+limited view of the type (see *note 7.5::).]
 
 2.2/2
 {AI95-00326-01AI95-00326-01} Given an access type A whose designated
@@ -17338,7 +17842,7 @@ incomplete_type_declaration (*note 3.10.1: S0085.) has a
 known_discriminant_part (*note 3.7: S0061.), then a type_declaration
 (*note 3.2.1: S0023.) that completes it shall have a fully conforming
 (explicit) known_discriminant_part (*note 3.7: S0061.) (see *note
-6.3.1::).  [If an incomplete_type_declaration (*note 3.10.1: S0085.) has
+6.3.1::). [If an incomplete_type_declaration (*note 3.10.1: S0085.) has
 no discriminant_part (or an unknown_discriminant_part (*note 3.7:
 S0060.)), then a corresponding type_declaration (*note 3.2.1: S0023.) is
 nevertheless allowed to have discriminants, either explicitly, or
@@ -17495,14 +17999,14 @@ The elaboration of an incomplete_type_declaration has 
no effect.
      NOTES
 
 13
-     86  Within a declarative_part, an incomplete_type_declaration and a
+     89  Within a declarative_part, an incomplete_type_declaration and a
      corresponding full_type_declaration cannot be separated by an
      intervening body.  This is because a type has to be completely
      defined before it is frozen, and a body freezes all types declared
      prior to it in the same declarative_part (see *note 13.14::).
 
 13.1/3
-     87  {AI05-0151-1AI05-0151-1} {AI05-0269-1AI05-0269-1} A name that
+     90  {AI05-0151-1AI05-0151-1} {AI05-0269-1AI05-0269-1} A name that
      denotes an object of an incomplete view is defined to be of a
      limited type.  Hence, the target of an assignment statement cannot
      be of an incomplete view.
@@ -17703,6 +18207,18 @@ Examples of mutually dependent access types:
           {AI05-0213-1AI05-0213-1} Incomplete types now can be used as
           actuals to formal incomplete types (see *note 12.5.1::).
 
+                    _Wording Changes from Ada 2012_
+
+23.r/4
+          {AI12-0137-1AI12-0137-1} Corrigndum: Changed the wording to
+          clarify that the class-wide type associated with a specific
+          tagged type that has an incomplete view is also an incomplete
+          view.  While this was previously undefined, an interpretation
+          where it is not an incomplete view is leads to semantic
+          nonsense, and thus we don't consider this a potential
+          incompatibility, as compilers most likely are doing the right
+          thing.
+
 
 File: aarm2012.info,  Node: 3.10.2,  Prev: 3.10.1,  Up: 3.10
 
@@ -17751,7 +18267,7 @@ the expected type shall be a single access type A such 
that:
 2.3/2
 {AI95-00235-01AI95-00235-01} [The prefix of such an attribute_reference
 is never interpreted as an implicit_dereference or a parameterless
-function_call (see *note 4.1.4::).]  The designated type or profile of
+function_call (see *note 4.1.4::).] The designated type or profile of
 the expected type of the attribute_reference is the expected type or
 profile for the prefix.
 
@@ -17819,7 +18335,7 @@ used to circumvent the accessibility rules.]
           informally known as the "Heart of Darkness" amongst the
           maintainers of Ada.  Woe unto all who enter here (well, at
           least unto anyone that needs to understand any of these
-          rules).  
+          rules). 
 
 4
 [A given accessibility level is said to be statically deeper than
@@ -17839,31 +18355,32 @@ accessibility level:
      master upon which the task executing the given master directly
      depends (see *note 9.3::).
 
-7/3
+7/4
    * {AI95-00162-01AI95-00162-01} {AI95-00416-01AI95-00416-01}
-     {AI05-0235-1AI05-0235-1} An entity or view defined by a declaration
+     {AI05-0235-1AI05-0235-1} {AI12-0067-1AI12-0067-1}
+     {AI12-0089-1AI12-0089-1} An entity or view defined by a declaration
      and created as part of its elaboration has the same accessibility
      level as the innermost master of the declaration except in the
      cases of renaming and derived access types described below.  Other
-     than for an explicitly aliased parameter, a formal parameter of a
-     callable entity has the same accessibility level as the master
-     representing the invocation of the entity.
+     than for an explicitly aliased parameter of a function or generic
+     function, a formal parameter of a callable entity has the same
+     accessibility level as the master representing the invocation of
+     the entity.
 
 7.a/2
           Reason: {AI95-00416-01AI95-00416-01} This rule defines the
           "normal" accessibility of entities.  In the absence of special
           rules below, we intend for this rule to apply.
 
-7.b/2
-          Discussion: {AI95-00416-01AI95-00416-01} This rule defines the
-          accessibility of all named access types, as well as the
-          accessibility level of all anonymous access types other than
-          those for access parameters and access discriminants.  Special
-          rules exist for the accessibility level of such anonymous
-          types.  Components, stand-alone objects, and function results
-          whose (anonymous) type is defined by an access_definition have
-          accessibility levels corresponding to named access types
-          defined at the same point.
+7.b/4
+          Discussion: {AI95-00416-01AI95-00416-01}
+          {AI12-0005-1AI12-0005-1} This rule defines the accessibility
+          of all named access types, as well as the accessibility level
+          of anonymous access types in a component_definition Special
+          rules exist for the accessibility level of other anonymous
+          types.  Components whose (anonymous) type is defined by an
+          access_definition have accessibility levels corresponding to
+          named access types defined at the same point.
 
 7.c/2
           Ramification: {AI95-00230-01AI95-00230-01} Because
@@ -17914,13 +18431,15 @@ accessibility level:
      conditional_expression is the accessibility level of the evaluated
      dependent_expression.
 
-10/3
+10/4
    * {AI95-00318-02AI95-00318-02} {AI95-00416-01AI95-00416-01}
-     {AI05-0234-1AI05-0234-1} The accessibility level of an aggregate
-     that is used (in its entirety) to directly initialize part of an
-     object is that of the object being initialized.  In other contexts,
-     the accessibility level of an aggregate is that of the innermost
-     master that evaluates the aggregate.
+     {AI05-0234-1AI05-0234-1} {AI12-0027-1AI12-0027-1} The accessibility
+     level of an aggregate that is used (in its entirety) to directly
+     initialize part of an object is that of the object being
+     initialized.  In other contexts, the accessibility level of an
+     aggregate is that of the innermost master that evaluates the
+     aggregate.  Corresponding rules apply to a value conversion (see
+     *note 4.6::).
 
 10.1/3
    * {AI05-0234-1AI05-0234-1} The accessibility level of the result of a
@@ -18174,19 +18693,27 @@ accessibility level:
           accessibility, as those typically don't include the extra
           information needed to make a call.
 
-13.2/3
-   * {AI05-0148-1AI05-0148-1} {AI05-0240-1AI05-0240-1} The accessibility
-     level of the type of a stand-alone object of an anonymous
-     access-to-object type is the same as the accessibility level of the
-     type of the access value most recently assigned to the object[;
-     accessibility checks ensure that this is never deeper than that of
-     the declaration of the stand-alone object].
-
-13.3/3
-   * {AI05-0142-4AI05-0142-4} {AI05-0240-1AI05-0240-1} The accessibility
-     level of an explicitly aliased (see *note 6.1::) formal parameter
-     in a function body is determined by the point of call; it is the
-     same level that the return object ultimately will have.
+13.2/4
+   * {AI12-0070-1AI12-0070-1} The accessibility level of the anonymous
+     access subtype defined by a return_subtype_indication that is an
+     access_definition (see *note 6.5::) is that of the result subtype
+     of the enclosing function.
+
+13.3/4
+   * {AI05-0148-1AI05-0148-1} {AI05-0240-1AI05-0240-1}
+     {AI12-0070-1AI12-0070-1} The accessibility level of the type of a
+     stand-alone object of an anonymous access-to-object type is the
+     same as the accessibility level of the type of the access value
+     most recently assigned to the object[; accessibility checks ensure
+     that this is never deeper than that of the declaration of the
+     stand-alone object].
+
+13.4/4
+   * {AI05-0142-4AI05-0142-4} {AI05-0240-1AI05-0240-1}
+     {AI12-0070-1AI12-0070-1} The accessibility level of an explicitly
+     aliased (see *note 6.1::) formal parameter in a function body is
+     determined by the point of call; it is the same level that the
+     return object ultimately will have.
 
 14/3
    * {AI95-00416-01AI95-00416-01} {AI05-0051-1AI05-0051-1}
@@ -18330,66 +18857,73 @@ in the following cases:
           Ramification: In these cases, we use dynamic accessibility
           checks.
 
-19.2/3
-   * {AI05-0142-4AI05-0142-4} {AI05-0235-1AI05-0235-1} Inside a return
-     statement that applies to a function F, when determining whether
-     the accessibility level of an explicitly aliased parameter of F is
-     statically deeper than the level of the return object of F, the
-     level of the return object is considered to be the same as that of
-     the level of the explicitly aliased parameter; for statically
+19.2/4
+   * {AI05-0142-4AI05-0142-4} {AI05-0235-1AI05-0235-1}
+     {AI12-0089-1AI12-0089-1} {AI12-0157-1AI12-0157-1} Inside a return
+     statement that applies to a function or generic function F, or the
+     return expression of an expression function F, when determining
+     whether the accessibility level of an explicitly aliased parameter
+     of F is statically deeper than the level of the return object of F,
+     the level of the return object is considered to be the same as that
+     of the level of the explicitly aliased parameter; for statically
      comparing with the level of other entities, an explicitly aliased
      parameter of F is considered to have the accessibility level of the
      body of F.
 
-19.3/3
+19.3/4
    * {AI05-0051-1AI05-0051-1} {AI05-0234-1AI05-0234-1}
-     {AI05-0235-1AI05-0235-1} For determining whether a level is
+     {AI05-0235-1AI05-0235-1} {AI12-0089-1AI12-0089-1}
+     {AI12-0157-1AI12-0157-1} For determining whether a level is
      statically deeper than the level of the anonymous access type of an
-     access result of a function, when within a return statement that
-     applies to the function, the level of the master of the call is
+     access result of a function or generic function F, when within a
+     return statement that applies to F or the return expression of
+     expression function F, the level of the master of the call is
      presumed to be the same as that of the level of the master that
-     elaborated the function body.
+     elaborated the body of F.
 
-19.b/3
+20
+   * or generic function F
+
+20.a/3
           To be honest: {AI05-0235-1AI05-0235-1} This rule has no effect
           if the previous bullet also applies (that is, the "a level" is
           of an explicitly aliased parameter).
 
-20
+21
    * [For determining whether one level is statically deeper than
      another when within a generic package body, the generic package is
      presumed to be instantiated at the same level as where it was
      declared; run-time checks are needed in the case of more deeply
      nested instantiations.]
 
-20.a/3
+21.a/3
           Proof: {AI05-0082-1AI05-0082-1} A generic package does not
           introduce a new master, so it has the static level of its
           declaration; the rest follows from the other "statically
           deeper" rules.
 
-21
+22
    * For determining whether one level is statically deeper than another
      when within the declarative region of a type_declaration, the
      current instance of the type is presumed to be an object created at
      a deeper level than that of the type.
 
-21.a
+22.a
           Ramification: In other words, the rules are checked at compile
           time of the type_declaration, in an assume-the-worst manner.
 
-22
+23
 The accessibility level of all library units is called the library
 level; a library-level declaration or entity is one whose accessibility
 level is the library level.
 
-22.a
+23.a
           Ramification: Library_unit_declarations are library level.
           Nested declarations are library level if they are nested only
           within packages (possibly more than one), and not within
           subprograms, tasks, etc.
 
-22.b/2
+23.b/2
           To be honest: The definition of the accessibility level of the
           anonymous type of an access parameter specifying an
           access-to-object type cheats a bit, since it refers to the
@@ -18401,34 +18935,34 @@ level is the library level.
           to the following more verbose version: The accessibility level
           of the anonymous type of an access parameter is as follows:
 
-22.c
+23.c
              * if the actual is an expression of a named access type --
                the accessibility level of that type;
 
-22.d
+23.d
              * if the actual is an allocator -- the accessibility level
                of the execution of the called subprogram;
 
-22.e/1
+23.e/1
              * if the actual is a reference to the Access attribute --
                the accessibility level of the view denoted by the
                prefix;
 
-22.f
+23.f
              * if the actual is a reference to the Unchecked_Access
                attribute -- library accessibility level;
 
-22.g
+23.g
              * if the actual is an access parameter -- the accessibility
                level of its type.
 
-22.h
+23.h
           Note that the allocator case is explicitly mentioned in the
           RM95, because otherwise the definition would be circular: the
           level of the anonymous type is that of the view designated by
           the actual, which is that of the access type.
 
-22.i
+23.i
           Discussion: A deeper accessibility level implies a shorter
           maximum lifetime.  Hence, when a rule requires X to have a
           level that is "not deeper than" Y's level, this requires that
@@ -18438,7 +18972,7 @@ level is the library level.
           by an allocator can have its lifetime prematurely ended by an
           instance of Unchecked_Deallocation.)
 
-22.j
+23.j
           Package elaborations are not masters, and are therefore
           invisible to the accessibility rules: an object declared
           immediately within a package has the same accessibility level
@@ -18449,7 +18983,7 @@ level is the library level.
           package, even though the body objects are not visible outside
           the package.
 
-22.k
+23.k
           Note that the level of the view denoted by X.all can be
           different from the level of the object denoted by X.all.  The
           former is determined by the type of X; the latter is
@@ -18462,20 +18996,20 @@ level is the library level.
           value might designate an object that was allocated by an
           allocator for a different access type.
 
-22.l
+23.l
           Similarly, the level of the view denoted by X.all.Comp can be
           different from the level of the object denoted by X.all.Comp.
 
-22.m
+23.m
           If Y is statically deeper than X, this implies that Y will be
           (dynamically) deeper than X in all possible executions.
 
-22.n
+23.n
           Most accessibility checking is done at compile time; the rules
           are stated in terms of "statically deeper than".  The
           exceptions are:
 
-22.o/2
+23.o/2
              * Checks involving access parameters of an access-to-object
                type.  The fact that "statically deeper than" is not
                defined for the anonymous access type of an access
@@ -18484,7 +19018,7 @@ level is the library level.
                nor to anything defined to have "the same" level as such
                a type.
 
-22.o.1/3
+23.o.1/3
              * {AI05-0082-1AI05-0082-1} Checks involving generic formal
                types and their descendants.  This is because the actual
                type can be more or less deeply nested than the generic
@@ -18496,7 +19030,7 @@ level is the library level.
                that macro-expand generics can determine the result of
                the check when the generic is expanded).
 
-22.p/3
+23.p/3
              * {AI05-0082-1AI05-0082-1} Checks involving other entities
                and views within generic packages.  This is because an
                instantiation can be at a level that is more deeply
@@ -18506,30 +19040,30 @@ level is the library level.
                macro-expansion time.  For implementations that share
                generics, run-time code is needed to detect the error.
 
-22.q/2
+23.q/2
              * {AI95-00318-02AI95-00318-02} {AI95-00344-01AI95-00344-01}
                {AI95-00416-01AI95-00416-01} Checks during function
                return and allocators, for nested type extensions and
                access discriminants.
 
-22.r/3
+23.r/3
           {AI05-0005-1AI05-0005-1} Note that run-time checks are not
           required for access discriminants (except during function
           returns and allocators), because their accessibility is
           determined statically by the accessibility level of the
           enclosing object.
 
-22.s/2
+23.s/2
           The accessibility level of the result object of a function
           reflects the time when that object will be finalized; we don't
           allow pointers to the object to survive beyond that time.
 
-22.t
+23.t
           We sometimes use the terms "accessible" and "inaccessible" to
           mean that something has an accessibility level that is not
           deeper, or deeper, respectively, than something else.
 
-22.u/2
+23.u/2
           Implementation Note: {AI95-00318-02AI95-00318-02}
           {AI95-00344-01AI95-00344-01} {AI95-00416-01AI95-00416-01} If
           an accessibility Legality Rule is satisfied, then the
@@ -18538,7 +19072,7 @@ level is the library level.
           unless one of the cases requiring run-time checks mentioned
           previously is involved.
 
-22.v
+23.v
           Accessibility levels are defined in terms of the relations
           "the same as" and "deeper than".  To make the discussion more
           concrete, we can assign actual numbers to each level.  Here,
@@ -18547,7 +19081,7 @@ level is the library level.
           Thus, a subprogram directly called from the environment task
           (such as the main subprogram) would be at level 1, and so on.
 
-22.w/2
+23.w/2
           Accessibility is not enforced at compile time for access
           parameters of an access-to-object type.  The "obvious"
           implementation of the run-time checks would be inefficient,
@@ -18559,7 +19093,7 @@ level is the library level.
           would be implemented as a simple comparison -- checking that X
           is not deeper than Y would involve checking that X <= Y.
 
-22.x
+23.x
           A more efficient method is based on passing static nesting
           levels (within constructs that correspond at run time to
           masters -- packages don't count).  Whenever an access
@@ -18579,27 +19113,27 @@ level is the library level.
           get their nesting level from their parent).  Checking "not
           deeper than" is a "<=" test on the levels.
 
-22.y/2
+23.y/2
           For each access parameter of an access-to-object type, the
           static depth passed depends on the actual, as follows:
 
-22.z
+23.z
              * If the actual is an expression of a named access type,
                pass the static nesting level of that type.
 
-22.aa
+23.aa
              * If the actual is an allocator, pass the static nesting
                level of the caller, plus one.
 
-22.bb/1
+23.bb/1
              * If the actual is a reference to the Access attribute,
                pass the level of the view denoted by the prefix.
 
-22.cc
+23.cc
              * If the actual is a reference to the Unchecked_Access
                attribute, pass 0 (the library accessibility level).
 
-22.dd/2
+23.dd/2
              * If the actual is an access parameter of an
                access-to-object type, usually just pass along the level
                passed in.  However, if the static nesting level of the
@@ -18608,7 +19142,7 @@ level is the library level.
                to be passed is the minimum of the static nesting level
                of the access parameter and the actual level passed in.
 
-22.ee/2
+23.ee/2
           For the Accessibility_Check associated with a type_conversion
           of an access parameter of an access-to-object type of a given
           subprogram to a named access type, if the target type is
@@ -18618,12 +19152,12 @@ level is the library level.
           The other Accessibility_Checks are handled in a similar
           manner.
 
-22.ff
+23.ff
           This method, using statically known values most of the time,
           is efficient, and, more importantly, avoids distributed
           overhead.
 
-22.ff.1/3
+23.ff.1/3
           {AI05-0148-1AI05-0148-1} The implementation of accessibility
           checks for stand-alone objects of anonymous access-to-object
           types can be similar to that for anonymous access-to-object
@@ -18631,7 +19165,7 @@ level is the library level.
           using rules similar to those previously described for access
           parameters.
 
-22.ff.2/3
+23.ff.2/3
           {AI05-0148-1AI05-0148-1} One important difference between the
           stand-alone access variables and access parameters is that one
           can assign a local access parameter to a more global
@@ -18639,7 +19173,7 @@ level is the library level.
           global access parameter to a more local stand-alone access
           variable.
 
-22.ff.3/3
+23.ff.3/3
           {AI05-0148-1AI05-0148-1} For these cases, it is important to
           note that the "correct" static accessibility level for an
           access parameter assigned to a stand-alone access object is
@@ -18654,10 +19188,10 @@ level is the library level.
           statically deeper than the stand-alone object cannot be stored
           into the stand-alone object.
 
-22.gg
+23.gg
           Discussion: Examples of accessibility:
 
-22.hh/3
+23.hh/3
                {AI05-0005-1AI05-0005-1} package body Lib_Unit is
                    type T is tagged ...;
                    type A0 is access all T;
@@ -18676,7 +19210,7 @@ level is the library level.
                    end P;
                end Lib_Unit;
 
-22.ii/3
+23.ii/3
           {AI05-0005-1AI05-0005-1} The above illegal statements are
           illegal because the accessibility levels of X and Y are
           statically deeper than the accessibility level of A0.  In
@@ -18685,15 +19219,15 @@ level is the library level.
           (dynamically) deeper than that of A0.  Note that the
           accessibility levels of X and Y are the same.
 
-22.jj/2
+23.jj/2
           Here's an example involving access parameters of an
           access-to-object type:
 
-22.kk
+23.kk
                procedure Main is
                    type Level_1_Type is access all Integer;
 
-22.ll
+23.ll
                    procedure P(X: access Integer) is
                        type Nested_Type is access all Integer;
                    begin
@@ -18701,7 +19235,7 @@ level is the library level.
                        ... Level_1_Type(X) ... -- (2)
                    end P;
 
-22.mm
+23.mm
                    procedure Q(X: access Integer) is
                        procedure Nested(X: access Integer) is
                        begin
@@ -18711,30 +19245,30 @@ level is the library level.
                        Nested(X);
                    end Q;
 
-22.nn
+23.nn
                    procedure R is
                        Level_2: aliased Integer;
                    begin
                        Q(Level_2'Access); -- (3)
                    end R;
 
-22.oo
+23.oo
                    Level_1: aliased Integer;
                begin
                    Q(Level_1'Access); -- (4)
                    R;
                end Main;
 
-22.pp
+23.pp
           The run-time Accessibility_Check at (1) can never fail, and no
           code should be generated to check it.  The check at (2) will
           fail when called from (3), but not when called from (4).
 
-22.qq
+23.qq
           Within a type_declaration, the rules are checked in an
           assume-the-worst manner.  For example:
 
-22.rr/3
+23.rr/3
                {AI05-0298-1AI05-0298-1} package P is
                    type Int_Ptr is access all Integer;
                    type Rec(D: access Integer) is limited private;
@@ -18751,7 +19285,7 @@ level is the library level.
                        end record;
                end P;
 
-22.ss
+23.ss
           C1, C2, and C3 are all illegal, because one might declare an
           object of type Rec at a more deeply nested place than the
           declaration of the type.  C4 is legal, but the accessibility
@@ -18759,18 +19293,18 @@ level is the library level.
           constraint checks within G will prevent it from doing any evil
           deeds.
 
-22.tt
+23.tt
           Note that we cannot defer the checks on C1, C2, and C3 until
           compile-time of the object creation, because that would cause
           violation of the privacy of private parts.  Furthermore, the
           problems might occur within a task or protected body, which
           the compiler can't see while compiling an object creation.
 
-23
+24
 The following attribute is defined for a prefix X that denotes an
 aliased view of an object:
 
-24/1
+25/1
 X'Access
                {8652/00108652/0010} {AI95-00127-01AI95-00127-01}
                X'Access yields an access value that designates the
@@ -18786,33 +19320,33 @@ X'Access
                X'Access is the general access type A with designated
                type D:
 
-25
+26
                   * If A is an access-to-variable type, then the view
                     shall be a variable; [on the other hand, if A is an
                     access-to-constant type, the view may be either a
                     constant or a variable.]
 
-25.a
+26.a
           Discussion: The current instance of a limited type is
           considered a variable.
 
-26/3
+27/3
                   * {AI95-00363-01AI95-00363-01}
                     {AI05-0008-1AI05-0008-1} {AI05-0041-1AI05-0041-1}
                     The view shall not be a subcomponent that depends on
                     discriminants of an object unless the object is
                     known to be constrained.
 
-26.a
+27.a
           Discussion: This restriction is intended to be similar to the
           restriction on renaming discriminant-dependent subcomponents.
 
-26.b
+27.b
           Reason: This prevents references to subcomponents that might
           disappear or move or change constraints after creating the
           reference.
 
-26.c
+27.c
           Implementation Note: There was some thought to making this
           restriction more stringent, roughly: "X shall not denote a
           subcomponent of a variable with discriminant-dependent
@@ -18825,34 +19359,34 @@ X'Access
           reasonable implementation strategy was identified to avoid
           such problems, as follows:
 
-26.d
+27.d
              * Place non-discriminant-dependent components with any
                aliased parts at offsets preceding any
                discriminant-dependent components in a discriminated
                record type with defaulted discriminants.
 
-26.e
+27.e
              * Preallocate the maximum space for unconstrained
                discriminated variables with aliased subcomponents,
                rather than allocating the initial size and moving them
                to a larger (heap-resident) place if they grow as the
                result of an assignment.
 
-26.f
+27.f
           Note that for objects of a by-reference type, it is not an
           error for a programmer to take advantage of the fact that such
           objects are passed by reference.  Therefore, the above
           approach is also necessary for discriminated record types with
           components of a by-reference type.
 
-26.g
+27.g
           To make the above strategy work, it is important that a
           component of a derived type is defined to be
           discriminant-dependent if it is inherited and the parent
           subtype constraint is defined in terms of a discriminant of
           the derived type (see *note 3.7::).
 
-27/2
+28/2
                   * {8652/00108652/0010} {AI95-00127-01AI95-00127-01}
                     {AI95-00363-01AI95-00363-01} If A is a named access
                     type and D is a tagged type, then the type of the
@@ -18861,51 +19395,55 @@ X'Access
                     D'Class or a type covered by D; if D is untagged,
                     then the type of the view shall be D, and either:
 
-27.1/2
+28.1/2
                             * {AI95-00363-01AI95-00363-01} the
                               designated subtype of A shall statically
                               match the nominal subtype of the view; or
 
-27.2/3
+28.2/4
                             * {AI95-00363-01AI95-00363-01}
-                              {AI05-0041-1AI05-0041-1} D shall be
+                              {AI05-0041-1AI05-0041-1}
+                              {AI12-0095-1AI12-0095-1} D shall be
                               discriminated in its full view and
                               unconstrained in any partial view, and the
                               designated subtype of A shall be
-                              unconstrained.  For the purposes of
-                              determining within a generic body whether
-                              D is unconstrained in any partial view, a
-                              discriminated subtype is considered to
-                              have a constrained partial view if it is a
-                              descendant of an untagged generic formal
-                              private or derived type.
+                              unconstrained.
 
-27.a
+28.a
           Implementation Note: This ensures that the dope for an aliased
           array object can always be stored contiguous with it, but need
           not be if its nominal subtype is constrained.
 
-27.a.1/1
+28.a.1/1
           Ramification: {8652/00108652/0010}
           {AI95-00127-01AI95-00127-01} An access attribute can be used
           as the controlling operand in a dispatching call; see *note
           3.9.2::.
 
-27.a.2/2
+28.a.2/2
           {AI95-00363-01AI95-00363-01} This does not require that types
           have a partial view in order to allow an access attribute of
           an unconstrained discriminated object, only that any partial
           view that does exist is unconstrained.
 
-28/3
+28.a.3/4
+          Discussion: {AI12-0095-1AI12-0095-1} We assume the worst in a
+          generic body whether or not a formal subtype has a constrained
+          partial view; specifically, in a generic body a discriminated
+          subtype is considered to have a constrained partial view if it
+          is a descendant of an untagged generic formal private or
+          derived type (see *note 12.5.1:: for the formal definition of
+          this rule).
+
+29/3
                   * {AI05-0041-1AI05-0041-1} The accessibility level of
                     the view shall not be statically deeper than that of
                     the access type A. 
 
-28.a
+29.a
           Ramification: In an instance body, a run-time check applies.
 
-28.b/2
+29.b/2
           {AI95-00230-01AI95-00230-01} If A is an anonymous
           access-to-object type of an access parameter, then the view
           can never have a deeper accessibility level than A. The same
@@ -18918,22 +19456,22 @@ X'Access
           initial value comes from an access parameter.  Other anonymous
           access-to-object types have "normal" accessibility checks.
 
-28.1/3
+29.1/3
                {AI05-0041-1AI05-0041-1} In addition to the places where
                Legality Rules normally apply (see *note 12.3::), these
                requirements apply also in the private part of an
                instance of a generic unit.
 
-29
+30
                A check is made that the accessibility level of X is not
                deeper than that of the access type A. If this check
                fails, Program_Error is raised.
 
-29.a/2
+30.a/2
           Ramification: The check is needed for access parameters of an
           access-to-object type and in instance bodies.
 
-29.a.1/3
+30.a.1/3
           {AI05-0024-1AI05-0024-1} Because there are no access
           parameters permitted for task entries, the accessibility
           levels are always comparable.  We would have to switch to the
@@ -18941,7 +19479,7 @@ X'Access
           inclusion within masters if we relax this restriction.  That
           might introduce unacceptable distributed overhead.
 
-29.b/3
+30.b/3
           Implementation Note: {AI05-0148-1AI05-0148-1} This check
           requires that some indication of lifetime is passed as an
           implicit parameter along with access parameters of an
@@ -18951,30 +19489,30 @@ X'Access
           since the checks associated with them are all compile-time
           checks.
 
-30
+31
                If the nominal subtype of X does not statically match the
                designated subtype of A, a view conversion of X to the
                designated subtype is evaluated (which might raise
                Constraint_Error -- see *note 4.6::) and the value of
                X'Access designates that view.
 
-31
+32
 The following attribute is defined for a prefix P that denotes a
 subprogram:
 
-32/3
+33/3
 P'Access
                {AI95-00229-01AI95-00229-01} {AI95-00254-01AI95-00254-01}
                {AI05-0239-1AI05-0239-1} P'Access yields an access value
                that designates the subprogram denoted by P. The type of
                P'Access is an access-to-subprogram type (S), as
-               determined by the expected type.  The accessibility level
+               determined by the expected type. The accessibility level
                of P shall not be statically deeper than that of S. In
                addition to the places where Legality Rules normally
                apply (see *note 12.3::), this rule applies also in the
                private part of an instance of a generic unit.  The
                profile of P shall be subtype conformant with the
-               designated profile of S, and shall not be Intrinsic.  If
+               designated profile of S, and shall not be Intrinsic. If
                the subprogram denoted by P is declared within a generic
                unit, and the expression P'Access occurs within the body
                of that generic unit or within the body of a generic unit
@@ -18983,20 +19521,20 @@ P'Access
                nonformal type declared within the generic unit or an
                anonymous access type of an access parameter.
 
-32.a/2
+33.a/2
           Discussion: {AI95-00229-01AI95-00229-01} The part about
           generic bodies is worded in terms of the denoted subprogram,
           not the denoted view; this implies that renaming is invisible
           to this part of the rule.  "Declared within the declarative
           region of the generic" is referring to child and nested
-          generic units.This rule is partly to prevent contract model
+          generic units.  This rule is partly to prevent contract model
           problems with respect to the accessibility rules, and partly
           to ease shared-generic-body implementations, in which a
           subprogram declared in an instance needs to have a different
           calling convention from other subprograms with the same
           profile.
 
-32.b
+33.b
           Overload resolution ensures only that the profile is type
           conformant.  This rule specifies that subtype conformance is
           required (which also requires matching calling conventions).
@@ -19007,31 +19545,31 @@ P'Access
 
                            _Legality Rules_
 
-32.1/3
+33.1/3
 {AI05-0188-1AI05-0188-1} An expression is said to have distributed
 accessibility if it is
 
-32.2/3
+33.2/3
    * a conditional_expression (see *note 4.5.7::); or
 
-32.3/3
+33.3/3
    * a view conversion, qualified_expression, or parenthesized
      expression whose operand has distributed accessibility.
 
-32.4/3
+33.4/3
 {AI05-0188-1AI05-0188-1} The statically deeper relationship does not
 apply to the accessibility level of an expression having distributed
 accessibility; that is, such an accessibility level is not considered to
 be statically deeper, nor statically shallower, than any other.
 
-32.5/3
+33.5/3
 {AI05-0188-1AI05-0188-1} Any static accessibility requirement that is
 imposed on an expression that has distributed accessibility (or on its
 type) is instead imposed on the dependent_expressions of the underlying
 conditional_expression.  This rule is applied recursively if a
 dependent_expression also has distributed accessibility.
 
-32.c/3
+33.c/3
           Discussion: This means that any Legality Rule requiring that
           the accessibility level of an expression (or that of the type
           of an expression) shall or shall not be statically deeper than
@@ -19041,8 +19579,8 @@ dependent_expression also has distributed accessibility.
 
      NOTES
 
-33
-     88  The Unchecked_Access attribute yields the same result as the
+34
+     91  The Unchecked_Access attribute yields the same result as the
      Access attribute for objects, but has fewer restrictions (see *note
      13.10::).  There are other predefined operations that yield access
      values: an allocator can be used to create an object, and return an
@@ -19050,18 +19588,18 @@ dependent_expression also has distributed 
accessibility.
      literal null yields a null access value that designates no entity
      at all (see *note 4.2::).
 
-34/2
-     89  {AI95-00230-01AI95-00230-01} The predefined operations of an
+35/2
+     92  {AI95-00230-01AI95-00230-01} The predefined operations of an
      access type also include the assignment operation, qualification,
      and membership tests.  Explicit conversion is allowed between
      general access types with matching designated subtypes; explicit
      conversion is allowed between access-to-subprogram types with
-     subtype conformant profiles (see *note 4.6::).  Named access types
+     subtype conformant profiles (see *note 4.6::). Named access types
      have predefined equality operators; anonymous access types do not,
      but they can use the predefined equality operators for
      universal_access (see *note 4.5.2::).
 
-34.a/2
+35.a/2
           Reason: {AI95-00230-01AI95-00230-01} Anonymous access types
           can use the universal access equality operators declared in
           Standard, while named access types cannot for compatibility
@@ -19073,20 +19611,20 @@ dependent_expression also has distributed 
accessibility.
           in their symbol table.  Note that ":=", 'Access, and ".all"
           are defined.
 
-35
-     90  The object or subprogram designated by an access value can be
+36
+     93  The object or subprogram designated by an access value can be
      named with a dereference, either an explicit_dereference (*note
      4.1: S0094.) or an implicit_dereference.  See *note 4.1::.
 
-36
-     91  A call through the dereference of an access-to-subprogram value
+37
+     94  A call through the dereference of an access-to-subprogram value
      is never a dispatching call.
 
-36.a
+37.a
           Proof: See *note 3.9.2::.
 
-37/2
-     92  {AI95-00254-01AI95-00254-01} The Access attribute for
+38/2
+     95  {AI95-00254-01AI95-00254-01} The Access attribute for
      subprograms and parameters of an anonymous access-to-subprogram
      type may together be used to implement "downward closures" -- that
      is, to pass a more-nested subprogram as a parameter to a
@@ -19095,20 +19633,20 @@ dependent_expression also has distributed 
accessibility.
      be implemented using generic formal subprograms (see *note 12.6::).
      Note that Unchecked_Access is not allowed for subprograms.
 
-38
-     93  Note that using an access-to-class-wide tagged type with a
+39
+     96  Note that using an access-to-class-wide tagged type with a
      dispatching operation is a potentially more structured alternative
      to using an access-to-subprogram type.
 
-39
-     94  An implementation may consider two access-to-subprogram values
+40
+     97  An implementation may consider two access-to-subprogram values
      to be unequal, even though they designate the same subprogram.
      This might be because one points directly to the subprogram, while
      the other points to a special prologue that performs an
      Elaboration_Check and then jumps to the subprogram.  See *note
      4.5.2::.
 
-39.a
+40.a
           Ramification: If equality of access-to-subprogram values is
           important to the logic of a program, a reference to the Access
           attribute of a subprogram should be evaluated only once and
@@ -19117,10 +19655,10 @@ dependent_expression also has distributed 
accessibility.
 
                               _Examples_
 
-40
+41
 Example of use of the Access attribute:
 
-41
+42
      Martha : Person_Name := new Person(F);       -- see *note 3.10.1::
      Cars   : array (1..2) of aliased Car;
         ...
@@ -19129,7 +19667,7 @@ Example of use of the Access attribute:
 
                         _Extensions to Ada 83_
 
-41.a
+42.a
           We no longer make things like 'Last and ".component" (basic)
           operations of an access type that need to be "declared"
           somewhere.  Instead, implicit dereference in a prefix takes
@@ -19139,7 +19677,7 @@ Example of use of the Access attribute:
 
                     _Incompatibilities With Ada 95_
 
-41.b/2
+42.b/2
           {AI95-00363-01AI95-00363-01}  Aliased variables are not
           necessarily constrained in Ada 2005 (see *note 3.6::).
           Therefore, a subcomponent of an aliased variable may disappear
@@ -19149,7 +19687,7 @@ Example of use of the Access attribute:
           constrained by their initial value (see *note 4.8::), and thus
           legality of 'Access didn't change for them.  For example:
 
-41.c/2
+42.c/2
                type T1 (D1 : Boolean := False) is
                   record
                      case D1 is
@@ -19161,14 +19699,14 @@ Example of use of the Access attribute:
                   end record;
                type Acc_Int is access all Integer;
 
-41.d/2
+42.d/2
                A_T : aliased T1;
                Ptr : Acc_Int := A_T.C1'Access; -- Illegal in Ada 2005, legal 
in Ada 95
                A_T := (D1 => True);            -- Raised Constraint_Error in 
Ada 95, but does not
                                                -- in Ada 2005, so Ptr would 
become invalid when this
                                                -- is assigned (thus Ptr is 
illegal).
 
-41.e/2
+42.e/2
           {AI95-00363-01AI95-00363-01} If a discriminated full type has
           a partial view (private type) that is constrained, we do not
           allow 'Access on objects to create a value of an object of an
@@ -19178,7 +19716,7 @@ Example of use of the Access attribute:
           the private type visible to the client of the private type.
           See *note 4.8:: for more on this topic.
 
-41.f/2
+42.f/2
           {AI95-00229-01AI95-00229-01} {AI95-00254-01AI95-00254-01}
           Amendment Correction: Taking 'Access of a subprogram declared
           in a generic unit in the body of that generic is no longer
@@ -19194,44 +19732,44 @@ Example of use of the Access attribute:
 
                         _Extensions to Ada 95_
 
-41.g/2
+42.g/2
           {8652/00108652/0010} {AI95-00127-01AI95-00127-01} Corrigendum:
           Access attributes of objects of class-wide types can be used
           as the controlling parameter in a dispatching calls (see *note
           3.9.2::).  This was an oversight in Ada 95.
 
-41.h/2
+42.h/2
           {AI95-00235-01AI95-00235-01} Amendment Correction: The type of
           the prefix can now be used in resolving Access attributes.
           This allows more uses of the Access attribute to resolve.  For
           example:
 
-41.i/2
+42.i/2
                type Int_Ptr is access all Integer;
                type Float_Ptr is access all Float;
 
-41.j/2
+42.j/2
                function Zap (Val : Int_Ptr) return Float;
                function Zap (Val : Float_Ptr) return Float;
 
-41.k/2
+42.k/2
                Value : aliased Integer := 10;
 
-41.l/2
+42.l/2
                Result1 : Float := Zap (Value'access); -- Ambiguous in Ada 95; 
resolves in Ada 2005.
                Result2 : Float := Zap (Int_Ptr'(Value'access)); -- Resolves in 
Ada 95 and Ada 2005.
 
-41.m/2
+42.m/2
           This change is upward compatible; any expression that does not
           resolve by the new rules would have failed a Legality Rule.
 
                      _Wording Changes from Ada 95_
 
-41.n/2
+42.n/2
           {AI95-00162-01AI95-00162-01} Adjusted the wording to reflect
           the fact that expressions and function calls are masters.
 
-41.o/2
+42.o/2
           {AI95-00230-01AI95-00230-01} {AI95-00254-01AI95-00254-01}
           {AI95-00318-02AI95-00318-02} {AI95-00385-01AI95-00385-01}
           {AI95-00416-01AI95-00416-01} Defined the accessibility of the
@@ -19239,7 +19777,7 @@ Example of use of the Access attribute:
 
                    _Incompatibilities With Ada 2005_
 
-41.p/3
+42.p/3
           {AI05-0008-1AI05-0008-1} Correction: Simplified the
           description of when a discriminant-dependent component is
           allowed as the prefix of 'Access to when the object is known
@@ -19252,7 +19790,7 @@ Example of use of the Access attribute:
           is not too bad, since most kinds of constants are known to be
           constrained.
 
-41.q/3
+42.q/3
           {AI05-0041-1AI05-0041-1} Correction: Corrected the checks for
           the constrainedness of the prefix of the Access attribute so
           that assume-the-worst is used in generic bodies.  This may
@@ -19262,14 +19800,14 @@ Example of use of the Access attribute:
 
                        _Extensions to Ada 2005_
 
-41.r/3
+42.r/3
           {AI05-0082-1AI05-0082-1} Correction: Eliminated the static
           accessibility definition for generic formal types, as the
           actual can be more or less nested than the generic itself.
           This allows programs that were illegal for Ada 95 and for Ada
           2005.
 
-41.s/3
+42.s/3
           {AI05-0148-1AI05-0148-1} {AI05-0253-1AI05-0253-1} Eliminate
           the static accessibility definition for stand-alone objects of
           anonymous access-to-object types.  This allows such objects to
@@ -19277,45 +19815,96 @@ Example of use of the Access attribute:
 
                     _Wording Changes from Ada 2005_
 
-41.t/3
+42.t/3
           {AI05-0014-1AI05-0014-1} Correction: Corrected the rules so
           that the accessibility of the object designated by an access
           object is that of the access type, even when no dereference is
           given.  The accessibility was not specified in the past.  This
           correction applies to both Ada 95 and Ada 2005.
 
-41.u/3
+42.u/3
           {AI05-0024-1AI05-0024-1} Correction: Corrected accessibility
           rules for access discriminants so that no cases are omitted.
 
-41.v/3
+42.v/3
           {AI05-0051-1AI05-0051-1} {AI05-0234-1AI05-0234-1}
           {AI05-0235-1AI05-0235-1} {AI05-0284-1AI05-0284-1} Correction:
           Corrected accessibility rules for anonymous access return
           types and access discriminants in return statements.
 
-41.w/3
+42.w/3
           {AI05-0066-1AI05-0066-1} Correction: Changed coextension rules
           so that coextensions that belong to an anonymous object are
           transfered to the ultimate object.
 
-41.x/3
+42.x/3
           {AI05-0142-4AI05-0142-4} {AI05-0188-1AI05-0188-1}
           {AI05-0235-1AI05-0235-1} Defined the accessibility of
           explicitly aliased parameters (see *note 6.1::) and
           conditional_expressions (see *note 4.5.7::).
 
-41.y/3
+42.y/3
           {AI05-0234-1AI05-0234-1} Correction: Defined the term "master
           of the call" to simplify other wording, especially that for
           the accessibility checks associated with return statements and
           explicitly aliased parameters.
 
-41.z/3
+42.z/3
           {AI05-0270-1AI05-0270-1} Correction: Defined the (omitted)
           accessibility level of null values when those are passed as
           the actual of an access-to-object parameter.
 
+                   _Incompatibilities With Ada 2012_
+
+42.aa/4
+          {AI12-0027-1AI12-0027-1} Corrigendum: Defined the
+          accessibility of a value conversion, so that it is treated
+          like an aggregate built at the point of the conversion.  This
+          was previously unspecified, so this change might be
+          incompatible if an Ada implementation treated the
+          accessibility of such conversions as that of the operand type;
+          in that case, previous legal conversions probably will become
+          illegal as the lifetime of the conversion is very short.
+          However, code that could tell this difference is fairly rare
+          (taking 'Access of a component of a result of a type
+          conversion), code depending on this accessibility was not
+          portable, and such code could have created an immediately
+          dangling pointer if the conversion actually made a copy (which
+          is necessary in some instances).
+
+                    _Wording Changes from Ada 2012_
+
+42.bb/4
+          {AI12-0067-1AI12-0067-1} Corrigendum: Corrected so that it is
+          clear that explicitly aliased parameters in procedures have
+          the same accessibility as other parameters.  Only explicitly
+          aliased parameters in functions are special.
+
+42.cc/4
+          {AI12-0070-1AI12-0070-1} Corrigendum: The accessibility of an
+          anonymous access type of an extended_return_statement is
+          defined here rather than in *note 6.5:: so that all
+          accessibility rules are here.
+
+42.dd/4
+          {AI12-0089-1AI12-0089-1} Corrigendum: Corrected a number of
+          rules so that they clearly apply to generic functions as well
+          as functions.  (Remember, a generic function is not a
+          function.)
+
+42.ee/4
+          {AI12-0095-1AI12-0095-1} Corrigendum: Moved the assume the
+          worst rule about constrainedness of the prefix of attribute
+          Access to *note 12.5.1::, as a number of places in the
+          Standard need this rule.
+
+42.ff/4
+          {AI12-0157-1AI12-0157-1} Corrigendum: Ensured that the
+          statically deeper relationship applies within the return
+          expression of an expression function.  (Dynamic properties
+          apply by equivalence, but static properties are handled
+          separately.)
+
 
 File: aarm2012.info,  Node: 3.11,  Prev: 3.10,  Up: 3
 
@@ -19524,7 +20113,7 @@ File: aarm2012.info,  Node: 3.11.1,  Up: 3.11
 
 1/3
 {8652/00148652/0014} {AI95-00064-01AI95-00064-01}
-{AI05-0177-1AI05-0177-1} Declarations sometimes come in two parts.  A
+{AI05-0177-1AI05-0177-1} Declarations sometimes come in two parts. A
 declaration that requires a second part is said to require completion.
 The second part is called the completion of the declaration (and of the
 entity declared), and is either another declaration, a body, or a
@@ -19592,13 +20181,13 @@ a prior declaration only if:
 
 5
    * If the declaration is overloadable, then the completion either has
-     a type-conformant profile, or is a pragma.  
+     a type-conformant profile, or is a pragma. 
 
                            _Legality Rules_
 
 6/3
 {AI05-0229-1AI05-0229-1} An implicit declaration shall not have a
-completion.  For any explicit declaration that is specified to require
+completion. For any explicit declaration that is specified to require
 completion, there shall be a corresponding explicit completion, unless
 the declared entity is imported (see *note B.1::).
 
@@ -19651,7 +20240,7 @@ frozen (see *note 13.14:: and *note 7.3::).
      NOTES
 
 9/3
-     95  {AI05-0229-1AI05-0229-1} Completions are in principle allowed
+     98  {AI05-0229-1AI05-0229-1} Completions are in principle allowed
      for any kind of explicit declaration.  However, for some kinds of
      declaration, the only allowed completion is an
      implementation-defined pragma, and implementations are not required
@@ -19661,7 +20250,7 @@ frozen (see *note 13.14:: and *note 7.3::).
           This paragraph was deleted.{AI05-0229-1AI05-0229-1}
 
 10
-     96  There are rules that prevent premature uses of declarations
+     99  There are rules that prevent premature uses of declarations
      that have a corresponding completion.  The Elaboration_Checks of
      *note 3.11:: prevent such uses at run time for subprograms,
      protected operations, tasks, and generic units.  The rules of *note
@@ -19840,17 +20429,17 @@ name that is a direct_name or a character_literal.
 
 12
 [The evaluation of a name that has a prefix includes the evaluation of
-the prefix.]  The evaluation of a prefix consists of the evaluation of
+the prefix.] The evaluation of a prefix consists of the evaluation of
 the name or the implicit_dereference.  The prefix denotes the entity
 denoted by the name or the implicit_dereference.
 
 13
 The evaluation of a dereference consists of the evaluation of the name
 and the determination of the object or subprogram that is designated by
-the value of the name.  A check is made that the value of the name is
-not the null access value.  Constraint_Error is raised if this check
-fails.  The dereference denotes the object or subprogram designated by
-the value of the name.
+the value of the name. A check is made that the value of the name is not
+the null access value. Constraint_Error is raised if this check fails.
+The dereference denotes the object or subprogram designated by the value
+of the name.
 
                               _Examples_
 
@@ -19999,7 +20588,7 @@ File: aarm2012.info,  Node: 4.1.1,  Next: 4.1.2,  Up: 
4.1
 
 1
 [An indexed_component denotes either a component of an array or an entry
-in a family of entries.  ]
+in a family of entries. ]
 
                                _Syntax_
 
@@ -20022,7 +20611,7 @@ The expected type for each expression is the 
corresponding index type.
 
 5
 When the prefix denotes an array, the indexed_component denotes the
-component of the array with the specified index value(s).  The nominal
+component of the array with the specified index value(s). The nominal
 subtype of the indexed_component is the component subtype of the array
 type.
 
@@ -20035,10 +20624,10 @@ the individual entry of the entry family with the 
specified index value.
 7
 For the evaluation of an indexed_component, the prefix and the
 expressions are evaluated in an arbitrary order.  The value of each
-expression is converted to the corresponding index type.  A check is
-made that each index value belongs to the corresponding index range of
-the array or entry family denoted by the prefix.  Constraint_Error is
-raised if this check fails.
+expression is converted to the corresponding index type. A check is made
+that each index value belongs to the corresponding index range of the
+array or entry family denoted by the prefix. Constraint_Error is raised
+if this check fails.
 
                               _Examples_
 
@@ -20106,10 +20695,10 @@ defined by the discrete_range.
 
 7
 For the evaluation of a slice, the prefix and the discrete_range are
-evaluated in an arbitrary order.  If the slice is not a null slice (a
+evaluated in an arbitrary order. If the slice is not a null slice (a
 slice where the discrete_range is a null range), then a check is made
 that the bounds of the discrete_range belong to the index range of the
-array denoted by the prefix.  Constraint_Error is raised if this check
+array denoted by the prefix. Constraint_Error is raised if this check
 fails.
 
      NOTES
@@ -20159,7 +20748,7 @@ File: aarm2012.info,  Node: 4.1.3,  Next: 4.1.4,  Prev: 
4.1.2,  Up: 4.1
 1
 [Selected_components are used to denote components (including
 discriminants), entries, entry families, and protected subprograms; they
-are also used as expanded names as described below.  ]
+are also used as expanded names as described below. ]
 
                                _Syntax_
 
@@ -20259,7 +20848,7 @@ denote one of the following:
      denotes a view of this subprogram that omits the first formal
      parameter.  This view is called a prefixed view of the subprogram,
      and the prefix of the selected_component (after any implicit
-     dereference) is called the prefix of the prefixed view.  
+     dereference) is called the prefix of the prefixed view. 
 
 9.b/3
           Discussion: {AI05-0090-1AI05-0090-1} The part of the rule that
@@ -20343,7 +20932,7 @@ prefix.
 15
 For a selected_component that denotes a component of a variant, a check
 is made that the values of the discriminants are such that the value or
-object denoted by the prefix has this component.  The exception
+object denoted by the prefix has this component. The exception
 Constraint_Error is raised if this check fails.
 
                               _Examples_
@@ -20410,7 +20999,7 @@ Examples of expanded names:
           tagged objects is new.  This provides a similar notation to
           that used in other popular languages, and also reduces the
           need for use_clauses.  This is sometimes known as
-          "distinguished receiver notation".  
+          "distinguished receiver notation". 
 
 19.f/2
           Given the following definitions for a tagged type T:
@@ -20545,20 +21134,22 @@ range_attribute_designator shall be static.
 
                           _Static Semantics_
 
-9/3
-{AI05-0006-1AI05-0006-1} An attribute_reference denotes a value, an
-object, a subprogram, or some other kind of program entity.  For an
-attribute_reference that denotes a value or an object, if its type is
-scalar, then its nominal subtype is the base subtype of the type; if its
-type is tagged, its nominal subtype is the first subtype of the type;
-otherwise, its nominal subtype is a subtype of the type without any
-constraint or null_exclusion.  Similarly, unless explicitly specified
-otherwise, for an attribute_reference that denotes a function, when its
-result type is scalar, its result subtype is the base subtype of the
-type, when its result type is tagged, the result subtype is the first
-subtype of the type, and when the result type is some other type, the
-result subtype is a subtype of the type without any constraint or
-null_exclusion.
+9/4
+{AI05-0006-1AI05-0006-1} {AI12-0032-1AI12-0032-1}
+{AI12-0159-1AI12-0159-1} An attribute_reference denotes a value, an
+object, a subprogram, or some other kind of program entity.  Unless
+explicitly specified otherwise, for an attribute_reference that denotes
+a value or an object, if its type is scalar, then its nominal subtype is
+the base subtype of the type; if its type is tagged, its nominal subtype
+is the first subtype of the type; otherwise, its nominal subtype is a
+subtype of the type without any constraint, null_exclusion, or
+predicate.  Similarly, unless explicitly specified otherwise, for an
+attribute_reference that denotes a function, when its result type is
+scalar, its result subtype is the base subtype of the type, when its
+result type is tagged, the result subtype is the first subtype of the
+type, and when the result type is some other type, the result subtype is
+a subtype of the type without any constraint, null_exclusion, or
+predicate.
 
 9.a
           Ramification: The attributes defined by the language are
@@ -20646,7 +21237,7 @@ previous edition of this International Standard.
      to be a single access type, and the resolution of the name can use
      the fact that the type of the object or the profile of the callable
      entity denoted by the prefix has to match the designated type or be
-     type conformant with the designated profile of the access type.  
+     type conformant with the designated profile of the access type. 
 
 14.a/2
           Proof: {AI95-00235AI95-00235} In the general case, there is no
@@ -20741,6 +21332,18 @@ Examples of attributes:
           subtype of an attribute_reference to close a minor language
           hole.
 
+                    _Wording Changes from Ada 2012_
+
+16.k/4
+          {AI12-0032-1AI12-0032-1} Corrigendum: Allowed overriding the
+          nominal subtype of an attribute_reference for an object; that
+          is used elsewhere in this standard.
+
+16.l/4
+          {AI12-0159-1AI12-0159-1} Corrigendum: Added wording so it is
+          clear that predicates don't apply to the result of an
+          attribute.
+
 
 File: aarm2012.info,  Node: 4.1.5,  Next: 4.1.6,  Prev: 4.1.4,  Up: 4.1
 
@@ -20791,6 +21394,15 @@ type.
 
                           _Static Semantics_
 
+5.1/4
+{AI12-0138-1AI12-0138-1} The Implicit_Dereference aspect is
+nonoverridable (see *note 13.1.1::).
+
+5.a/4
+          Reason: This ensures that all descendants of a reference type
+          have the same reference discriminant.  This prevents generic
+          contract problems with formal derived types.
+
 6/3
 {AI05-0139-2AI05-0139-2} A generalized_reference denotes a view
 equivalent to that of a dereference of the reference discriminant of the
@@ -20813,7 +21425,7 @@ subprogram designated by the value of this constraining 
expression.]
 {AI05-0139-2AI05-0139-2} The evaluation of a generalized_reference
 consists of the evaluation of the reference_object_name and a
 determination of the object or subprogram designated by the reference
-discriminant of the named reference object.  A check is made that the
+discriminant of the named reference object. A check is made that the
 value of the reference discriminant is not the null access value.
 Constraint_Error is raised if this check fails.  The
 generalized_reference denotes the object or subprogram designated by the
@@ -20825,7 +21437,7 @@ value of the reference discriminant of the named 
reference object.
      {AI05-0268-1AI05-0268-1} type Barrel is tagged ...  -- holds objects of 
type Element
 
 10/3
-     {AI05-0139-2AI05-0139-2} {AI05-0299-2AI05-0299-2} type Ref_Element(Data : 
access Element) is limited private
+     {AI05-0139-2AI05-0139-2} {AI05-0299-1AI05-0299-1} type Ref_Element(Data : 
access Element) is limited private
         with Implicit_Dereference => Data;
            -- This Ref_Element type is a "reference" type.
            -- "Data" is its reference discriminant.
@@ -20835,7 +21447,7 @@ value of the reference discriminant of the named 
reference object.
         -- Return a reference to an element of a barrel.
 
 12/3
-     {AI05-0268-1AI05-0268-1} {AI05-0299-2AI05-0299-2} B: aliased Barrel;
+     {AI05-0268-1AI05-0268-1} {AI05-0299-1AI05-0299-1} B: aliased Barrel;
 
 13/3
      {AI05-0139-2AI05-0139-2} ...
@@ -20853,6 +21465,16 @@ value of the reference discriminant of the named 
reference object.
           {AI05-0139-2AI05-0139-2} The aspect Implicit_Dereference and
           the generalized_reference are new.
 
+                   _Incompatibilities With Ada 2012_
+
+15.b/4
+          {AI12-0138-1AI12-0138-1} Corrigendum: Defined
+          Implicit_Dereference to be nonoveridable, which makes
+          redefinitions and hiding of the aspect illegal.  It's possible
+          that some program could violate one of these new restrictions,
+          but this is not very likely as reference types are not likely
+          to be used in a hierarchy.
+
 
 File: aarm2012.info,  Node: 4.1.6,  Prev: 4.1.5,  Up: 4.1
 
@@ -20901,10 +21523,9 @@ Variable_Indexing
           Aspect Description for Variable_Indexing: Defines function(s)
           to implement user-defined indexed_components.
 
-4/3
-These aspects are inherited by descendants of T (including the
-class-wide type T'Class).  [The aspects shall not be overridden, but the
-functions they denote may be.]
+4/4
+{AI12-0104-1AI12-0104-1} These aspects are inherited by descendants of T
+(including the class-wide type T'Class).
 
 4.a/3
           Ramification: Indexing can be provided for multiple index
@@ -20927,34 +21548,31 @@ function named by a Constant_Indexing or 
Variable_Indexing aspect.]
           user-defined behavior for indexing, via the Constant_Indexing
           or Variable_Indexing aspects.
 
-                           _Legality Rules_
-
-6/3
-{AI05-0139-2AI05-0139-2} The Constant_Indexing or Variable_Indexing
-aspect shall not be specified:
-
-7/3
-   * on a derived type if the parent type has the corresponding aspect
-     specified or inherited; or
-
-8/3
-   * on a full_type_declaration if the type has a tagged partial view.
-
-9/3
-In addition to the places where Legality Rules normally apply (see *note
-12.3::), these rules apply also in the private part of an instance of a
-generic unit.
-
-9.a/3
-          Ramification: In order to enforce these rules without breaking
-          privacy, we cannot allow a tagged private type to have hidden
-          indexing aspects.  There is no problem if the private type is
-          not tagged (as the indexing aspects cannot be specified on
-          descendants in that case).
+5.1/4
+{AI12-0138-1AI12-0138-1} The Constant_Indexing and Variable_Indexing
+aspects are nonoverridable (see *note 13.1.1::).
+
+5.a/4
+          Reason: This ensures that all descendants of an indexable
+          container type have aspects with the same properties.  This
+          prevents generic contract problems with formal derived types.
+
+5.b/4
+          {AI12-0104-1AI12-0104-1} {AI12-0138-1AI12-0138-1} A
+          nonoverridable aspect allows the replacement of the
+          implementation of an indexing function and the addition of a
+          new indexing function for a derived type, but not the removal
+          of an indexing function.  This is necessary so that indexing
+          can be used on objects of T'Class.  So long as the tag of O is
+          that of its nominal subtype, we do not want T'Class(O)(I) to
+          mean something different than O(I). Thus we cannot allow a
+          change in the function identified.  As T'Class(O)(I) expands
+          into a dispatching call, we need to ensure that there is a
+          body for each such function -- but it is OK for that body to
+          be changed from the original body (that's just normal
+          dispatching).
 
-9.b/3
-          We don't need an assume-the-worst rule as deriving from formal
-          tagged type is not allowed in generic bodies.
+Paragraphs 6 through 9 were deleted.
 
                                _Syntax_
 
@@ -21015,26 +21633,36 @@ the prefix of the prefixed view.
 17.b/3
                indexable_container_object_prefix.Indexing actual_parameter_part
 
-17.c/3
-          where Indexing is the name specified for the Constant_Indexing
-          or Variable_Indexing aspect.
+17.c/4
+          {AI12-0005-1AI12-0005-1} where Indexing is the name specified
+          for the Constant_Indexing or Variable_Indexing aspect.  This
+          equivalence is then resolved in the normal way; the aspect
+          specifies a name, it does not denote declarations.
+
+     NOTES
+
+18/4
+     6  {AI12-0104-1AI12-0104-1} The Constant_Indexing and
+     Variable_Indexing aspects cannot be redefined when inherited for a
+     derived type, but the functions that they denote can be modified by
+     overriding or overloading.
 
                               _Examples_
 
-18/3
+19/3
      {AI05-0268-1AI05-0268-1} {AI05-0292-1AI05-0292-1} type Indexed_Barrel is 
tagged ...
        with Variable_Indexing => Find;
        -- Indexed_Barrel is an indexable container type,
        -- Find is the generalized indexing operation.
 
-19/3
+20/3
      {AI05-0268-1AI05-0268-1} function Find (B : aliased in out 
Indexed_Barrel; Key : String) return Ref_Element;
         -- Return a reference to an element of a barrel (see *note 4.1.5::).
 
-20/3
+21/3
      {AI05-0268-1AI05-0268-1} IB: aliased Indexed_Barrel;
 
-21/3
+22/3
      {AI05-0268-1AI05-0268-1} -- All of the following calls are then 
equivalent:
      Find (IB,"pear").Data.all := Element'(...); -- Traditional call
      IB.Find ("pear").Data.all := Element'(...); -- Call of prefixed view
@@ -21044,11 +21672,24 @@ the prefix of the prefixed view.
 
                        _Extensions to Ada 2005_
 
-21.a/3
+22.a/3
           {AI05-0139-2AI05-0139-2} Aspects Constant_Indexing and
           Variable_Indexing, and the generalized_indexing syntax are
           new.
 
+                    _Wording Changes from Ada 2012_
+
+22.b/4
+          {AI12-0104-1AI12-0104-1} Corrigendum: Converted confusing and
+          unnecessary normative wording about "overriding an aspect"
+          into a note.
+
+22.c/4
+          {AI12-0138-1AI12-0138-1} Corrigendum: Defined
+          Constant_Indexing and Variable_Indexing to be nonoveridable.
+          This is merely a new description for Legality Rules which
+          already applied to these aspects.
+
 
 File: aarm2012.info,  Node: 4.2,  Next: 4.3,  Prev: 4.1,  Up: 4
 
@@ -21058,7 +21699,7 @@ File: aarm2012.info,  Node: 4.2,  Next: 4.3,  Prev: 
4.1,  Up: 4
 1
 [ A literal represents a value literally, that is, by means of notation
 suited to its kind.]  A literal is either a numeric_literal, a
-character_literal, the literal null, or a string_literal.  
+character_literal, the literal null, or a string_literal. 
 
 1.a
           Discussion: An enumeration literal that is an identifier
@@ -21133,7 +21774,7 @@ For the evaluation of a string_literal of type T, a 
check is made that
 the value of each character of the string_literal belongs to the
 component subtype of T. For the evaluation of a null string literal, a
 check is made that its lower bound is greater than the lower bound of
-the base range of the index type.  The exception Constraint_Error is
+the base range of the index type. The exception Constraint_Error is
 raised if either of these checks fails.
 
 11.a
@@ -21145,7 +21786,7 @@ raised if either of these checks fails.
      NOTES
 
 12
-     6  Enumeration literals that are identifiers rather than
+     7  Enumeration literals that are identifiers rather than
      character_literals follow the normal rules for identifiers when
      used in a name (see *note 4.1:: and *note 4.1.3::).
      Character_literals used as selector_names follow the normal rules
@@ -21203,7 +21844,7 @@ File: aarm2012.info,  Node: 4.3,  Next: 4.4,  Prev: 
4.2,  Up: 4
 
 1
 [ An aggregate combines component values into a composite value of an
-array type, record type, or record extension.]  
+array type, record type, or record extension.] 
 
                                _Syntax_
 
@@ -21258,7 +21899,7 @@ For the evaluation of an aggregate, an anonymous object 
is created and
 values for the components or ancestor part are obtained (as described in
 the subsequent subclause for each kind of the aggregate) and assigned
 into the corresponding components or ancestor part of the anonymous
-object.  Obtaining the values and the assignments occur in an arbitrary
+object. Obtaining the values and the assignments occur in an arbitrary
 order.  The value of the aggregate is the value of this object.
 
 5.a
@@ -21285,7 +21926,7 @@ order.  The value of the aggregate is the value of this 
object.
 
 6
 If an aggregate is of a tagged type, a check is made that its value
-belongs to the first subtype of the type.  Constraint_Error is raised if
+belongs to the first subtype of the type. Constraint_Error is raised if
 this check fails.
 
 6.a
@@ -21525,15 +22166,17 @@ record_component_association_list (*note 4.3.1: 
S0108.).
           the only record_component_association (*note 4.3.1: S0109.)
           that does not require an associated component.
 
-16/3
-{AI95-00287-01AI95-00287-01} {AI05-0199-1AI05-0199-1} Each
-record_component_association other than an others choice with a <> shall
-have at least one associated component, and each needed component shall
-be associated with exactly one record_component_association (*note
-4.3.1: S0109.).  If a record_component_association (*note 4.3.1: S0109.)
-with an expression has two or more associated components, all of them
-shall be of the same type, or all of them shall be of anonymous access
-types whose subtypes statically match.
+16/4
+{AI95-00287-01AI95-00287-01} {AI05-0199-1AI05-0199-1}
+{AI12-0046-1AI12-0046-1} Each record_component_association other than an
+others choice with a <> shall have at least one associated component,
+and each needed component shall be associated with exactly one
+record_component_association (*note 4.3.1: S0109.).  If a
+record_component_association (*note 4.3.1: S0109.) with an expression
+has two or more associated components, all of them shall be of the same
+type, or all of them shall be of anonymous access types whose subtypes
+statically match.  In addition, Legality Rules are enforced separately
+for each associated component.
 
 16.a/2
           Ramification: {AI95-00287-01AI95-00287-01} These rules apply
@@ -21551,19 +22194,28 @@ types whose subtypes statically match.
           that (others => <>) always represents a default-initialized
           record or array value.
 
-16.c
-          Discussion: AI83-00244 also requires that the expression shall
-          be legal for each associated component.  This is because even
-          though two components have the same type, they might have
-          different subtypes.  Therefore, the legality of the
-          expression, particularly if it is an array aggregate, might
-          differ depending on the associated component's subtype.
-          However, we have relaxed the rules on array aggregates
-          slightly for Ada 95, so the staticness of an applicable index
-          constraint has no effect on the legality of the array
-          aggregate to which it applies.  See *note 4.3.3::.  This was
-          the only case (that we know of) where a subtype provided by
-          context affected the legality of an expression.
+16.c/4
+          Discussion: {AI12-0046-1AI12-0046-1} AI83-00244 also requires
+          that the expression shall be legal for each associated
+          component.  Ada 95 omitted this wording, as it was thought
+          that all cases of difference had been eliminated.  That
+          probably was true, but Ada 2005 reintroduced cases where the
+          types match but the legality differs.  For example:
+
+16.c.1/4
+               type Rec (D : access Integer) is record
+                         F : access Integer;
+               end record;
+
+16.c.2/4
+               ...
+               X : aliased Integer;
+               R : Rec := (D | F => X'Access); -- Legal for D, illegal for F
+
+16.c.3/4
+          There are additional ways for this to happen; because of cases
+          like the above we require that the Legality Rules are checked
+          individually for each associated component.
 
 16.d
           Ramification: The rule that requires at least one associated
@@ -21609,7 +22261,7 @@ record_component_association_list (*note 4.3.1: S0108.).
 For the evaluation of a record_component_association_list (*note 4.3.1:
 S0108.), any per-object constraints (see *note 3.8::) for components
 specified in the association list are elaborated and any expressions are
-evaluated and converted to the subtype of the associated component.  Any
+evaluated and converted to the subtype of the associated component. Any
 constraint elaborations and expression evaluations (and conversions)
 occur in an arbitrary order, except that the expression for a
 discriminant is evaluated (and converted) prior to the elaboration of
@@ -21650,7 +22302,7 @@ converted) once for each associated component.
      NOTES
 
 21
-     7  For a record_aggregate with positional associations, expressions
+     8  For a record_aggregate with positional associations, expressions
      specifying discriminant values appear first since the
      known_discriminant_part is given first in the declaration of the
      type; they have to be in the same order as in the
@@ -21755,6 +22407,16 @@ Examples of record aggregates for tagged types (see 
*note 3.9:: and
           single component association.  This is to be consistent with
           the capabilities of a named access type.
 
+                    _Wording Changes from Ada 2012_
+
+31.h/4
+          {AI12-0046-1AI12-0046-1} Corrigendum: We explicitly say that
+          the Legality Rules have to be rechecked for each component
+          individually.  This seems obvious, but as the AARM note *note
+          4.3.1:: (16.c) appeared to say that this was not necessary,
+          and since we explicitly state this sort of thing for generic
+          instances, it seemed better to be explicit.
+
 
 File: aarm2012.info,  Node: 4.3.2,  Next: 4.3.3,  Prev: 4.3.1,  Up: 4.3
 
@@ -21812,7 +22474,7 @@ tagged type.
           ambiguous if the context is overloaded on array and/or
           untagged record types, even though those are never legal
           contexts for an extension aggregate.  Thus, this rule acts
-          more like a Legality Rules than a Name Resolution Rules.
+          more like a Legality Rule than a Name Resolution Rule.
 
                            _Legality Rules_
 
@@ -21898,7 +22560,7 @@ determined by the ancestor_part has the value specified 
for a
 corresponding discriminant, if any, either in the
 record_component_association_list (*note 4.3.1: S0108.), or in the
 derived_type_definition for some ancestor of the type of the
-extension_aggregate.  Constraint_Error is raised if this check fails.
+extension_aggregate. Constraint_Error is raised if this check fails.
 
 8.a
           Ramification: Corresponding and specified discriminants are
@@ -21916,13 +22578,13 @@ extension_aggregate.  Constraint_Error is raised if 
this check fails.
      NOTES
 
 9
-     8  If all components of the value of the extension_aggregate are
+     9  If all components of the value of the extension_aggregate are
      determined by the ancestor_part, then the
      record_component_association_list (*note 4.3.1: S0108.) is required
      to be simply null record.
 
 10
-     9  If the ancestor_part is a subtype_mark, then its type can be
+     10  If the ancestor_part is a subtype_mark, then its type can be
      abstract.  If its type is controlled, then as the last step of
      evaluating the aggregate, the Initialize procedure of the ancestor
      type is called, unless the Initialize procedure is abstract (see
@@ -22047,7 +22709,7 @@ by the values covered by the discrete_choices.
 6
 An n-dimensional array_aggregate is one that is written as n levels of
 nested array_aggregates (or at the bottom level, equivalent
-string_literals).  For the multidimensional case (n >= 2) the
+string_literals). For the multidimensional case (n >= 2) the
 array_aggregates (or equivalent string_literals) at the n-1 lower levels
 are called subaggregates of the enclosing n-dimensional array_aggregate.
 The expressions of the bottom level subaggregates (or of the
@@ -22071,9 +22733,9 @@ component expressions of the enclosing n-dimensional 
array_aggregate.
 
 7/2
 {AI95-00287-01AI95-00287-01} The expected type for an array_aggregate
-(that is not a subaggregate) shall be a single array type.  The
-component type of this array type is the expected type for each array
-component expression of the array_aggregate.
+(that is not a subaggregate) shall be a single array type. The component
+type of this array type is the expected type for each array component
+expression of the array_aggregate.
 
 7.a/2
           Ramification: {AI95-00287-01AI95-00287-01} We already require
@@ -22103,19 +22765,21 @@ n-dimensional array_aggregate.
 
 10
 An others choice is allowed for an array_aggregate only if an applicable
-index constraint applies to the array_aggregate.  [An applicable index
+index constraint applies to the array_aggregate. [An applicable index
 constraint is a constraint provided by certain contexts where an
 array_aggregate is permitted that can be used to determine the bounds of
 the array value specified by the aggregate.]  Each of the following
 contexts (and none other) defines an applicable index constraint:
 
-11/2
-   * {AI95-00318-02AI95-00318-02} For an explicit_actual_parameter, an
-     explicit_generic_actual_parameter, the expression of a return
-     statement, the initialization expression in an object_declaration
-     (*note 3.3.1: S0032.), or a default_expression (*note 3.7: S0063.)
-     [(for a parameter or a component)], when the nominal subtype of the
-     corresponding formal parameter, generic formal parameter, function
+11/4
+   * {AI95-00318-02AI95-00318-02} {AI12-0157-1AI12-0157-1} For an
+     explicit_actual_parameter, an explicit_generic_actual_parameter,
+     the expression of a return statement, the return expression of an
+     expression function, the initialization expression in an
+     object_declaration (*note 3.3.1: S0032.), or a default_expression
+     (*note 3.7: S0063.) [(for a parameter or a component)], when the
+     nominal subtype of the corresponding formal parameter, generic
+     formal parameter, function return object, expression function
      return object, object, or component is a constrained array subtype,
      the applicable index constraint is the constraint of the subtype;
 
@@ -22233,7 +22897,7 @@ two steps:
      2.  The array component expressions of the aggregate are evaluated
      in an arbitrary order and their values are converted to the
      component subtype of the array type; an array component expression
-     is evaluated once for each associated component.  
+     is evaluated once for each associated component. 
 
 23.a
           Ramification: Subaggregates are not separately evaluated.  The
@@ -22250,12 +22914,14 @@ two steps:
           implementation in general (although it might be OK if the
           default initialization is known to be constant).
 
-23.1/2
-{AI95-00287-01AI95-00287-01} Each expression in an
-array_component_association defines the value for the associated
+23.1/4
+{AI95-00287-01AI95-00287-01} {AI12-0084-1AI12-0084-1} Each expression in
+an array_component_association defines the value for the associated
 component(s).  For an array_component_association with <>, the
-associated component(s) are initialized by default as for a stand-alone
-object of the component subtype (see *note 3.3.1::).
+associated component(s) are initialized to the Default_Component_Value
+of the array type if this aspect has been specified for the array type;
+otherwise, they are initialized by default as for a stand-alone object
+of the component subtype (see *note 3.3.1::).
 
 24
 The bounds of the index range of an array_aggregate [(including a
@@ -22333,7 +22999,7 @@ fail.
      NOTES
 
 32/3
-     10  {AI05-0004-1AI05-0004-1} In an array_aggregate, positional
+     11  {AI05-0004-1AI05-0004-1} In an array_aggregate, positional
      notation may only be used with two or more expressions; a single
      expression in parentheses is interpreted as a parenthesized
      expression.  A named_array_aggregate, such as (1 => X), may be used
@@ -22490,6 +23156,25 @@ by an enclosing record aggregate:
           {AI05-0147-1AI05-0147-1} Added a definition of the applicable
           index constraint for conditional_expressions (which are new).
 
+                    _Inconsistencies With Ada 2012_
+
+45.k/4
+          {AI05-0084-1AI05-0084-1} Corrigendum: Fixed so that the
+          Default_Component_Value (if any) is used to initialize
+          components specified with <>.  This is what users would
+          expect, and all Ada 2012 implementation known at the time of
+          this writing initialize with the Default_Component_Value, so
+          it is unlikely that anyone will be affected by this
+          inconsistency.
+
+                    _Wording Changes from Ada 2012_
+
+45.l/4
+          {AI05-0157-1AI05-0157-1} Corrigendum: Added expression
+          functions to the contexts that provide an applicable index
+          constraint, because expression functions are handled
+          separately in static semantics and legality rules.
+
 
 File: aarm2012.info,  Node: 4.4,  Next: 4.5,  Prev: 4.3,  Up: 4
 
@@ -22503,7 +23188,7 @@ computation or retrieval of a value.  In this 
International Standard,
 the term "expression" refers to a construct of the syntactic category
 expression or of any of the following categories: choice_expression,
 choice_relation, relation, simple_expression, term, factor, primary,
-conditional_expression, quantified_expression.  
+conditional_expression, quantified_expression. 
 
                                _Syntax_
 
@@ -22525,18 +23210,20 @@ conditional_expression, quantified_expression.
      {AI05-0158-1AI05-0158-1} choice_relation ::=
           simple_expression [relational_operator simple_expression]
 
-3/3
-     {AI05-0158-1AI05-0158-1} relation ::=
+3/4
+     {AI05-0158-1AI05-0158-1} {AI12-0022-1AI12-0022-1}
+     {AI12-0039-1AI12-0039-1} relation ::=
           simple_expression [relational_operator simple_expression]
-        | simple_expression [not] in membership_choice_list
+        | tested_simple_expression [not] in membership_choice_list
+        | raise_expression
 
 3.1/3
      {AI05-0158-1AI05-0158-1} membership_choice_list ::=
      membership_choice {| membership_choice}
 
-3.2/3
-     {AI05-0158-1AI05-0158-1} membership_choice ::= choice_expression | 
-     range | subtype_mark
+3.2/4
+     {AI05-0158-1AI05-0158-1} {AI12-0039-1AI12-0039-1} membership_choice
+     ::= choice_simple_expression | range | subtype_mark
 
 4
      simple_expression ::= [unary_adding_operator] term {
@@ -22692,6 +23379,40 @@ Examples of expressions:
           {AI05-0158-1AI05-0158-1} Expanded membership test syntax (see
           *note 4.5.2::).
 
+                    _Inconsistencies With Ada 2012_
+
+15.f/4
+          {AI12-0039-1AI12-0039-1} Corrigendum: Revised membership
+          syntax to eliminate ambiguities.  In some cases, previously
+          ambiguous membership expressions will now have an unambiguous
+          meaning.  If an Ada 2012 implementation chose the "wrong"
+          meaning, the expression could silently change meaning.
+          Virtually all such expressions will become illegal because of
+          type mismatches (and thus be incompatible, not inconsistent).
+          However, if the choices are all of a Boolean type, resolution
+          might succeed.  For instance, A in B | C and D now always
+          means (A in B | C) and D, but the original Ada 2012 syntax
+          would have allowed it to mean A in B | (C and D). If a
+          compiler allowed the expression and interpreted it as the
+          latter, the meaning of the expression would silently change.
+          We expect this to be extremely rare as membership operations
+          on Boolean types are unlikely (and this can happen only in
+          code written for Ada 2012).
+
+                   _Incompatibilities With Ada 2012_
+
+15.g/4
+          {AI12-0039-1AI12-0039-1} Corrigendum: The revised membership
+          syntax will require parentheses in membership_choice_lists in
+          some cases where the Ada 2012 grammar did not require them.
+          For instance, A in B in C | D is now illegal.  However, such
+          expressions can be interpreted in multiple ways (either A in
+          (B in C) | D or A in (B in C | D) for this example), so using
+          such expressions is likely to be dangerous (another compiler
+          might interpret the expression differently).  In addition, all
+          such expressions occur only in Ada 2012 syntax; so they should
+          be rare.
+
 
 File: aarm2012.info,  Node: 4.5,  Next: 4.6,  Prev: 4.4,  Up: 4
 
@@ -22752,7 +23473,7 @@ Parentheses can be used to impose specific associations.
 9
 For each form of type definition, certain of the above operators are
 predefined; that is, they are implicitly declared immediately after the
-type definition.  For each such implicit operator declaration, the
+type definition. For each such implicit operator declaration, the
 parameters are called Left and Right for binary operators; the single
 parameter is called Right for unary operators.  [An expression of the
 form X op Y, where op is a binary operator, is equivalent to a
@@ -22819,7 +23540,7 @@ association.
      NOTES
 
 14
-     11  The two operands of an expression of the form X op Y, where op
+     12  The two operands of an expression of the form X op Y, where op
      is a binary operator, are evaluated in an arbitrary order, as for
      any function_call (see *note 6.4::).
 
@@ -22969,8 +23690,8 @@ determines the result.
 8
 For the logical operators on arrays, a check is made that for each
 component of the left operand there is a matching component of the right
-operand, and vice versa.  Also, a check is made that each component of
-the result belongs to the component subtype.  The exception
+operand, and vice versa. Also, a check is made that each component of
+the result belongs to the component subtype. The exception
 Constraint_Error is raised if either of the above checks fails.
 
 8.a
@@ -22980,7 +23701,7 @@ Constraint_Error is raised if either of the above 
checks fails.
      NOTES
 
 9
-     12  The conventional meaning of the logical operators is given by
+     13  The conventional meaning of the logical operators is given by
      the following truth table:
 
 10
@@ -23015,9 +23736,9 @@ File: aarm2012.info,  Node: 4.5.2,  Next: 4.5.3,  Prev: 
4.5.1,  Up: 4.5
 
 1
 [ The equality operators = (equals) and /= (not equals) are predefined
-for nonlimited types.  The other relational_operators are the ordering
+for nonlimited types. The other relational_operators are the ordering
 operators < (less than), <= (less than or equal), > (greater than), and
->= (greater than or equal).  The ordering operators are predefined for
+>= (greater than or equal). The ordering operators are predefined for
 scalar types, and for discrete array types, that is, one-dimensional
 array types whose components are of a discrete type.
 
@@ -23043,14 +23764,14 @@ membership_choice_list shall resolve to the same 
type, which is the
 tested type; or each membership_choice shall be of an elementary type,
 and the tested type shall be covered by each of these elementary types.
 
-3.1/3
-{AI05-0158-1AI05-0158-1} If the tested type is tagged, then the
-simple_expression shall resolve to be of a type that is convertible (see
-*note 4.6::) to the tested type; if untagged, the expected type for the
-simple_expression is the tested type.  The expected type of a
-choice_expression in a membership_choice, and of a simple_expression of
-a range in a membership_choice, is the tested type of the membership
-operation.
+3.1/4
+{AI05-0158-1AI05-0158-1} {AI12-0039-1AI12-0039-1} If the tested type is
+tagged, then the tested_simple_expression shall resolve to be of a type
+that is convertible (see *note 4.6::) to the tested type; if untagged,
+the expected type for the tested_simple_expression is the tested type.
+The expected type of a choice_simple_expression in a membership_choice,
+and of a simple_expression of a range in a membership_choice, is the
+tested type of the membership operation.
 
 3.a/2
           Reason: {AI95-00230-01AI95-00230-01} The part of the rule for
@@ -23058,13 +23779,14 @@ operation.
           like a string literal are still legal as operands of a
           membership test.
 
-3.b/2
-          {AI95-00251-01AI95-00251-01} The significance of "is
-          convertible to" is that we allow the simple_expression to be
-          of any class-wide type that could be converted to the tested
-          type, not just the one rooted at the tested type.  This
-          includes any class-wide type that covers the tested type,
-          along with class-wide interfaces in some cases.
+3.b/4
+          {AI95-00251-01AI95-00251-01} {AI12-0039-1AI12-0039-1} The
+          significance of "is convertible to" is that we allow the
+          tested_simple_expression to be of any class-wide type that
+          could be converted to the tested type, not just the one rooted
+          at the tested type.  This includes any class-wide type that
+          covers the tested type, along with class-wide interfaces in
+          some cases.
 
 3.c/3
           {AI05-0158-1AI05-0158-1} The special rule for determining the
@@ -23075,9 +23797,10 @@ operation.
 
                            _Legality Rules_
 
-4
-For a membership test, if the simple_expression is of a tagged
-class-wide type, then the tested type shall be (visibly) tagged.
+4/4
+{AI12-0039-1AI12-0039-1} For a membership test, if the
+tested_simple_expression is of a tagged class-wide type, then the tested
+type shall be (visibly) tagged.
 
 4.a
           Ramification: Untagged types covered by the tagged class-wide
@@ -23088,11 +23811,11 @@ class-wide type, then the tested type shall be 
(visibly) tagged.
           from one another at run time once converted to a covering
           class-wide type.
 
-4.1/3
-{AI05-0158-1AI05-0158-1} If a membership test includes one or more
-choice_expressions and the tested type of the membership test is
-limited, then the tested type of the membership test shall have a
-visible primitive equality operator.
+4.1/4
+{AI05-0158-1AI05-0158-1} {AI12-0039-1AI12-0039-1} If a membership test
+includes one or more choice_simple_expressions and the tested type of
+the membership test is limited, then the tested type of the membership
+test shall have a visible primitive equality operator.
 
 4.b/3
           Reason: {AI05-0158-1AI05-0158-1} A visible equality operator
@@ -23207,16 +23930,14 @@ shall be of access-to-subprogram types.  Further:
           using it in such a subprogram, this doesn't impose any further
           restrictions on Ada implementations.
 
-9.8/3
-{AI05-0123-1AI05-0123-1} If the profile of an explicitly declared
-primitive equality operator of an untagged record type is type
-conformant with that of the corresponding predefined equality operator,
-the declaration shall occur before the type is frozen.  In addition, if
-the untagged record type has a nonlimited partial view, then the
-declaration shall occur in the visible part of the enclosing package.
-In addition to the places where Legality Rules normally apply (see *note
-12.3::), this rule applies also in the private part of an instance of a
-generic unit.
+9.8/4
+{AI05-0123-1AI05-0123-1} {AI12-0101-1AI12-0101-1} If the profile of an
+explicitly declared primitive equality operator of an untagged record
+type is type conformant with that of the corresponding predefined
+equality operator, the declaration shall occur before the type is
+frozen. In addition to the places where Legality Rules normally apply
+(see *note 12.3::), this rule applies also in the private part of an
+instance of a generic unit.
 
                           _Dynamic Semantics_
 
@@ -23251,7 +23972,7 @@ or if both are equal to the null value of the access 
type.
 Two access-to-subprogram values are equal if they are the result of the
 same evaluation of an Access attribute_reference, or if both are equal
 to the null value of the access type.  Two access-to-subprogram values
-are unequal if they designate different subprograms.  [It is unspecified
+are unequal if they designate different subprograms. [It is unspecified
 whether two access values that designate the same subprogram but are the
 result of distinct evaluations of Access attribute_references are equal
 or unequal.]
@@ -23461,20 +24182,20 @@ remaining components beyond the first and can be 
null).
 {AI05-0269-1AI05-0269-1} An individual membership test is the membership
 test of a single membership_choice.
 
-27/3
-{AI05-0158-1AI05-0158-1} For the evaluation of a membership test using
-in whose membership_choice_list has a single membership_choice, the
-simple_expression and the membership_choice are evaluated in an
-arbitrary order; the result is the result of the individual membership
-test for the membership_choice.
-
-27.1/3
-{AI05-0158-1AI05-0158-1} For the evaluation of a membership test using
-in whose membership_choice_list has more than one membership_choice, the
-simple_expression of the membership test is evaluated first and the
-result of the operation is equivalent to that of a sequence consisting
-of an individual membership test on each membership_choice combined with
-the short-circuit control form or else.
+27/4
+{AI05-0158-1AI05-0158-1} {AI12-0039-1AI12-0039-1} For the evaluation of
+a membership test using in whose membership_choice_list has a single
+membership_choice, the tested_simple_expression and the
+membership_choice are evaluated in an arbitrary order; the result is the
+result of the individual membership test for the membership_choice.
+
+27.1/4
+{AI05-0158-1AI05-0158-1} {AI12-0039-1AI12-0039-1} For the evaluation of
+a membership test using in whose membership_choice_list has more than
+one membership_choice, the tested_simple_expression of the membership
+test is evaluated first and the result of the operation is equivalent to
+that of a sequence consisting of an individual membership test on each
+membership_choice combined with the short-circuit control form or else.
 
 27.a.1/3
           Ramification: {AI05-0158-1AI05-0158-1} This equivalence
@@ -23485,24 +24206,26 @@ the short-circuit control form or else.
 {AI05-0158-1AI05-0158-1} {AI05-0269-1AI05-0269-1} An individual
 membership test yields the result True if:
 
-28.1/3
-   * {AI05-0158-1AI05-0158-1} {AI05-0264-1AI05-0264-1} The
-     membership_choice is a choice_expression, and the simple_expression
-     is equal to the value of the membership_choice.  If the tested type
-     is a record type or a limited type, the test uses the primitive
-     equality for the type; otherwise, the test uses predefined
-     equality.
-
-28.2/3
-   * {AI05-0153-3AI05-0153-3} {AI05-0158-1AI05-0158-1} The
-     membership_choice is a range and the value of the simple_expression
-     belongs to the given range.
-
-29/3
-   * {AI05-0153-3AI05-0153-3} {AI05-0158-1AI05-0158-1} The
+28.1/4
+   * {AI05-0158-1AI05-0158-1} {AI05-0264-1AI05-0264-1}
+     {AI12-0039-1AI12-0039-1} The membership_choice is a
+     choice_simple_expression, and the tested_simple_expression is equal
+     to the value of the membership_choice.  If the tested type is a
+     record type or a limited type, the test uses the primitive equality
+     for the type; otherwise, the test uses predefined equality.
+
+28.2/4
+   * {AI05-0153-3AI05-0153-3} {AI05-0158-1AI05-0158-1}
+     {AI12-0039-1AI12-0039-1} The membership_choice is a range and the
+     value of the tested_simple_expression belongs to the given range.
+
+29/4
+   * {AI05-0153-3AI05-0153-3} {AI05-0158-1AI05-0158-1}
+     {AI12-0039-1AI12-0039-1} {AI12-0071-1AI12-0071-1} The
      membership_choice is a subtype_mark, the tested type is scalar, the
-     value of the simple_expression belongs to the range of the named
-     subtype, and the predicate of the named subtype evaluates to True.
+     value of the tested_simple_expression belongs to the range of the
+     named subtype, and the value satisfies the predicates of the named
+     subtype.
 
 29.a/3
           Ramification: {AI05-0153-3AI05-0153-3} The scalar membership
@@ -23517,37 +24240,43 @@ membership test yields the result True if:
           evaluation of X does not raise Constraint_Error) when X is
           outside Float'Range.
 
-30/3
+30/4
    * {AI95-00231-01AI95-00231-01} {AI05-0153-3AI05-0153-3}
-     {AI05-0158-1AI05-0158-1} The membership_choice is a subtype_mark,
-     the tested type is not scalar, the value of the simple_expression
-     satisfies any constraints of the named subtype, the predicate of
-     the named subtype evaluates to True, and:
-
-30.1/2
-             * {AI95-00231-01AI95-00231-01} if the type of the
-               simple_expression is class-wide, the value has a tag that
-               identifies a type covered by the tested type;
+     {AI05-0158-1AI05-0158-1} {AI12-0039-1AI12-0039-1}
+     {AI12-0071-1AI12-0071-1} The membership_choice is a subtype_mark,
+     the tested type is not scalar, the value of the
+     tested_simple_expression satisfies any constraints of the named
+     subtype, the value satisfies the predicates of the named subtype,
+     and:
+
+30.1/4
+             * {AI95-00231-01AI95-00231-01} {AI12-0039-1AI12-0039-1} if
+               the type of the tested_simple_expression is class-wide,
+               the value has a tag that identifies a type covered by the
+               tested type;
+
+30.a/4
+          Ramification: {AI12-0039-1AI12-0039-1} Note that the tag is
+          not checked if the tested_simple_expression is of a specific
+          type.
 
-30.a
-          Ramification: Note that the tag is not checked if the
-          simple_expression is of a specific type.
-
-30.2/3
-             * {AI95-00231-01AI95-00231-01} {AI05-0149-1AI05-0149-1} if
-               the tested type is an access type and the named subtype
-               excludes null, the value of the simple_expression is not
-               null;
-
-30.3/3
-             * {AI05-0149-1AI05-0149-1} if the tested type is a general
-               access-to-object type, the type of the simple_expression
-               is convertible to the tested type and its accessibility
-               level is no deeper than that of the tested type; further,
-               if the designated type of the tested type is tagged and
-               the simple_expression is nonnull, the tag of the object
-               designated by the value of the simple_expression is
-               covered by the designated type of the tested type.
+30.2/4
+             * {AI95-00231-01AI95-00231-01} {AI05-0149-1AI05-0149-1}
+               {AI12-0039-1AI12-0039-1} if the tested type is an access
+               type and the named subtype excludes null, the value of
+               the tested_simple_expression is not null;
+
+30.3/4
+             * {AI05-0149-1AI05-0149-1} {AI12-0039-1AI12-0039-1} if the
+               tested type is a general access-to-object type, the type
+               of the tested_simple_expression is convertible to the
+               tested type and its accessibility level is no deeper than
+               that of the tested type; further, if the designated type
+               of the tested type is tagged and the
+               tested_simple_expression is nonnull, the tag of the
+               object designated by the value of the
+               tested_simple_expression is covered by the designated
+               type of the tested type.
 
 31/3
 {AI05-0264-1AI05-0264-1} Otherwise, the test yields the result False.
@@ -23556,10 +24285,11 @@ membership test yields the result True if:
 A membership test using not in gives the complementary result to the
 corresponding membership test using in.
 
-32.a/3
-          To be honest: {AI05-0158-1AI05-0158-1} X not in A | B | C is
-          intended to be exactly equivalent to not (X in A | B | C),
-          including the order of evaluation of the simple_expression and
+32.a/4
+          To be honest: {AI05-0158-1AI05-0158-1}
+          {AI12-0039-1AI12-0039-1} X not in A | B | C is intended to be
+          exactly equivalent to not (X in A | B | C), including the
+          order of evaluation of the tested_simple_expression and
           membership_choices.
 
                      _Implementation Requirements_
@@ -23586,7 +24316,7 @@ generic formal types.
      This paragraph was deleted.{AI95-00230-01AI95-00230-01}
 
 34
-     13  If a composite type has components that depend on
+     14  If a composite type has components that depend on
      discriminants, two values of this type have matching components if
      and only if their discriminants are equal.  Two nonnull arrays have
      matching components if and only if the length of each dimension is
@@ -23721,6 +24451,38 @@ tests:
           view of the designated type.  Otherwise, adding a partial or
           incomplete view could make some "=" operators ambiguous.
 
+                    _Inconsistencies With Ada 2012_
+
+39.p/4
+          {AI12-0101-1AI12-0101-1} Corrigendum: Removed the incompatible
+          rule preventing the declaration of "=" in the private part of
+          a package specification for an untagged record type that
+          completes a private type.  Any code that calls the predefined
+          "=" on the private type will now execute the body for the
+          redefined "=" instead for the predefined "=".  Eliminating the
+          rule eliminates an unnecessary incompatibility (especially for
+          programs that never call the predefined "=").  Moreover, (like
+          the composition of untagged record "=" in Ada 2012) this is
+          more likely to fix bugs than cause them (who defines an "="
+          with a presumably different result and does not want clients
+          to us it?).
+
+                    _Wording Changes from Ada 2012_
+
+39.q/4
+          {AI12-0039-1AI12-0039-1} Corrigendum: Reworded membership
+          tests to use the syntax items tested_simple_expression and
+          choice_simple_expression.  This was necessary to eliminate
+          wording ambiguities introduced when the grammar was corrected
+          to eliminate syntax ambiguities.  (Both of the above are now
+          simple_expressions, so merely talking about a
+          simple_expression is insufficient.)
+
+39.r/4
+          {AI12-0071-1AI12-0071-1} Corrigendum: Updated wording of the
+          membership tests to use the new term "satisfies the
+          predicates" (see *note 3.2.4::).
+
 
 File: aarm2012.info,  Node: 4.5.3,  Next: 4.5.4,  Prev: 4.5.2,  Up: 4.5
 
@@ -23777,17 +24539,17 @@ follows:
      is that of the left operand.
 
 8
-[The upper bound is determined by the lower bound and the length.]  A
+[The upper bound is determined by the lower bound and the length.] A
 check is made that the upper bound of the result of the concatenation
 belongs to the range of the index subtype, unless the result is a null
-array.  Constraint_Error is raised if this check fails.
+array. Constraint_Error is raised if this check fails.
 
 9
 If either operand is of the component type C, the result of the
 concatenation is given by the above rules, using in place of such an
 operand an array having this operand as its only component (converted to
 the component subtype) and having the lower bound of the index subtype
-of the array type as its lower bound.  
+of the array type as its lower bound. 
 
 9.a
           Ramification: The conversion might raise Constraint_Error.
@@ -23810,7 +24572,7 @@ anonymous object, as for any function call (see *note 
6.5::).
      NOTES
 
 11
-     14  As for all predefined operators on modular types, the binary
+     15  As for all predefined operators on modular types, the binary
      adding operators + and - on modular types include a final reduction
      modulo the modulus if the result is outside the base range of the
      type.
@@ -23887,7 +24649,7 @@ have the following specifications:
      NOTES
 
 3
-     15  For modular integer types, the unary adding operator -, when
+     16  For modular integer types, the unary adding operator -, when
      given a nonzero operand, returns the result of subtracting the
      value of the operand from the modulus; for a zero operand, the
      result is zero.
@@ -24070,7 +24832,7 @@ fixed point types, the result is truncated toward zero 
if the
 mathematical result is between two multiples of the small of the
 specific result type (possibly determined by context); for ordinary
 fixed point types, if the mathematical result is between two multiples
-of the small, it is unspecified which of the two is the result.  ]
+of the small, it is unspecified which of the two is the result. ]
 
 22
 The exception Constraint_Error is raised by integer division, rem, and
@@ -24080,7 +24842,7 @@ T'Machine_Overflows True, division by zero raises 
Constraint_Error.]
      NOTES
 
 23
-     16  For positive A and B, A/B is the quotient and A rem B is the
+     17  For positive A and B, A/B is the quotient and A rem B is the
      remainder when A is divided by B. The following relations are
      satisfied by the rem operator:
 
@@ -24089,7 +24851,7 @@ T'Machine_Overflows True, division by zero raises 
Constraint_Error.]
              (-A) rem   B  = -(A rem B)
 
 25
-     17  For any signed integer K, the following identity holds:
+     18  For any signed integer K, the following identity holds:
 
 26
              A mod B   =   (A + K*B) mod B
@@ -24250,9 +25012,9 @@ The operator not that applies to a one-dimensional 
array of boolean
 components yields a one-dimensional boolean array with the same bounds;
 each component of the result is obtained by logical negation of the
 corresponding component of the operand (that is, the component that has
-the same index value).  A check is made that each component of the
-result belongs to the component subtype; the exception Constraint_Error
-is raised if this check fails.
+the same index value). A check is made that each component of the result
+belongs to the component subtype; the exception Constraint_Error is
+raised if this check fails.
 
 6.a
           Discussion: The check against the component subtype is per
@@ -24302,9 +25064,9 @@ generally be 0.0.)
      NOTES
 
 13
-     18  As implied by the specification given above for exponentiation
+     19  As implied by the specification given above for exponentiation
      of an integer type, a check is made that the exponent is not
-     negative.  Constraint_Error is raised if this check fails.
+     negative. Constraint_Error is raised if this check fails.
 
                      _Inconsistencies With Ada 83_
 
@@ -24370,8 +25132,8 @@ of a selecting_expression.
                                _Syntax_
 
 2/3
-     {AI05-0188-1AI05-0188-1} conditional_expression ::= if_expression | 
-     case_expression
+     {AI05-0188-1AI05-0188-1} conditional_expression ::=
+     if_expression | case_expression
 
 3/3
      {AI05-0147-1AI05-0147-1} {AI05-0188-1AI05-0188-1} if_expression ::=
@@ -24528,7 +25290,7 @@ type.
 
 15/3
 {AI05-0188-1AI05-0188-1} The expected type for the selecting_expression
-and the discrete_choices are as for case statements (see *note 5.4::).  
+and the discrete_choices are as for case statements (see *note 5.4::). 
 
                            _Legality Rules_
 
@@ -24607,7 +25369,7 @@ selecting_expression is covered by the 
discrete_choice_list of some
 case_expression_alternative, then the dependent_expression of the
 case_expression_alternative is evaluated, converted to the type of the
 case_expression, and the resulting value is the value of the
-case_expression.  Otherwise (the value is not covered by any
+case_expression. Otherwise (the value is not covered by any
 discrete_choice_list, perhaps due to being outside the base range),
 Constraint_Error is raised.
 
@@ -24623,6 +25385,11 @@ File: aarm2012.info,  Node: 4.5.8,  Prev: 4.5.7,  Up: 
4.5
 4.5.8 Quantified Expressions
 ----------------------------
 
+0.1/4
+{AI12-0158-1AI12-0158-1} Quantified expressions provide a way to write
+universally and existentially quantified predicates over containers and
+arrays.
+
                                _Syntax_
 
 1/3
@@ -24659,37 +25426,38 @@ to be of the same type.
 
                           _Dynamic Semantics_
 
-6/3
-{AI05-0176-1AI05-0176-1} For the evaluation of a quantified_expression,
-the loop_parameter_specification or iterator_specification is first
-elaborated.  The evaluation of a quantified_expression then evaluates
-the predicate for each value of the loop parameter.  These values are
-examined in the order specified by the loop_parameter_specification (see
-*note 5.5::) or iterator_specification (see *note 5.5.2::).
+6/4
+{AI05-0176-1AI05-0176-1} {AI12-0158-1AI12-0158-1} For the evaluation of
+a quantified_expression, the loop_parameter_specification or
+iterator_specification is first elaborated.  The evaluation of a
+quantified_expression then evaluates the predicate for the values of the
+loop parameter in the order specified by the
+loop_parameter_specification (see *note 5.5::) or iterator_specification
+(see *note 5.5.2::).
 
 7/3
 {AI05-0176-1AI05-0176-1} The value of the quantified_expression is
 determined as follows:
 
-8/3
-   * If the quantifier is all, the expression is True if the evaluation
-     of the predicate yields True for each value of the loop parameter.
-     It is False otherwise.  Evaluation of the quantified_expression
-     stops when all values of the domain have been examined, or when the
-     predicate yields False for a given value.  Any exception raised by
-     evaluation of the predicate is propagated.
+8/4
+   * {AI12-0158-1AI12-0158-1} If the quantifier is all, the expression
+     is False if the evaluation of any predicate yields False;
+     evaluation of the quantified_expression stops at that point.
+     Otherwise (every predicate has been evaluated and yielded True),
+     the expression is True.  Any exception raised by evaluation of the
+     predicate is propagated.
 
 8.a/3
           Ramification: The expression is True if the domain contains no
           values.
 
-9/3
-   * If the quantifier is some, the expression is True if the evaluation
-     of the predicate yields True for some value of the loop parameter.
-     It is False otherwise.  Evaluation of the quantified_expression
-     stops when all values of the domain have been examined, or when the
-     predicate yields True for a given value.  Any exception raised by
-     evaluation of the predicate is propagated.
+9/4
+   * {AI12-0158-1AI12-0158-1} If the quantifier is some, the expression
+     is True if the evaluation of any predicate yields True; evaluation
+     of the quantified_expression stops at that point.  Otherwise (every
+     predicate has been evaluated and yielded False), the expression is
+     False.  Any exception raised by evaluation of the predicate is
+     propagated.
 
 9.a/3
           Ramification: The expression is False if the domain contains
@@ -24717,6 +25485,13 @@ composite (as opposed to prime) can be written:
 13.a/3
           {AI05-0176-1AI05-0176-1} Quantified expressions are new.
 
+                    _Wording Changes from Ada 2012_
+
+13.b/4
+          {AI12-0158-1AI12-0158-1} Corrigendum: Revised the wording to
+          make it clear that the semantics is short-circuited, and what
+          the result is when there are no values for the loop parameter.
+
 
 File: aarm2012.info,  Node: 4.6,  Next: 4.7,  Prev: 4.5,  Up: 4
 
@@ -24728,7 +25503,7 @@ File: aarm2012.info,  Node: 4.6,  Next: 4.7,  Prev: 
4.5,  Up: 4
 conversions and view conversions, are allowed between closely related
 types as defined below.  This subclause also defines rules for value and
 view conversions to a particular subtype of a type, both explicit ones
-and those implicit in other constructs.  ]
+and those implicit in other constructs. ]
 
                                _Syntax_
 
@@ -24739,8 +25514,8 @@ and those implicit in other constructs.  ]
 
 3
 The target subtype of a type_conversion is the subtype denoted by the
-subtype_mark.  The operand of a type_conversion is the expression or
-name within the parentheses; its type is the operand type.
+subtype_mark. The operand of a type_conversion is the expression or name
+within the parentheses; its type is the operand type.
 
 4/3
 {AI05-0299-1AI05-0299-1} One type is convertible to a second type if a
@@ -24760,7 +25535,7 @@ types are convertible if each is convertible to the 
other.
 of an object is called a view conversion if both its target type and
 operand type are tagged, or if it appears in a call as an actual
 parameter of mode out or in out; other type_conversions are called value
-conversions.  
+conversions. 
 
 5.a
           Ramification: A view conversion to a tagged type can appear in
@@ -24793,9 +25568,18 @@ The operand of a type_conversion is expected to be of 
any type.
 The operand of a view conversion is interpreted only as a name; the
 operand of a value conversion is interpreted as an expression.
 
-7.a
-          Reason: This formally resolves the syntactic ambiguity between
-          the two forms of type_conversion, not that it really matters.
+7.a/4
+          Reason: {AI12-0005-1AI12-0005-1} This formally resolves the
+          syntactic ambiguity between the two forms of type_conversion.
+          This matters as an expression that is a name is evaluated and
+          represents a value while a name by itself can be an object; we
+          want a view conversion to be an object.
+
+7.b/4
+          Ramification: {AI12-0005-1AI12-0005-1} This wording uses
+          "interpreted as" rather than "shall be" so that this rule is
+          not used to resolve overloading; it is solely about evaluation
+          as described above.
 
                            _Legality Rules_
 
@@ -25031,6 +25815,15 @@ types, one of the following rules shall apply:
           whether the full type had discriminants is not visible to
           clients of the partial view.
 
+24.l.1/4
+          Discussion: {AI12-0095-1AI12-0095-1} We assume the worst in a
+          generic body whether or not a formal subtype has a constrained
+          partial view; specifically, in a generic body a discriminated
+          subtype is considered to have a constrained partial view if it
+          is a descendant of an untagged generic formal private or
+          derived type (see *note 12.5.1:: for the formal definition of
+          this rule).
+
 24.m/2
           Reason: These rules are designed to ensure that aliased array
           objects only need "dope" if their nominal subtype is
@@ -25042,18 +25835,16 @@ types, one of the following rules shall apply:
           implementation that represents an access value as a single
           pointer.)
 
-24.17/3
+24.17/4
              * {AI95-00251-01AI95-00251-01} {AI05-0148-1AI05-0148-1}
-               {AI05-0248-1AI05-0248-1} The accessibility level of the
+               {AI05-0248-1AI05-0248-1} {AI12-0027-1AI12-0027-1} The
+               accessibility level of the operand type shall not be
+               statically deeper than that of the target type, unless
+               the target type is an anonymous access type of a
+               stand-alone object.  If the target type is that of such a
+               stand-alone object, the accessibility level of the
                operand type shall not be statically deeper than that of
-               the target type, unless the target type is an anonymous
-               access type of a stand-alone object.  If the target type
-               is that of such a stand-alone object, the accessibility
-               level of the operand type shall not be statically deeper
-               than that of the declaration of the stand-alone object.
-               In addition to the places where Legality Rules normally
-               apply (see *note 12.3::), this rule applies also in the
-               private part of an instance of a generic unit.
+               the declaration of the stand-alone object.
 
 24.n/3
           Ramification: {AI05-0148-1AI05-0148-1} The access parameter
@@ -25088,17 +25879,14 @@ types, one of the following rules shall apply:
 
 24.20/3
              * {AI95-00251-01AI95-00251-01} {AI05-0239-1AI05-0239-1} The
-               designated profiles shall be subtype conformant.  
+               designated profiles shall be subtype conformant. 
 
-24.21/2
-             * {AI95-00251-01AI95-00251-01} The accessibility level of
-               the operand type shall not be statically deeper than that
-               of the target type.  In addition to the places where
-               Legality Rules normally apply (see *note 12.3::), this
-               rule applies also in the private part of an instance of a
-               generic unit.  If the operand type is declared within a
-               generic body, the target type shall be declared within
-               the generic body.
+24.21/4
+             * {AI95-00251-01AI95-00251-01} {AI12-0027-1AI12-0027-1} The
+               accessibility level of the operand type shall not be
+               statically deeper than that of the target type.  If the
+               operand type is declared within a generic body, the
+               target type shall be declared within the generic body.
 
 24.p/2
           Reason: The reason it is illegal to convert from an
@@ -25111,6 +25899,20 @@ types, one of the following rules shall apply:
           because the compiler can know about them at compile time of
           the instantiation.
 
+24.22/4
+{AI12-0027-1AI12-0027-1} In addition to the places where Legality Rules
+normally apply (see *note 12.3::), these rules apply also in the private
+part of an instance of a generic unit.
+
+24.q/4
+          Discussion: This applies to all of the Legality Rules in this
+          section.  It won't matter for the majority of these rules, but
+          in any case that it does, we want to apply the same recheck in
+          the private part.  (Ada got the default wrong for these, as
+          there is only one known case where we don't want to recheck in
+          the private part, see derivations without record extensions in
+          *note 3.4::.)
+
                           _Static Semantics_
 
 25
@@ -25131,7 +25933,7 @@ The nominal subtype of a type_conversion is its target 
subtype.
 28
 For the evaluation of a type_conversion that is a value conversion, the
 operand is evaluated, and then the value of the operand is converted to
-a corresponding value of the target type, if any.  If there is no value
+a corresponding value of the target type, if any. If there is no value
 of the target type that corresponds to the operand value,
 Constraint_Error is raised[; this can only happen on conversion to a
 modular type, and only when the operand value is outside the base range
@@ -25211,7 +26013,7 @@ of the modular type.]  Additional rules follow:
              * If the target subtype is an unconstrained array subtype,
                then the bounds of the result are obtained by converting
                each bound of the value of the operand to the
-               corresponding index type of the target type.  For each
+               corresponding index type of the target type. For each
                nonnull index range, a check is made that the bounds of
                the range belong to the corresponding index subtype.
 
@@ -25232,7 +26034,7 @@ of the modular type.]  Additional rules follow:
              * {AI95-00392-01AI95-00392-01} If the component types of
                the array types are anonymous access types, then a check
                is made that the accessibility level of the operand type
-               is not deeper than that of the target type.  
+               is not deeper than that of the target type. 
 
 39.b/2
           Reason: This check is needed for operands that are access
@@ -25251,7 +26053,7 @@ of the modular type.]  Additional rules follow:
           initialized.
 
 42
-             * [The tag of the result is that of the operand.]  If the
+             * [The tag of the result is that of the operand.] If the
                operand type is class-wide, a check is made that the tag
                of the operand identifies a (specific) type that is
                covered by or descended from the target type.
@@ -25313,7 +26115,7 @@ of the modular type.]  Additional rules follow:
                is not deeper than that of the declaration of the
                stand-alone object[; then if the check succeeds, the
                accessibility level of the target type becomes that of
-               the operand type].  
+               the operand type]. 
 
 48.a/3
           Ramification: {AI05-0148-1AI05-0148-1} This check is needed
@@ -25347,15 +26149,15 @@ of the modular type.]  Additional rules follow:
           Ramification: The checks are certain to succeed if the target
           and operand designated subtypes statically match.
 
-51/3
+51/4
 {AI95-00231-01AI95-00231-01} {AI05-0153-3AI05-0153-3}
-{AI05-0290-1AI05-0290-1} After conversion of the value to the target
-type, if the target subtype is constrained, a check is performed that
-the value satisfies this constraint.  If the target subtype excludes
-null, then a check is made that the value is not null.  If predicate
-checks are enabled for the target subtype (see *note 3.2.4::), a check
-is performed that the predicate of the target subtype is satisfied for
-the value.
+{AI05-0290-1AI05-0290-1} {AI12-0071-1AI12-0071-1} After conversion of
+the value to the target type, if the target subtype is constrained, a
+check is performed that the value satisfies this constraint.  If the
+target subtype excludes null, then a check is made that the value is not
+null.  If predicate checks are enabled for the target subtype (see *note
+3.2.4::), a check is performed that the value satisfies the predicates
+of the target subtype.
 
 51.a/2
           Ramification: {AI95-00231-01AI95-00231-01} The first check
@@ -25393,24 +26195,26 @@ The properties of this new view are as follows:
      object, after converting the assigned value to the subtype of the
      object (which might raise Constraint_Error); 
 
-56
-   * Reading the value of the view yields the result of converting the
-     value of the operand object to the target subtype (which might
-     raise Constraint_Error), except if the object is of an access type
-     and the view conversion is passed as an out parameter; in this
-     latter case, the value of the operand object is used to initialize
-     the formal parameter without checking against any constraint of the
-     target subtype (see *note 6.4.1::).  
-
-56.a
-          Reason: This ensures that even an out parameter of an access
-          type is initialized reasonably.
-
-57/3
-{AI05-0290-1AI05-0290-1} If an Accessibility_Check fails, Program_Error
-is raised.  If a predicate check fails, Assertions.Assertion_Error is
-raised.  Any other check associated with a conversion raises
-Constraint_Error if it fails.
+56/4
+   * {AI12-0074-1AI12-0074-1} Reading the value of the view yields the
+     result of converting the value of the operand object to the target
+     subtype (which might raise Constraint_Error), except if the object
+     is of an elementary type and the view conversion is passed as an
+     out parameter; in this latter case, the value of the operand object
+     may be used to initialize the formal parameter without checking
+     against any constraint of the target subtype (as described more
+     precisely in *note 6.4.1::). 
+
+56.a/4
+          Reason: {AI12-0074-1AI12-0074-1} This ensures that even an out
+          parameter of an elementary type is initialized reasonably.
+
+57/4
+{AI05-0290-1AI05-0290-1} {AI12-0096-1AI12-0096-1} If an
+Accessibility_Check fails, Program_Error is raised.  If a predicate
+check fails, the effect is as defined in subclause *note 3.2.4::, "*note
+3.2.4:: Subtype Predicates".  Any other check associated with a
+conversion raises Constraint_Error if it fails.
 
 58
 Conversion to a type is the same as conversion to an unconstrained
@@ -25428,10 +26232,38 @@ subtype of the type.
           to an unconstrained scalar subtype, can raise Constraint_Error
           if the value is outside the base range of the type.
 
+58.1/4
+{AI12-0027-1AI12-0027-1} Evaluation of a value conversion of a composite
+type either creates a new anonymous object[ (similar to the object
+created by the evaluation of an aggregate or a function call)] or yields
+a new view of the operand object without creating a new object:
+
+58.2/4
+   * If the target type is a by-reference type and there is a type that
+     is an ancestor of both the target type and the operand type then no
+     new object is created;
+
+58.3/4
+   * If the target type is an array type having aliased components and
+     the operand type is an array type having unaliased components, then
+     a new object is created;
+
+58.4/4
+   * Otherwise, it is unspecified whether a new object is created.
+
+58.5/4
+{AI12-0027-1AI12-0027-1} If a new object is created, then the
+initialization of that object is an assignment operation.
+
+58.b.1/4
+          Reason: This makes a difference in the case of converting from
+          an array type with unaliased components to one with aliased
+          components if the element type has a controlled part.
+
      NOTES
 
 59
-     19  In addition to explicit type_conversions, type conversions are
+     20  In addition to explicit type_conversions, type conversions are
      performed implicitly in situations where the expected type and the
      actual type of a construct differ, as is permitted by the type
      resolution rules (see *note 8.6::).  For example, an integer
@@ -25449,7 +26281,7 @@ subtype of the type.
      the constraints of the target subtype.
 
 61/2
-     20  {AI95-00230-01AI95-00230-01} A ramification of the overload
+     21  {AI95-00230-01AI95-00230-01} A ramification of the overload
      resolution rules is that the operand of an (explicit)
      type_conversion cannot be an allocator, an aggregate, a
      string_literal, a character_literal, or an attribute_reference for
@@ -25459,7 +26291,7 @@ subtype of the type.
      a type_conversion.
 
 62
-     21  The constraint of the target subtype has no effect for a
+     22  The constraint of the target subtype has no effect for a
      type_conversion of an elementary type passed as an out parameter.
      Hence, it is recommended that the first subtype be specified as the
      target to minimize confusion (a similar recommendation applies to
@@ -25685,6 +26517,55 @@ Examples of conversions between array types:
           so that predicate aspects (see *note 3.2.4::) are enforced on
           subtype conversion.
 
+                   _Incompatibilities With Ada 2012_
+
+71.x/4
+          {AI12-0095-1AI12-0095-1} Corrigendum: Because of a rule added
+          in *note 12.5.1::, the checks for the legality of an access
+          type conversion in a generic body were strengthened to use an
+          assume the worst rule.  This case is rather unlikely as a
+          formal private or derived type with discriminants is required
+          along with a conversion between two access types whose
+          designated types don't statically match, and any such programs
+          were at risk having objects disappear while valid access
+          values still pointed at them.
+
+                    _Wording Changes from Ada 2012_
+
+71.y/4
+          {AI12-0027-1AI12-0027-1} Corrigendum: Moved the generic
+          boilerplate so that it covers all Legality Rules in this
+          subclause.  This was always intended, but it is not expected
+          to change anything other than conversions between unrelated
+          arrays.
+
+71.z/4
+          {AI12-0027-1AI12-0027-1} Corrigendum: Added a formal
+          definition of the copy potentially created by a value
+          conversion of a composite type, so properties like
+          finalization and accessibility are properly defined.  This
+          model was always intended and expected (else *note 13.6::
+          would not work), but it was not previously formally defined.
+
+71.aa/4
+          {AI12-0071-1AI12-0071-1} Corrigendum: Updated wording of type
+          conversions to use the new term "satisfies the predicates"
+          (see *note 3.2.4::).
+
+71.bb/4
+          {AI12-0074-1AI12-0074-1} Corrigendum: Clarified the wording
+          describing the effect of view conversions of out parameters
+          such that it is clear that the detailed effect is defined in
+          *note 6.4.1::, not here.
+
+71.cc/4
+          {AI12-0096-1AI12-0096-1} Corrigendum: Updated wording of type
+          conversions so that the exception raise or other effect of a
+          failed predicate check is as defined in *note 3.2.4::; we
+          don't want to repeat those rules here.  This doesn't change
+          the behavior for predicate checks possible in original Ada
+          2012, only ones using the new aspect Predicate_Failure.
+
 
 File: aarm2012.info,  Node: 4.7,  Next: 4.8,  Prev: 4.6,  Up: 4
 
@@ -25694,7 +26575,7 @@ File: aarm2012.info,  Node: 4.7,  Next: 4.8,  Prev: 
4.6,  Up: 4
 1
 [A qualified_expression is used to state explicitly the type, and to
 verify the subtype, of an operand that is either an expression or an
-aggregate.  ]
+aggregate. ]
 
                                _Syntax_
 
@@ -25722,12 +26603,16 @@ subtype denoted by the subtype_mark.
 
                           _Dynamic Semantics_
 
-4
-The evaluation of a qualified_expression evaluates the operand (and if
-of a universal type, converts it to the type determined by the
-subtype_mark) and checks that its value belongs to the subtype denoted
-by the subtype_mark.  The exception Constraint_Error is raised if this
-check fails.
+4/4
+{AI12-0100-1AI12-0100-1} The evaluation of a qualified_expression
+evaluates the operand (and if of a universal type, converts it to the
+type determined by the subtype_mark) and checks that its value belongs
+to the subtype denoted by the subtype_mark. The exception
+Constraint_Error is raised if this check fails.  Furthermore, if
+predicate checks are enabled for the subtype denoted by the
+subtype_mark, a check is performed as defined in subclause *note
+3.2.4::, "*note 3.2.4:: Subtype Predicates" that the value satifies the
+predicates of the subtype.
 
 4.a
           Ramification: This is one of the few contexts in Ada 95 where
@@ -25735,6 +26620,11 @@ check fails.
           constraint check, and hence no "sliding" of array bounds is
           provided.
 
+4.a.1/4
+          {AI12-0100-1AI12-0100-1} The effect of a failed predicate
+          check is as defined in *note 3.2.4::; such a check could raise
+          any exception, not just Constraint_Error or Assertion_Error.
+
 4.b
           Reason: Implicit subtype conversion is not provided because a
           qualified_expression with a constrained target subtype is
@@ -25743,10 +26633,15 @@ check fails.
           type_conversion can be used rather than a qualified_expression
           if subtype conversion is desired.
 
+4.c/4
+          {AI12-0100-1AI12-0100-1} We do a predicate check here so that
+          a qualified_expression never allows something that the
+          equivalent type_conversion would not allow.
+
      NOTES
 
 5
-     22  When a given context does not uniquely identify an expected
+     23  When a given context does not uniquely identify an expected
      type, a qualified_expression can be used to do so.  In particular,
      if an overloaded name or aggregate is passed to an overloaded
      subprogram, it might be necessary to qualify the operand to resolve
@@ -25779,6 +26674,19 @@ Examples of disambiguating expressions using 
qualification:
           {AI05-0003-1AI05-0003-1} Added a definition of the nominal
           subtype of a qualified_expression.
 
+                    _Inconsistencies With Ada 2012_
+
+10.b/4
+          {AI12-0100-1AI12-0100-1} Corrigendum: A qualified_expression
+          now performs a predicate check for the named subtype (if it is
+          enabled).  Original Ada 2012 did not include that check (an
+          omission).  While this is formally inconsistent (an exception
+          could be raised when none would be raised by original Ada
+          2012), cases when this could be the case are likely to be rare
+          (the qualified expression would have to have a stricter
+          subtype than the following usage) and the check is more likely
+          to detect bugs than be unexpected.
+
 
 File: aarm2012.info,  Node: 4.8,  Next: 4.9,  Prev: 4.7,  Up: 4
 
@@ -25787,7 +26695,7 @@ File: aarm2012.info,  Node: 4.8,  Next: 4.9,  Prev: 
4.7,  Up: 4
 
 1
 [The evaluation of an allocator creates an object and yields an access
-value that designates the object.  ]
+value that designates the object. ]
 
                                _Syntax_
 
@@ -25840,12 +26748,12 @@ identify a subpool, declared in package 
System.Storage_Pools.Subpools
                            _Legality Rules_
 
 4
-An initialized allocator is an allocator with a qualified_expression.
-An uninitialized allocator is one with a subtype_indication.  In the
+An initialized allocator is an allocator with a qualified_expression. An
+uninitialized allocator is one with a subtype_indication.  In the
 subtype_indication of an uninitialized allocator, a constraint is
 permitted only if the subtype_mark denotes an [unconstrained] composite
 subtype; if there is no constraint, then the subtype_mark shall denote a
-definite subtype.  
+definite subtype. 
 
 4.a
           Ramification: For example, ...  new S'Class ...  (with no
@@ -25960,7 +26868,7 @@ composite, then the subtype of the created object is 
the designated
 subtype when the designated subtype is constrained or there is an
 ancestor of the designated type that has a constrained partial view;
 otherwise, the created object is constrained by its initial value [(even
-if the designated subtype is unconstrained with defaults)].  
+if the designated subtype is unconstrained with defaults)]. 
 
 6.a
           Discussion: See AI83-00331.
@@ -25992,9 +26900,9 @@ if the designated subtype is unconstrained with 
defaults)].
 7/2
 {AI95-00373-01AI95-00373-01} For the evaluation of an initialized
 allocator, the evaluation of the qualified_expression is performed
-first.  An object of the designated type is created and the value of the
+first. An object of the designated type is created and the value of the
 qualified_expression is converted to the designated subtype and assigned
-to the object.  
+to the object. 
 
 7.a
           Ramification: The conversion might raise Constraint_Error.
@@ -26014,9 +26922,9 @@ subtype_indication is performed first.  Then:
      an object of the designated type is created with tag, if any,
      determined by the subtype_mark of the subtype_indication.  This
      object is then initialized by default (see *note 3.3.1::) using the
-     subtype_indication to determine its nominal subtype.  A check is
+     subtype_indication to determine its nominal subtype. A check is
      made that the value of the object belongs to the designated
-     subtype.  Constraint_Error is raised if this check fails.  This
+     subtype. Constraint_Error is raised if this check fails.  This
      check and the initialization of the object are performed in an
      arbitrary order.
 
@@ -26036,7 +26944,7 @@ tag of the value if the type of the 
qualified_expression is class-wide)
 has one or more access discriminants, then a check is made that the
 accessibility level of the anonymous access type of each access
 discriminant is not deeper than that of the type of the allocator.
-Program_Error is raised if either such check fails.  
+Program_Error is raised if either such check fails. 
 
 10.b/3
           Reason: {AI95-00344-01AI95-00344-01} {AI05-0024-1AI05-0024-1}
@@ -26077,7 +26985,7 @@ Program_Error is raised if either such check fails.
 {AI95-00280-01AI95-00280-01} If the object to be created by an allocator
 has a controlled or protected part, and the finalization of the
 collection of the type of the allocator (see *note 7.6.1::) has started,
-Program_Error is raised.  
+Program_Error is raised. 
 
 10.d/2
           Reason: If the object has a controlled or protected part, its
@@ -26100,7 +27008,7 @@ Program_Error is raised.
 {AI95-00280-01AI95-00280-01} If the object to be created by an allocator
 contains any tasks, and the master of the type of the allocator is
 completed, and all of the dependent tasks of the master are terminated
-(see *note 9.3::), then Program_Error is raised.  
+(see *note 9.3::), then Program_Error is raised. 
 
 10.f/2
           Reason: A task created after waiting for tasks has finished
@@ -26111,7 +27019,7 @@ completed, and all of the dependent tasks of the master 
are terminated
 {AI05-0111-3AI05-0111-3} If the allocator includes a
 subpool_handle_name, Constraint_Error is raised if the subpool handle is
 null.  Program_Error is raised if the subpool does not belong (see *note
-13.11.4::) to the storage pool of the access type of the allocator.  
+13.11.4::) to the storage pool of the access type of the allocator. 
 
 10.g/3
           Implementation Note: This can be implemented by comparing the
@@ -26147,24 +27055,24 @@ the allocation proceeds normally.
      NOTES
 
 12
-     23  Allocators cannot create objects of an abstract type.  See
+     24  Allocators cannot create objects of an abstract type.  See
      *note 3.9.3::.
 
 13
-     24  If any part of the created object is controlled, the
+     25  If any part of the created object is controlled, the
      initialization includes calls on corresponding Initialize or Adjust
      procedures.  See *note 7.6::.
 
 14
-     25  As explained in *note 13.11::, "*note 13.11:: Storage
+     26  As explained in *note 13.11::, "*note 13.11:: Storage
      Management", the storage for an object allocated by an allocator
-     comes from a storage pool (possibly user defined).  The exception
+     comes from a storage pool (possibly user defined). The exception
      Storage_Error is raised by an allocator if there is not enough
      storage.  Instances of Unchecked_Deallocation may be used to
      explicitly reclaim storage.
 
 15/3
-     26  {AI05-0229-1AI05-0229-1} Implementations are permitted, but not
+     27  {AI05-0229-1AI05-0229-1} Implementations are permitted, but not
      required, to provide garbage collection.
 
 15.a
@@ -26353,7 +27261,7 @@ Certain expressions of a scalar or string type are 
defined to be static.
 Similarly, certain discrete ranges are defined to be static, and certain
 scalar and string subtypes are defined to be static subtypes.  [ Static
 means determinable at compile time, using the declared properties or
-values of the program entities.]  
+values of the program entities.] 
 
 1.a
           Discussion: As opposed to more elaborate data flow analysis,
@@ -26456,12 +27364,13 @@ the following:
           Reason: Adding qualification to an expression shouldn't make
           it nonstatic, even for strings.
 
-11/3
-   * {AI05-0158-1AI05-0158-1} {AI05-0269-1AI05-0269-1} a membership test
-     whose simple_expression is a static expression, and whose
+11/4
+   * {AI05-0158-1AI05-0158-1} {AI05-0269-1AI05-0269-1}
+     {AI12-0039-1AI12-0039-1} a membership test whose
+     tested_simple_expression is a static expression, and whose
      membership_choice_list consists only of membership_choices that are
-     either static choice_expressions, static ranges, or subtype_marks
-     that denote a static [(scalar or string)] subtype;
+     either static choice_simple_expressions, static ranges, or
+     subtype_marks that denote a static [(scalar or string)] subtype;
 
 11.a
           Reason: Clearly, we should allow membership tests in exactly
@@ -26571,18 +27480,17 @@ the implementation.
 25
 A static range is a range whose bounds are static expressions, [or a
 range_attribute_reference (*note 4.1.4: S0102.) that is equivalent to
-such a range.]  A static discrete_range (*note 3.6.1: S0058.) is one
-that is a static range or is a subtype_indication (*note 3.2.2: S0027.)
-that defines a static scalar subtype.  The base range of a scalar type
-is a static range, unless the type is a descendant of a formal scalar
-type.
+such a range.] A static discrete_range (*note 3.6.1: S0058.) is one that
+is a static range or is a subtype_indication (*note 3.2.2: S0027.) that
+defines a static scalar subtype.  The base range of a scalar type is a
+static range, unless the type is a descendant of a formal scalar type.
 
 26/3
 {AI95-00263-01AI95-00263-01} {AI05-0153-3AI05-0153-3} A static subtype
-is either a static scalar subtype or a static string subtype.  A static
+is either a static scalar subtype or a static string subtype. A static
 scalar subtype is an unconstrained scalar subtype whose type is not a
 descendant of a formal type, or a constrained scalar subtype formed by
-imposing a compatible static constraint on a static scalar subtype.  A
+imposing a compatible static constraint on a static scalar subtype. A
 static string subtype is an unconstrained string subtype whose index
 subtype and component subtype are static, or a constrained string
 subtype formed by imposing a compatible static constraint on a static
@@ -26706,13 +27614,13 @@ is part of:
      selecting_expression is static and whose value is not covered by
      the corresponding discrete_choice_list; or
 
-32.6/3
-   * {AI05-0158-1AI05-0158-1} a choice_expression (or a
-     simple_expression of a range that occurs as a membership_choice of
-     a membership_choice_list) of a static membership test that is
-     preceded in the enclosing membership_choice_list by another item
-     whose individual membership test (see *note 4.5.2::) statically
-     yields True.
+32.6/4
+   * {AI05-0158-1AI05-0158-1} {AI12-0039-1AI12-0039-1} a
+     choice_simple_expression (or a simple_expression of a range that
+     occurs as a membership_choice of a membership_choice_list) of a
+     static membership test that is preceded in the enclosing
+     membership_choice_list by another item whose individual membership
+     test (see *note 4.5.2::) statically yields True.
 
 33/3
 {AI05-0147-1AI05-0147-1} A static expression is evaluated at compile
@@ -26859,7 +27767,7 @@ default rounding for the target system.
      NOTES
 
 39
-     27  An expression can be static even if it occurs in a context
+     28  An expression can be static even if it occurs in a context
      where staticness is not required.
 
 39.a
@@ -26879,7 +27787,7 @@ default rounding for the target system.
           aggregate, allocator.
 
 40
-     28  A static (or run-time) type_conversion from a real type to an
+     29  A static (or run-time) type_conversion from a real type to an
      integer type performs rounding.  If the operand value is exactly
      half-way between two integers, the rounding is performed away from
      zero.
@@ -27157,7 +28065,7 @@ corresponding bounds.
 {AI05-0086-1AI05-0086-1} {AI05-0153-3AI05-0153-3} A constraint is
 statically compatible with a scalar subtype if it statically matches the
 constraint of the subtype, or if both are static and the constraint is
-compatible with the subtype.  A constraint is statically compatible with
+compatible with the subtype. A constraint is statically compatible with
 an access or composite subtype if it statically matches the constraint
 of the subtype, or if the subtype is unconstrained.
 
@@ -27190,9 +28098,10 @@ compatible with a subtype S2 if:
              * all predicate specifications that apply to S2 apply also
                to S1, or
 
-10/3
-             * both subtypes are static, every value that satisfies the
-               predicate of S1 also satisfies the predicate of S2, and
+10/4
+             * {AI05-0290-1AI05-0290-1} {AI12-0071-1AI12-0071-1} both
+               subtypes are static, every value that satisfies the
+               predicates of S1 also satisfies the predicates of S2, and
                it is not the case that both types each have at least one
                applicable predicate specification, predicate checks are
                enabled (see *note 11.4.2::) for S2, and predicate checks
@@ -27232,6 +28141,13 @@ compatible with a subtype S2 if:
           static matching and static compatibility to take predicate
           aspects (see *note 3.2.4::) into account.
 
+                    _Wording Changes from Ada 2012_
+
+10.f/4
+          {AI12-0071-1AI12-0071-1} Corrigendum: Updated wording of
+          static compatibility to use the new term "satisfies the
+          predicates" (see *note 3.2.4::).
+
 
 File: aarm2012.info,  Node: 5,  Next: 6,  Prev: 4,  Up: Top
 
@@ -27252,7 +28168,7 @@ S0227.)s, accept_statement (*note 9.5.2: S0219.)s, 
select_statement
 (*note 9.7: S0230.)s, and abort_statement (*note 9.8: S0245.)s are
 described in *note 9::, "*note 9:: Tasks and Synchronization".
 Raise_statement (*note 11.3: S0269.)s are described in *note 11::,
-"*note 11:: Exceptions", and code_statement (*note 13.8: S0317.)s in
+"*note 11:: Exceptions", and code_statement (*note 13.8: S0318.)s in
 *note 13::.  The remaining forms of statements are presented in this
 clause.]
 
@@ -27542,9 +28458,9 @@ the result of evaluating an expression.]
 3
 The execution of an assignment_statement includes the evaluation of the
 expression and the assignment of the value of the expression into the
-target.  [An assignment operation (as opposed to an assignment_statement
+target. [An assignment operation (as opposed to an assignment_statement
 (*note 5.2: S0152.)) is performed in other contexts as well, including
-object initialization and by-copy parameter passing.]  The target of an
+object initialization and by-copy parameter passing.] The target of an
 assignment operation is the view of the object to which a value is being
 assigned; the target of an assignment_statement (*note 5.2: S0152.) is
 the variable denoted by the variable_name.
@@ -27569,7 +28485,7 @@ the variable denoted by the variable_name.
 
 4/2
 {AI95-00287-01AI95-00287-01} The variable_name of an
-assignment_statement is expected to be of any type.  The expected type
+assignment_statement is expected to be of any type. The expected type
 for the expression is the type of the target.
 
 4.a
@@ -27646,7 +28562,7 @@ When the type of the target is class-wide:
 
 11
 The value of the expression is converted to the subtype of the target.
-[The conversion might raise an exception (see *note 4.6::).]  
+[The conversion might raise an exception (see *note 4.6::).] 
 
 11.a
           Ramification: *note 4.6::, "*note 4.6:: Type Conversions"
@@ -27674,7 +28590,7 @@ the target, which consists of the following two steps:
 
 14/3
    * {AI05-0299-1AI05-0299-1} If any part of the target is controlled,
-     its value is adjusted as explained in subclause *note 7.6::.  
+     its value is adjusted as explained in subclause *note 7.6::. 
 
 14.a
           Ramification: If any parts of the object are controlled, abort
@@ -27718,9 +28634,9 @@ Examples of assignment statements:
      Next_Frame(F)(M, N) := 2.5;        --  see *note 4.1.1::
      U := Dot_Product(V, W);            --  see *note 6.3::
 
-20
-     Writer := (Status => Open, Unit => Printer, Line_Count => 60);  -- see 
*note 3.8.1::
-     Next_Car.all := (72074, null);    --  see *note 3.10.1::
+20/4
+     {AI12-0056-1AI12-0056-1} Writer := (Status => Open, Unit => Printer, 
Line_Count => 60);  -- see *note 3.8.1::
+     Next.all := (72074, null, Head);   --  see *note 3.10.1::
 
 21
 Examples involving scalar subtype conversions:
@@ -27911,7 +28827,7 @@ of an expression.]
 
 4/3
 {AI05-0188-1AI05-0188-1} The selecting_expression is expected to be of
-any discrete type.  The expected type for each discrete_choice is the
+any discrete type. The expected type for each discrete_choice is the
 type of the selecting_expression.
 
                            _Legality Rules_
@@ -27932,16 +28848,16 @@ follows:
           here and in the following rules is that of the term "cover a
           value" that is defined in *note 3.8.1::.
 
-7/3
+7/4
    * {AI05-0003-1AI05-0003-1} {AI05-0153-3AI05-0153-3}
-     {AI05-0188-1AI05-0188-1} {AI05-0262-1AI05-0262-1} If the
-     selecting_expression is a name [(including a type_conversion,
-     qualified_expression, or function_call)] having a static and
-     constrained nominal subtype, then each non-others discrete_choice
-     shall cover only values in that subtype that satisfy its predicate
-     (see *note 3.2.4::), and each value of that subtype that satisfies
-     its predicate shall be covered by some discrete_choice [(either
-     explicitly or by others)].
+     {AI05-0188-1AI05-0188-1} {AI05-0262-1AI05-0262-1}
+     {AI12-0071-1AI12-0071-1} If the selecting_expression is a name
+     [(including a type_conversion, qualified_expression, or
+     function_call)] having a static and constrained nominal subtype,
+     then each non-others discrete_choice shall cover only values in
+     that subtype that satisfy its predicates (see *note 3.2.4::), and
+     each value of that subtype that satisfies its predicates shall be
+     covered by some discrete_choice [(either explicitly or by others)].
 
 7.a
           Ramification: Although not official names of objects, a value
@@ -28177,6 +29093,13 @@ Examples of case statements:
           this wording consistent with case_expression, and to clarify
           which expression is being talked about in the wording.
 
+                    _Wording Changes from Ada 2012_
+
+18.l/4
+          {AI12-0071-1AI12-0071-1} Corrigendum: Updated wording of case
+          coverage to use the new term "satisfies the predicates" (see
+          *note 3.2.4::).
+
 
 File: aarm2012.info,  Node: 5.5,  Next: 5.6,  Prev: 5.4,  Up: 5
 
@@ -28233,21 +29156,21 @@ condition is True, the sequence_of_statements (*note 
5.1: S0145.) is
 executed; if False, the execution of the loop_statement (*note 5.5:
 S0156.) is complete.
 
-9/3
-{AI05-0139-2AI05-0139-2} {AI05-0262-1AI05-0262-1} For the execution of a
-loop_statement with the iteration_scheme being for
-loop_parameter_specification (*note 5.5: S0158.), the
-loop_parameter_specification (*note 5.5: S0158.) is first elaborated.
-This elaboration creates the loop parameter and elaborates the
-discrete_subtype_definition (*note 3.6: S0055.).  If the
+9/4
+{AI05-0139-2AI05-0139-2} {AI05-0262-1AI05-0262-1}
+{AI12-0071-1AI12-0071-1} For the execution of a loop_statement with the
+iteration_scheme being for loop_parameter_specification (*note 5.5:
+S0158.), the loop_parameter_specification (*note 5.5: S0158.) is first
+elaborated.  This elaboration creates the loop parameter and elaborates
+the discrete_subtype_definition (*note 3.6: S0055.).  If the
 discrete_subtype_definition (*note 3.6: S0055.) defines a subtype with a
 null range, the execution of the loop_statement is complete.  Otherwise,
 the sequence_of_statements (*note 5.1: S0145.) is executed once for each
 value of the discrete subtype defined by the discrete_subtype_definition
-(*note 3.6: S0055.) that satisfies the predicate of the subtype (or
-until the loop is left as a consequence of a transfer of control).
-Prior to each such iteration, the corresponding value of the discrete
-subtype is assigned to the loop parameter.  These values are assigned in
+(*note 3.6: S0055.) that satisfies the predicates of the subtype (or
+until the loop is left as a consequence of a transfer of control). Prior
+to each such iteration, the corresponding value of the discrete subtype
+is assigned to the loop parameter.  These values are assigned in
 increasing order unless the reserved word reverse is present, in which
 case the values are assigned in decreasing order.
 
@@ -28375,6 +29298,13 @@ Example of a loop statement with a name:
           are allowed in for loops; these are documented as an extension
           in the appropriate subclause.
 
+                    _Wording Changes from Ada 2012_
+
+21.c/4
+          {AI12-0071-1AI12-0071-1} Corrigendum: Updated wording of loop
+          execution to use the new term "satisfies the predicates" (see
+          *note 3.2.4::).
+
 * Menu:
 
 * 5.5.1 ::    User-Defined Iterator Types
@@ -28475,6 +29405,15 @@ an object of a reversible iterable container type.
           user-defined behavior for iteration, via the Default_Iterator
           and Iterator_Element aspects.
 
+11.1/4
+{AI12-0138-1AI12-0138-1} The Default_Iterator and Iterator_Element
+aspects are nonoverridable (see *note 13.1.1::).
+
+11.a/4
+          Reason: This ensures that all descendants of an iterable
+          container type have aspects with the same properties.  This
+          prevents generic contract problems with formal derived types.
+
                            _Legality Rules_
 
 12/3
@@ -28535,6 +29474,16 @@ This function (if any) is the default variable 
indexing function for T.
           {AI05-0139-2AI05-0139-2} User-defined iterator types are new
           in Ada 2012.
 
+                   _Incompatibilities With Ada 2012_
+
+21.b/4
+          {AI12-0138-1AI12-0138-1} Corrigendum: Defined Default_Iterator
+          and Iterator_Element to be nonoveridable, which makes
+          redefinitions and hiding of these aspects illegal.  It's
+          possible that some program could violate one of these new
+          restrictions, but in most cases this can easily be worked
+          around by using overriding rather than redefinition.
+
 
 File: aarm2012.info,  Node: 5.5.2,  Prev: 5.5.1,  Up: 5.5
 
@@ -28581,12 +29530,13 @@ of a reversible iterator type.  In a reverse 
container element iterator,
 the default iterator type for the type of the iterable_name shall be a
 reversible iterator type.
 
-5/3
-{AI05-0139-2AI05-0139-2} The type of the subtype_indication, if any, of
-an array component iterator shall cover the component type of the type
-of the iterable_name.  The type of the subtype_indication, if any, of a
-container element iterator shall cover the default element type for the
-type of the iterable_name.
+5/4
+{AI05-0139-2AI05-0139-2} {AI12-0151-1AI12-0151-1} The subtype defined by
+the subtype_indication, if any, of an array component iterator shall
+statically match the component subtype of the type of the iterable_name.
+The subtype defined by the subtype_indication, if any, of a container
+element iterator shall statically match the default element subtype for
+the type of the iterable_name.
 
 6/3
 {AI05-0139-2AI05-0139-2} In a container element iterator whose
@@ -28594,6 +29544,44 @@ iterable_name has type T, if the iterable_name denotes 
a constant or the
 Variable_Indexing aspect is not specified for T, then the
 Constant_Indexing aspect shall be specified for T.
 
+6.1/4
+{AI12-0047-1AI12-0047-1} The iterator_name or iterable_name of an
+iterator_specification shall not denote a subcomponent that depends on
+discriminants of an object whose nominal subtype is unconstrained,
+unless the object is known to be constrained.
+
+6.a/4
+          Reason: This is the same rule that applies to renames; it
+          serves the same purpose of preventing the object from
+          disappearing while the iterator is still using it.
+
+6.2/4
+{AI12-0120-1AI12-0120-1} A container element iterator is illegal if the
+call of the default iterator function that creates the loop iterator
+(see below) is illegal.
+
+6.b/4
+          Ramification: This can happen if the parameter to the default
+          iterator function is in out and the iterable_name is a
+          constant.  The wording applies to any reason that the call
+          would be illegal, as it's possible that one of the default
+          parameters would be illegal, or that some accessibility check
+          would fail.
+
+6.3/4
+{AI12-0120-1AI12-0120-1} A generalized iterator is illegal if the
+iteration cursor subtype of the iterator_name is a limited type at the
+point of the generalized iterator.  A container element iterator is
+illegal if the default cursor subtype of the type of the iterable_name
+is a limited type at the point of the container element iterator.
+
+6.c/4
+          Reason: If the cursor type is limited, the assignment to the
+          loop parameter for a generalized iterator would be illegal.
+          The same is true for a container element iterator.  We have to
+          say "at the point of the iterator" as the limitedness of a
+          type can change due to visibility.
+
                           _Static Semantics_
 
 7/3
@@ -28619,6 +29607,17 @@ iterator, the loop parameter is a constant if the 
iterable_name denotes
 a constant, or if the Variable_Indexing aspect is not specified for the
 type of the iterable_name; otherwise it is a variable.
 
+8.a/4
+          Ramification: {AI12-0093-1AI12-0093-1} The loop parameter of a
+          generalized iterator has the same accessibility as the loop
+          statement.  This means that the loop parameter object is
+          finalized when the loop statement is left.  (It also may be
+          finalized as part of assigning a new value to the loop
+          parameter.)  For array component iterators and container
+          element iterators, the loop parameter directly denotes an
+          element of the array or container and has the accessibility of
+          the associated array or container.
+
                           _Dynamic Semantics_
 
 9/3
@@ -28642,6 +29641,18 @@ False, or the loop is left as a consequence of a 
transfer of control.
 For a reverse generalized iterator, the operations Last and Previous are
 called rather than First and Next.
 
+10.a/4
+          Ramification: {AI12-0093-1AI12-0093-1} The loop parameter of a
+          generalized iterator is a variable of which the user only has
+          a constant view.  It follows the normal rules for a variable
+          of its nominal subtype.  In particular, if the nominal subtype
+          is indefinite, the variable is constrained by its initial
+          value.  Similarly, if the nominal subtype is class-wide, the
+          variable (like all variables) has the tag of the initial
+          value.  Constraint_Error may be raised by a subsequent
+          iteration if Next or Previous return an object with a
+          different tag or constraint.
+
 11/3
 {AI05-0139-2AI05-0139-2} {AI05-0292-1AI05-0292-1} For an array component
 iterator, the iterable_name is evaluated and the denoted array object
@@ -28690,25 +29701,88 @@ then the indexing uses the default constant indexing 
function for the
 type of the iterable container object for the loop; otherwise it uses
 the default variable indexing function.
 
+14/4
+{AI12-0120-1AI12-0120-1} Any exception propagated by the execution of a
+generalized iterator or container element iterator is propagated by the
+immediately enclosing loop statement.
+
+14.a/4
+          Ramification: This text covers exceptions raised by called
+          functions that make up the execution of the iterator as well
+          as exceptions raised by the assignment to the loop parameter
+          or cursor.
+
                               _Examples_
 
-14/3
+15/3
      {AI05-0269-1AI05-0269-1} -- Array component iterator example:
      for Element of Board loop  -- See *note 3.6.1::.
         Element := Element * 2.0; -- Double each element of Board, a 
two-dimensional array.
      end loop;
 
-15/3
+16/3
 {AI05-0268-1AI05-0268-1} For examples of use of generalized iterators,
 see *note A.18.32:: and the corresponding container packages in *note
 A.18.2:: and *note A.18.3::.
 
                        _Extensions to Ada 2005_
 
-15.a/3
+16.a/3
           {AI05-0139-2AI05-0139-2} Generalized forms of loop iteration
           are new.
 
+                   _Incompatibilities With Ada 2012_
+
+16.b/4
+          {AI12-0047-1AI12-0047-1} Corrigendum: Added a rule to ensure
+          that the object being iterated cannot be a component that
+          could disappear before the loop completes.  This could be
+          incompatible by making a loop that was legal (and worked
+          correctly, so long as the enclosing object is not modified
+          during the loop) from the original Ada 2012 illegal in
+          corrected Ada 2012.  Such loops should be pretty rare,
+          especially as these iterator forms are new to Ada 2012.
+
+16.c/4
+          {AI12-0120-1AI12-0120-1} Corrigendum: Added rules to reject
+          loops if the call to the default iterator function for a
+          container element iterator is illegal, or if the cursor type
+          of an iterator is limited.  These are formally incompatible
+          with original Ada 2012, but as it's unlikely that any Ada 2012
+          compiler ever allowed the illegal usages in an expansion of a
+          loop (it's much more likely that they would have just caused
+          an internal error in the compiler), this should have no effect
+          in practice.
+
+16.d/4
+          {AI12-0151-1AI12-0151-1} Corrigendum: Added a requirement that
+          the given subtype statically match the subtype of the element
+          or component for a component element iterator or array
+          component iterator.  Original Ada 2012 text allowed any type
+          that covered the subtype of the element or component, but that
+          led to questions of what the meaning was if they are
+          different.  In this case, the element is essentially a
+          renaming of the container element, and it doesn't make sense
+          for the constraints to be different.  Ignoring explicitly
+          defined constraints in renames is a mistake that we don't want
+          to continue, thus we require static matching.  This means that
+          some programs might be illegal, but those programs were
+          misleading at best, and potentially would raise unexpected
+          exceptions because the element values might have been invalid
+          or abnormal with respect to the declared constraint.
+
+                    _Wording Changes from Ada 2012_
+
+16.e/4
+          {AI12-0120-1AI12-0120-1} Corrigendum: Added wording to specify
+          that a loop propagates any exceptions propagated by the
+          execution of an iterator.  Since that's what naturally would
+          happen from a macro-style expansion of the parts of an
+          iterator, and no other interpretation makes sense given the
+          way the rest of Ada works, we consider it so unlikely that any
+          Ada 2012 implementation ever did anything else that we don't
+          document this as a possible inconsistency.
+
 
 File: aarm2012.info,  Node: 5.6,  Next: 5.7,  Prev: 5.5,  Up: 5
 
@@ -28962,8 +30036,8 @@ and enumeration literals are functions.]
 
 2/3
 {AI05-0299-1AI05-0299-1} A callable entity is a subprogram or entry (see
-Section 9).  A callable entity is invoked by a call; that is, a
-subprogram call or entry call.  A callable construct is a construct that
+Section 9). A callable entity is invoked by a call; that is, a
+subprogram call or entry call. A callable construct is a construct that
 defines the action of a call upon a callable entity: a subprogram_body,
 entry_body, or accept_statement.
 
@@ -29084,9 +30158,9 @@ File: aarm2012.info,  Node: 6.1,  Next: 6.2,  Up: 6
 17
 A formal parameter is an object [directly visible within a
 subprogram_body] that represents the actual parameter passed to the
-subprogram in a call; it is declared by a parameter_specification.  For
-a formal parameter, the expected type for its default_expression, if
-any, is that of the formal parameter.  
+subprogram in a call; it is declared by a parameter_specification. For a
+formal parameter, the expected type for its default_expression, if any,
+is that of the formal parameter. 
 
                            _Legality Rules_
 
@@ -29160,7 +30234,7 @@ null_exclusion and the subtype_mark, or defined by the
 access_definition, in the parameter_specification.  The nominal subtype
 of a function result is the subtype determined by the optional
 null_exclusion and the subtype_mark, or defined by the
-access_definition, in the parameter_and_result_profile.  
+access_definition, in the parameter_and_result_profile. 
 
 23.1/3
 {AI05-0142-4AI05-0142-4} An explicitly aliased parameter is a formal
@@ -29170,7 +30244,7 @@ aliased.
 24/2
 {AI95-00231-01AI95-00231-01} {AI95-00254-01AI95-00254-01}
 {AI95-00318-02AI95-00318-02} An access parameter is a formal in
-parameter specified by an access_definition.  An access result type is a
+parameter specified by an access_definition. An access result type is a
 function result type specified by an access_definition.  An access
 parameter or result type is of an anonymous access type (see *note
 3.10::).  [Access parameters of an access-to-object type allow
@@ -29274,10 +30348,12 @@ Examples of subprogram declarations:
 38
      function Random return Probability;                      --  see *note 
3.5.7::
 
-39
-     function Min_Cell(X : Link) return Cell;                 --  see *note 
3.10.1::
+39/4
+     {AI12-0056-1AI12-0056-1} function Min_Cell(X : Link) return Cell;         
        --  see *note 3.10.1::
      function Next_Frame(K : Positive) return Frame;          --  see *note 
3.10::
      function Dot_Product(Left, Right : Vector) return Real;  --  see *note 
3.6::
+     function Find(B : aliased in out Barrel; Key : String) return Real;
+                                                              --  see *note 
4.1.5::
 
 40
      function "*"(Left, Right : Matrix) return Matrix;        --  see *note 
3.6::
@@ -29391,10 +30467,21 @@ File: aarm2012.info,  Node: 6.1.1,  Up: 6.1
 6.1.1 Preconditions and Postconditions
 --------------------------------------
 
-1/3
-{AI05-0145-2AI05-0145-2} {AI05-0247-1AI05-0247-1} For a subprogram or
-entry, the following language-defined aspects may be specified with an
-aspect_specification (see *note 13.1.1::):
+1/4
+{AI05-0145-2AI05-0145-2} {AI05-0247-1AI05-0247-1}
+{AI12-0045-1AI12-0045-1} For a noninstance subprogram, a generic
+subprogram, or an entry, the following language-defined aspects may be
+specified with an aspect_specification (see *note 13.1.1::):
+
+1.a/4
+          Ramification: {AI12-0045-1AI12-0045-1} "Noninstance
+          subprogram" excludes a subprogram that is an instance of a
+          generic subprogram.  In that case, the aspects should be
+          specified on the generic subprogram.  If preconditions or
+          postconditions need to be added to an instance of a generic
+          subprogram, it can be accomplished by creating a separate
+          subprogram specification and then completing that
+          specification with a renames-as-body of the instance.
 
 2/3
 Pre
@@ -29475,14 +30562,23 @@ Post
 {AI05-0145-2AI05-0145-2} The expected type for a precondition or
 postcondition expression is any boolean type.
 
-7/3
-{AI05-0145-2AI05-0145-2} {AI05-0262-1AI05-0262-1} Within the expression
-for a Pre'Class or Post'Class aspect for a primitive subprogram of a
-tagged type T, a name that denotes a formal parameter of type T is
-interpreted as having type T'Class.  Similarly, a name that denotes a
-formal access parameter of type access-to-T is interpreted as having
-type access-to-T'Class.  [This ensures that the expression is
-well-defined for a primitive subprogram of a type descended from T.]
+7/4
+{AI05-0145-2AI05-0145-2} {AI05-0262-1AI05-0262-1}
+{AI12-0113-1AI12-0113-1} {AI12-0159-1AI12-0159-1} Within the expression
+for a Pre'Class or Post'Class aspect for a primitive subprogram S of a
+tagged type T, a name that denotes a formal parameter (or S'Result) of
+type T is interpreted as though it had a (notional) type NT that is a
+formal derived type whose ancestor type is T, with directly visible
+primitive operations.  Similarly, a name that denotes a formal access
+parameter (or S'Result) of type access-to-T is interpreted as having
+type access-to-NT. [The result of this interpretation is that the only
+operations that can be applied to such names are those defined for such
+a formal derived type.]
+
+7.a/4
+          Reason: {AI12-0159-1AI12-0159-1} This ensures that the
+          expression is well-defined for any primitive subprogram of a
+          type descended from T.
 
 8/3
 {AI05-0145-2AI05-0145-2} {AI05-0264-1AI05-0264-1} For an
@@ -29602,13 +30698,80 @@ conforms to some class-wide precondition expression 
that applies to S1.
           Ramification: This only applies to primitives of tagged types;
           other routines cannot have class-wide preconditions.
 
+17.1/4
+{AI12-0131-1AI12-0131-1} Pre'Class shall not be specified for an
+overriding primitive subprogram of a tagged type T unless the Pre'Class
+aspect is specified for the corresponding primitive subprogram of some
+ancestor of T.
+
+17.c/4
+          Reason: Any such Pre'Class will have no effect, as it will be
+          ored with True.  As such, it is highly misleading for readers,
+          especially for those who are determining the assumptions that
+          can be made in the body of the primitive subprogram.  Note
+          that in this case there is nothing explicit that might
+          indicate that the class-wide precondition is ineffective.
+          This rule does not prevent explicitly writing an ineffective
+          class-wide precondition (for instance, if the parent
+          subprogram has explicitly specified a precondition of True).
+
+17.2/4
+{AI12-0131-1AI12-0131-1} In addition to the places where Legality Rules
+normally apply (see *note 12.3::), these rules also apply in the private
+part of an instance of a generic unit.
+
                           _Static Semantics_
 
-18/3
-{AI05-0145-2AI05-0145-2} If a Pre'Class or Post'Class aspect is
-specified for a primitive subprogram of a tagged type T, then the
-associated expression also applies to the corresponding primitive
-subprogram of each descendant of T.
+18/4
+{AI05-0145-2AI05-0145-2} {AI12-0113-1AI12-0113-1}
+{AI12-0131-1AI12-0131-1} If a Pre'Class or Post'Class aspect is
+specified for a primitive subprogram S of a tagged type T, or such an
+aspect defaults to True, then a corresponding expression also applies to
+the corresponding primitive subprogram S of each descendant of T. The
+corresponding expression is constructed from the associated expression
+as follows: 
+
+18.a/4
+          Ramification: A Pre'Class defaults to True only if no
+          class-wide preconditions are inherited for the subprogram.
+          The same is true for Post'Class.
+
+18.b/4
+          Reason: We have to inherit precondition expressions that
+          default to True, so that later overridings don't strengthen
+          the precondition (a violation of LSP). We do the same for
+          postconditions for consistency.
+
+18.1/4
+   * {AI12-0113-1AI12-0113-1} References to formal parameters of S (or
+     to S itself) are replaced with references to the corresponding
+     formal parameters of the corresponding inherited or overriding
+     subprogram S (or to the corresponding subprogram S itself).
+
+18.c/4
+          Reason: We have to define the corresponding expression this
+          way as overriding routines are only required to be subtype
+          conformant; in particular, the parameter names can be
+          different.  So we have to talk about corresponding parameters
+          without mentioning any names.
+
+18.2/4
+{AI12-0113-1AI12-0113-1} The primitive subprogram S is illegal if it is
+not abstract and the corresponding expression for a Pre'Class or
+Post'Class aspect would be illegal.
+
+18.d/4
+          Ramification: This can happen, for instance, if one of the
+          subprograms called in the corresponding expression is
+          abstract.  We made the rule general so that we don't have to
+          worry about exactly which cases can cause this to happen, both
+          now and in the future.
+
+18.e/4
+          Reason: We allow illegal corresponding expressions on abstract
+          subprograms as they could never be evaluated, and we need to
+          allow such expressions to contain calls to abstract
+          subprograms.
 
 19/3
 {AI05-0145-2AI05-0145-2} {AI05-0262-1AI05-0262-1}
@@ -29635,6 +30798,9 @@ occurs within:
 22/3
    * a dependent_expression of a case_expression;
 
+22.1/4
+   * {AI12-0032-1AI12-0032-1} a predicate of a quantified_expression;
+
 23/3
    * the right operand of a short-circuit control form; or
 
@@ -29645,19 +30811,59 @@ occurs within:
 {AI05-0145-2AI05-0145-2} For a prefix X that denotes an object of a
 nonlimited type, the following attribute is defined:
 
-26/3
+26/4
 X'Old
                {AI05-0145-2AI05-0145-2} {AI05-0262-1AI05-0262-1}
-               {AI05-0273-1AI05-0273-1} For each X'Old in a
-               postcondition expression that is enabled, a constant is
-               implicitly declared at the beginning of the subprogram or
-               entry.  The constant is of the type of X and is
-               initialized to the result of evaluating X (as an
-               expression) at the point of the constant declaration.
-               The value of X'Old in the postcondition expression is the
-               value of this constant; the type of X'Old is the type of
-               X. These implicit constant declarations occur in an
-               arbitrary order.
+               {AI05-0273-1AI05-0273-1} {AI12-0032-1AI12-0032-1} Each
+               X'Old in a postcondition expression that is enabled
+               denotes a constant that is implicitly declared at the
+               beginning of the subprogram body, entry body, or accept
+               statement.
+
+26.1/4
+               {AI12-0032-1AI12-0032-1} {AI12-0159-1AI12-0159-1} The
+               implicitly declared entity denoted by each occurrence of
+               X'Old is declared as follows:
+
+26.2/4
+                  * If X is of an anonymous access type defined by an
+                    access_definition A then
+
+26.3/4
+                         X'Old : constant A := X;
+
+26.4/4
+                  * If X is of a specific tagged type T then
+
+26.5/4
+                         anonymous : constant T'Class := T'Class(X);
+                         X'Old : T renames T(anonymous);
+
+26.6/4
+                    where the name X'Old denotes the object renaming.
+
+26.a/4
+          Ramification: This means that the underlying tag associated
+          with X'Old is that of X and not that of the nominal type of X.
+
+26.7/4
+                  * Otherwise
+
+26.8/4
+                         X'Old : constant S := X;
+
+26.9/4
+                    where S is the nominal subtype of X. This includes
+                    the case where the type of S is an anonymous array
+                    type or a universal type.
+
+26.10/4
+               {AI12-0032-1AI12-0032-1} The nominal subtype of X'Old is
+               as implied by the above definitions.  The expected type
+               of the prefix of an Old attribute is that of the
+               attribute.  Similarly, if an Old attribute shall resolve
+               to be of some type, then the prefix of the attribute
+               shall resolve to be of that type.
 
 27/3
                {AI05-0145-2AI05-0145-2} {AI05-0262-1AI05-0262-1}
@@ -29696,9 +30902,11 @@ X'Old
           most cases, the former is what one wants (but it is not always
           legal, see below).
 
-27.d/3
-          If X has controlled parts, adjustment and finalization are
-          implied by the implicit constant declaration.
+27.d/4
+          {AI12-0032-1AI12-0032-1} If X has controlled parts, adjustment
+          and finalization are implied by the implicit constant
+          declaration.  Similarly, the implicit constant declaration
+          defines the accessibility level of X'Old.
 
 27.e/3
           If postconditions are disabled, we want the compiler to avoid
@@ -29762,6 +30970,47 @@ X'Old
           indexing if the index can change during the execution of the
           subprogram.)
 
+27.l/4
+          Ramification: {AI12-0032-1AI12-0032-1} An accept statement for
+          a task entry with enabled postconditions such as
+
+27.m/4
+               accept E do
+                  statements
+               exception
+                  handlers
+               end;
+
+27.n/4
+          behaves (at runtime) as follows:
+
+27.o/4
+               accept E do
+                  declare
+                     declarations, if any, of 'Old constants
+                  begin
+                     begin
+                        statements
+                     exception
+                        handlers
+                     end;
+                     postcondition checks
+                  end;
+               end;
+
+27.p/4
+          {AI12-0032-1AI12-0032-1} Preconditions are checked by the
+          caller before the rendezvous begins.  Postcondition
+          expressions might, of course, reference 'Old constants.
+
+27.q/4
+          {AI12-0032-1AI12-0032-1} In the case of a protected operation
+          with enabled postconditions, 'Old constant declarations (if
+          any) are elaborated after the start of the protected action.
+          Postcondition checks (which might reference these constants)
+          are performed before the end of the protected action as
+          described below.
+
 28/3
 {AI05-0145-2AI05-0145-2} For a prefix F that denotes a function
 declaration, the following attribute is defined:
@@ -29864,6 +31113,26 @@ performed in an arbitrary order.
           applies.  Postconditions can always be evaluated inside the
           invoked body.
 
+35.1/4
+{AI12-0032-1AI12-0032-1} For a call to a task entry, the postcondition
+check is performed before the end of the rendezvous; for a call to a
+protected operation, the postcondition check is performed before the end
+of the protected action of the call.  The postcondition check for any
+call is performed before the finalization of any implicitly-declared
+constants associated (as described above) with Old attribute_references
+but after the finalization of any other entities whose accessibility
+level is that of the execution of the callable construct.
+
+35.a.1/4
+          Reason: {AI12-0032-1AI12-0032-1} If a postcondition references
+          the implicitly-declared constant associated with an Old
+          attribute, the postcondition must be evaluated before the
+          constant is finalized.  One way to think of this is to imagine
+          declaring a controlled object between any implicit "'Old"
+          constant declarations and any explicit declarations, then
+          performing postcondition checks during the finalization of
+          this object.
+
 36/3
 {AI05-0145-2AI05-0145-2} {AI05-0262-1AI05-0262-1} If a precondition or
 postcondition check fails, the exception is raised at the point of the
@@ -29871,19 +31140,25 @@ call[; the exception cannot be handled inside the 
called subprogram or
 entry].  Similarly, any exception raised by the evaluation of a
 precondition or postcondition expression is raised at the point of call.
 
-37/3
+37/4
 {AI05-0145-2AI05-0145-2} {AI05-0247-1AI05-0247-1}
-{AI05-0254-1AI05-0254-1} {AI05-0262-1AI05-0262-1} For any subprogram or
-entry call (including dispatching calls), the checks that are performed
-to verify specific precondition expressions and specific and class-wide
-postcondition expressions are determined by those for the subprogram or
-entry actually invoked.  Note that the class-wide postcondition
-expressions verified by the postcondition check that is part of a call
-on a primitive subprogram of type T includes all class-wide
-postcondition expressions originating in any progenitor of T[, even if
-the primitive subprogram called is inherited from a type T1 and some of
-the postcondition expressions do not apply to the corresponding
-primitive subprogram of T1].
+{AI05-0254-1AI05-0254-1} {AI05-0262-1AI05-0262-1}
+{AI12-0113-1AI12-0113-1} {AI12-0159-1AI12-0159-1} For any call to a
+subprogram or entry S (including dispatching calls), the checks that are
+performed to verify specific precondition expressions and specific and
+class-wide postcondition expressions are determined by those for the
+subprogram or entry actually invoked.  Note that the class-wide
+postcondition expressions verified by the postcondition check that is
+part of a call on a primitive subprogram of type T includes all
+class-wide postcondition expressions originating in any progenitor of
+T[, even if the primitive subprogram called is inherited from a type T1
+and some of the postcondition expressions do not apply to the
+corresponding primitive subprogram of T1].  Any operations within a
+class-wide postcondition expression that were resolved as primitive
+operations of the (notional) formal derived type NT, are in the
+evaluation of the postcondition bound to the corresponding operations of
+the type identified by the controlling tag of the call on S.[ This
+applies to both dispatching and non-dispatching calls on S.]
 
 37.a/3
           Ramification: This applies to access-to-subprogram calls,
@@ -29904,12 +31179,18 @@ primitive subprogram of T1].
           Note that this rule does not apply to class-wide
           preconditions; they have their own rules mentioned below.
 
-38/3
+38/4
 {AI05-0145-2AI05-0145-2} {AI05-0247-1AI05-0247-1}
-{AI05-0254-1AI05-0254-1} The class-wide precondition check for a call to
-a subprogram or entry consists solely of checking the class-wide
+{AI05-0254-1AI05-0254-1} {AI12-0113-1AI12-0113-1}
+{AI12-0159-1AI12-0159-1} The class-wide precondition check for a call to
+a subprogram or entry S consists solely of checking the class-wide
 precondition expressions that apply to the denoted callable entity (not
-necessarily the one that is invoked).
+necessarily to the one that is invoked).  Any operations within such an
+expression that were resolved as primitive operations of the (notional)
+formal derived type NT are in the evaluation of the precondition bound
+to the corresponding operations of the type identified by the
+controlling tag of the call on S.[ This applies to both dispatching and
+non-dispatching calls on S.]
 
 38.a/3
           Ramification: For a dispatching call, we are talking about the
@@ -29942,8 +31223,8 @@ necessarily the one that is invoked).
           special code for routines that are imported from outside of
           the Ada program.  That's because there is a requirement on the
           programmer that the use of interfacing aspects do not violate
-          Ada semantics (see B.1).  That includes making pre- and
-          postcondition checks.  For instance, if the implementation
+          Ada semantics (see *note B.1::).  That includes making pre-
+          and postcondition checks.  For instance, if the implementation
           expects routines to make their own postcondition checks in the
           body before returning, C code can be assumed to do this (even
           though that is highly unlikely).  That's even though the
@@ -29976,6 +31257,68 @@ reference that produced the value.
           {AI05-0262-1AI05-0262-1} {AI05-0273-1AI05-0273-1}
           {AI05-0274-1AI05-0274-1} Pre and Post aspects are new.
 
+                    _Inconsistencies With Ada 2012_
+
+40.b/4
+          {AI12-0032-1AI12-0032-1} Corrigendum: The Old attribute is
+          defined more carefully.  This changes the nominal subtype and
+          place of declaration of the attribute compared to the
+          published Ada 2012 Standard.  In extreme cases, this could
+          change the runtime behavior of the attribute (for instance,
+          the tag might be different).  The changes are most likely
+          going to prevent bugs by being more intuitive, but it is
+          possible that a program that previously worked might fail.
+
+40.c/4
+          {AI12-0113-1AI12-0113-1} {AI12-0159-1AI12-0159-1} Corrigendum:
+          Eliminated unintentional redispatching from class-wide
+          preconditions and postconditions.  This means that a different
+          body might be evaluated for a statically bound call to a
+          routine that has a class-wide precondition or postcondition.
+          The change means that the behavior of Pre and Pre'Class will
+          be the same for a particular subprogram, and that the known
+          behavior of the operations can be assumed within the body of
+          that subprogram for Pre'Class.  We expect that this change
+          will primarily fix bugs, as it will make Pre'Class and
+          Post'Class work more like expected.  In the case where
+          redispatching is desired, an explicit conversion to a
+          class-wide type can be used.
+
+                   _Incompatibilities With Ada 2012_
+
+40.d/4
+          {AI12-0045-1AI12-0045-1} Corrigendum: Precondition and
+          postcondition aspects cannot be specified on instances of
+          generic subprograms (they should be specified on the generic
+          subprogram instead).  This was (unintentionally) allowed by
+          the Ada 2012 standard.  These are not be allowed on instances
+          as there is no corresponding way to add preconditions and
+          postconditions to subprograms declared within the instance of
+          a generic package.  Therefore, allowing specification on a
+          subprogram instance could present a maintenance problem in the
+          future if the entity needs to be converted to a generic
+          package (a common conversion).
+
+40.e/4
+          {AI12-0131-1AI12-0131-1} Corrigendum: Pre'Class is no longer
+          allowed to be specified for an overriding primitive subprogram
+          unless there are also inherited class-wide precondittions.
+          This incompatibility prevents cases where the explicit
+          Pre'Class is counterfeited by an implicit class-wide
+          precondition of True.  This rule should catch more bugs than
+          it creates; the programmer should have written Pre rather than
+          Pre'Class in this case (or written Pre'Class on the original
+          subprogram, not an overriding).  Note that this
+          incompatibility eliminates what otherwise would be an
+          inconsistency with original Ada 2012, where precondition
+          checks that would have previously been made for a statically
+          bound call would no longer be made.  That dynamic change was
+          necessary to eliminate cases where the evaluated class-wide
+          precondition on a dispatching call would have been weaker than
+          the class-wide precondition of a statically bound call.  (The
+          original Ada 2012 violated the LSP semantics that class-wide
+          preconditions were intended to model.
+
 
 File: aarm2012.info,  Node: 6.2,  Next: 6.3,  Prev: 6.1,  Up: 6
 
@@ -30025,14 +31368,17 @@ following:
 9
    * a private type whose full type is a by-reference type.
 
-10/3
-{AI05-0142-4AI05-0142-4} {AI05-0188-1AI05-0188-1} A parameter of a
-by-reference type is passed by reference, as is an explicitly aliased
-parameter of any type.  Each value of a by-reference type has an
-associated object.  For a parenthesized expression,
-qualified_expression, or type_conversion, this object is the one
-associated with the operand.  For a conditional_expression, this object
-is the one associated with the evaluated dependent_expression.
+10/4
+{AI05-0142-4AI05-0142-4} {AI05-0188-1AI05-0188-1}
+{AI12-0027-1AI12-0027-1} A parameter of a by-reference type is passed by
+reference, as is an explicitly aliased parameter of any type. Each value
+of a by-reference type has an associated object.  For a parenthesized
+expression, qualified_expression, or view conversion, this object is the
+one associated with the operand.  For a value conversion, the associated
+object is the anonymous result object if such an object is created (see
+*note 4.6::); otherwise it is the associated object of the operand.  For
+a conditional_expression, this object is the one associated with the
+evaluated dependent_expression.
 
 10.a
           Ramification: By-reference parameter passing makes sense only
@@ -30073,7 +31419,7 @@ is the one associated with the evaluated 
dependent_expression.
           Every value of a limited by-reference type is the value of one
           and only one limited object.  The associated object of a value
           of a limited by-reference type is the object whose value it
-          represents.  Two values of a limited by-reference type are the
+          represents. Two values of a limited by-reference type are the
           same if and only if they represent the value of the same
           object.
 
@@ -30217,42 +31563,61 @@ assigned value is read, or some old value of the 
object is read.
 
      NOTES
 
-13
-     6  A formal parameter of mode in is a constant view (see *note
+13/4
+     6  {AI12-0056-1AI12-0056-1} The mode of a formal parameter
+     describes the direction of information transfer to or from the
+     subprogram_body (see *note 6.1::).
+
+14
+     7  A formal parameter of mode in is a constant view (see *note
      3.3::); it cannot be updated within the subprogram_body.
 
+15/4
+     8  {AI12-0056-1AI12-0056-1} A formal parameter of mode out might be
+     uninitialized at the start of the subprogram_body (see *note
+     6.4.1::).
+
                         _Extensions to Ada 83_
 
-13.a
+15.a
           The value of an out parameter may be read.  An out parameter
           is treated like a declared variable without an explicit
           initial expression.
 
                      _Wording Changes from Ada 83_
 
-13.b
+15.b
           Discussion of copy-in for parts of out parameters is now
           covered in *note 6.4.1::, "*note 6.4.1:: Parameter
           Associations".
 
-13.c
+15.c
           The concept of a by-reference type is new to Ada 95.
 
-13.d
+15.d
           We now cover in a general way in *note 3.7.2:: the rule
           regarding erroneous execution when a discriminant is changed
           and one of the parameters depends on the discriminant.
 
                     _Wording Changes from Ada 2005_
 
-13.e/3
+15.e/3
           {AI05-0096-1AI05-0096-1} Correction: Corrected so that limited
           derived types are by-reference only if their parent is.
 
-13.f/3
+15.f/3
           {AI05-0142-4AI05-0142-4} Defined that explicitly aliased
           parameters (see *note 6.1::) are always passed by reference.
 
+                    _Wording Changes from Ada 2012_
+
+15.g/4
+          {AI05-0027-1AI05-0027-1} Corrigendum: Corrected so that value
+          conversions that are copies are the "associated object" for
+          parameter passing of by-reference types.  This can only happen
+          if the conversion is between unrelated non-limited types, and
+          it is necessary just so the correct object is defined.
+
 
 File: aarm2012.info,  Node: 6.3,  Next: 6.4,  Prev: 6.2,  Up: 6
 
@@ -30287,7 +31652,7 @@ completion of a previous declaration[, in which case 
the body declares
 the subprogram].  If the body is a completion, it shall be the
 completion of a subprogram_declaration or
 generic_subprogram_declaration.  The profile of a subprogram_body that
-completes a declaration shall conform fully to that of the declaration.  
+completes a declaration shall conform fully to that of the declaration. 
 
                           _Static Semantics_
 
@@ -30487,9 +31852,12 @@ convention.]  The following conventions are defined by 
the language:
              * {AI95-00252-01AI95-00252-01} a subprogram declared
                immediately within a protected_body;
 
-10.1/2
+10.1/4
              * {AI95-00252-01AI95-00252-01} {AI95-00407-01AI95-00407-01}
-               any prefixed view of a subprogram (see *note 4.1.3::).
+               {AI12-0107-1AI12-0107-1} any prefixed view of a
+               subprogram (see *note 4.1.3::) without synchronization
+               kind (see *note 9.5::) By_Entry or
+               By_Protected_Procedure.
 
 10.a/2
           Reason: The profile of a prefixed view is different than the
@@ -30497,6 +31865,14 @@ convention.]  The following conventions are defined by 
the language:
           parameter), so we don't want to be able to take 'Access of it,
           as that would require generating a wrapper of some sort.
 
+10.b/4
+          {AI12-0107-1AI12-0107-1} We except prefixed views that have
+          synchronization kind By_Protected_Procedure so that they can
+          be used with an access-to-protected-procedure type.  These
+          don't require special wrappers (this is the normal form for a
+          protected subprogram call).  The By_Entry part is just for
+          consistency (there is no access-to-entry type in Ada).
+
 11
      [The Access attribute is not allowed for Intrinsic subprograms.]
 
@@ -30533,13 +31909,17 @@ convention.]  The following conventions are defined 
by the language:
           predefined operators (other than the "=" of a tagged type) and
           the inherited subprograms of untagged types.
 
-12
-   * The default calling convention is protected for a protected
-     subprogram, and for an access-to-subprogram type with the reserved
-     word protected in its definition.
+12/4
+   * {AI12-0107-1AI12-0107-1} {AI12-0159-1AI12-0159-1} The default
+     calling convention is protected for a protected subprogram, for a
+     prefixed view of a subprogram with a synchronization kind of
+     By_Protected_Procedure, and for an access-to-subprogram type with
+     the reserved word protected in its definition.
 
-13
-   * The default calling convention is entry for an entry.
+13/4
+   * {AI12-0107-1AI12-0107-1} {AI12-0159-1AI12-0159-1} The default
+     calling convention is entry for an entry and for a prefixed view of
+     a subprogram with a synchronization kind of By_Entry.
 
 13.1/3
    * {AI95-00254-01AI95-00254-01} {AI95-00409-01AI95-00409-01}
@@ -30583,7 +31963,7 @@ a Convention aspect.
 have the same number of parameters, and both have a result if either
 does, and corresponding parameter and result types are the same, or, for
 access parameters or access results, corresponding designated types are
-the same, or corresponding designated profiles are type conformant.  
+the same, or corresponding designated profiles are type conformant. 
 
 15.a/2
           Discussion: {AI95-00409-01AI95-00409-01} For anonymous
@@ -30615,14 +31995,14 @@ the same, or corresponding designated profiles are 
type conformant.
    * {AI05-0207-1AI05-0207-1} for corresponding access parameters and
      any access result type, the designated subtypes statically match
      and either both or neither are access-to-constant, or the
-     designated profiles are subtype conformant.  
+     designated profiles are subtype conformant. 
 
 17/3
 {AI05-0239-1AI05-0239-1} Two profiles are subtype conformant if they are
 mode conformant, corresponding subtypes of the profile statically match,
 and the associated calling conventions are the same.  The profile of a
 generic formal subprogram is not subtype conformant with any other
-profile.  
+profile. 
 
 17.a
           Ramification: 
@@ -30677,11 +32057,17 @@ operator with the equivalent function_call:]
      may correspond to a direct_name (or character_literal) or to a
      different expanded name in the other; and
 
-21
-   * each direct_name, character_literal, and selector_name that is not
-     part of the prefix of an expanded name in one denotes the same
-     declaration as the corresponding direct_name, character_literal, or
-     selector_name in the other; and
+20.1/4
+   * {AI12-0050-1AI12-0050-1} corresponding defining_identifiers
+     occurring within the two expressions are the same; and
+
+21/4
+   * {AI12-0050-1AI12-0050-1} each direct_name, character_literal, and
+     selector_name that is not part of the prefix of an expanded name in
+     one denotes the same declaration as the corresponding direct_name,
+     character_literal, or selector_name in the other, or they denote
+     corresponding declarations occurring within the two expressions;
+     and
 
 21.a
           Ramification: Note that it doesn't say "respectively" because
@@ -30721,6 +32107,14 @@ operator with the equivalent function_call:]
           were, it would be bad news, since the two denoted views have
           different default_expressions.
 
+21.f/4
+          Discussion: {AI12-0050-1AI12-0050-1} We talk about
+          defining_identifiers and "corresponding declarations" because
+          of the possibility of iterator_specifications occurring within
+          the expressions; each iterator_specification is a separate
+          declaration, which we need to allow, but we do want to require
+          that the defining_identifiers are the same.
+
 21.1/3
    * {8652/00188652/0018} {AI95-00175-01AI95-00175-01}
      {AI05-0092-1AI05-0092-1} each attribute_designator in one is the
@@ -30741,7 +32135,7 @@ operator with the equivalent function_call:]
 Two known_discriminant_parts are fully conformant if they have the same
 number of discriminants, and discriminants in the same positions have
 the same names, statically matching subtypes, and default_expressions
-that are fully conformant with one another.  
+that are fully conformant with one another. 
 
 24
 Two discrete_subtype_definitions are fully conformant if they are both
@@ -30868,6 +32262,27 @@ library unit to be intrinsic.
           included as part of mode conformance (since it affects the
           parameter passing mechanism).
 
+                       _Extensions to Ada 2012_
+
+25.l/4
+          {AI05-0107-1AI05-0107-1} {AI05-0159-1AI05-0159-1} Corrigendum:
+          We now define that a prefixed view of a subprogram with
+          synchronization kind By_Protected_Procedure can be used as the
+          prefix of 'Access for an access-to-protected type.  We
+          consider this a correction as it certainly appears that it
+          ought to work, but in original Ada 2012 it would have had a
+          convention mismatch.
+
+                    _Wording Changes from Ada 2012_
+
+25.m/4
+          {AI05-0050-1AI05-0050-1} Corrigendum: We now define how two
+          expressions containing quantified expressions can fully
+          conform.  This isn't incompatible, as the original Ada 2012
+          never allowed such expressions to conform (the declarations in
+          each formally being different).  Neither is it an extension as
+          one would expect these to conform.
+
 
 File: aarm2012.info,  Node: 6.3.2,  Prev: 6.3.1,  Up: 6.3
 
@@ -31117,7 +32532,7 @@ executing a return statement.
 12/2
 {AI95-00231-01AI95-00231-01} A function_call denotes a constant, as
 defined in *note 6.5::; the nominal subtype of the constant is given by
-the nominal subtype of the function result.  
+the nominal subtype of the function result. 
 
                               _Examples_
 
@@ -31169,7 +32584,7 @@ Examples of their calls:
      NOTES
 
 24
-     7  If a default_expression is used for two or more parameters in a
+     9  If a default_expression is used for two or more parameters in a
      multiple parameter_specification (*note 6.1: S0175.), the
      default_expression (*note 3.7: S0063.) is evaluated once for each
      omitted parameter.  Hence in the above examples, the two calls of
@@ -31300,7 +32715,7 @@ being called.
 The actual parameter is either the explicit_actual_parameter given in a
 parameter_association for a given formal parameter, or the corresponding
 default_expression if no parameter_association is given for the formal
-parameter.  The expected type for an actual parameter is the type of the
+parameter. The expected type for an actual parameter is the type of the
 corresponding formal parameter.
 
 3.a
@@ -31312,11 +32727,24 @@ corresponding formal parameter.
 If the mode is in, the actual is interpreted as an expression;
 otherwise, the actual is interpreted only as a name, if possible.
 
-4.a
-          Ramification: This formally resolves the ambiguity present in
-          the syntax rule for explicit_actual_parameter.  Note that we
-          don't actually require that the actual be a name if the mode
-          is not in; we do that below.
+4.a/4
+          Ramification: {AI12-0005-1AI12-0005-1} This formally resolves
+          the ambiguity present in the syntax rule for
+          explicit_actual_parameter.  This matters as an expression that
+          is a name is evaluated and represents a value while a name by
+          itself can be an object; if the mode is not in, we want the
+          parameter to interpreted as an object.  Note that we don't
+          actually require that the actual be a name if the mode is not
+          in; we do that below.
+
+4.b/4
+          {AI12-0005-1AI12-0005-1} This wording uses "interpreted as"
+          rather than "shall be" so that this rule is not used to
+          resolve overloading; it is solely about evaluation as
+          described above.  We definitely do not want to allow oddities
+          like the presence of parentheses requiring the selection of an
+          in formal parameter as opposed to an otherwise matching in out
+          parameter.
 
                            _Legality Rules_
 
@@ -31351,6 +32779,29 @@ variable.
           fails before it is considered, meaning that the call is
           ambiguous.
 
+5.1/4
+{AI12-0074-1AI12-0074-1} {AI12-0159-1AI12-0159-1} If the mode is out,
+the actual parameter is a view conversion, and the type of the formal
+parameter is an access type or a scalar type that has the Default_Value
+aspect specified, then
+
+5.2/4
+   * there shall exist a type (other than a root numeric type) that is
+     an ancestor of both the target type and the operand type; and
+
+5.3/4
+   * in the case of a scalar type, the type of the operand of the
+     conversion shall have the Default_Value aspect specified.
+
+5.4/4
+{AI12-0074-1AI12-0074-1} {AI12-0159-1AI12-0159-1} In addition to the
+places where Legality Rules normally apply (see *note 12.3::), these
+rules also apply in the private part of an instance of a generic unit.
+
+5.e/4
+          Reason: These rules are needed in order to ensure that a
+          well-defined parameter value is passed.
+
 6/3
 {AI05-0102-1AI05-0102-1} {AI05-0142-4AI05-0142-4} If the formal
 parameter is an explicitly aliased parameter, the type of the actual
@@ -31383,7 +32834,21 @@ untagged:
           particularly important for arrays, where we don't want to
           require any additional implementation burden.
 
-6.3/3
+6.b.1/4
+          Discussion: {AI12-0095-1AI12-0095-1} We assume the worst in a
+          generic body whether or not a formal subtype has a constrained
+          partial view; specifically, in a generic body a discriminated
+          subtype is considered to have a constrained partial view if it
+          is a descendant of an untagged generic formal private or
+          derived type (see *note 12.5.1:: for the formal definition of
+          this rule).
+
+6.3/4
+{AI12-0095-1AI12-0095-1} In addition to the places where Legality Rules
+normally apply (see *note 12.3::), these rules also apply in the private
+part of an instance of a generic unit.
+
+6.4/3
 {AI05-0142-4AI05-0142-4} {AI05-0234-1AI05-0234-1} In a function call,
 the accessibility level of the actual object for each explicitly aliased
 parameter shall not be statically deeper than the accessibility level of
@@ -31399,44 +32864,45 @@ the master of the call (see *note 3.10.2::).
           does not depend on the actual parameter of that other
           subprogram).
 
-6.d/3
-          Ramification: This accessibility check (and its dynamic cousin
-          as well) can only fail if the function call is used to
-          directly initialize a built-in-place object with a master
-          different than that enclosing the call.  The only place all of
-          those conditions exist is in the initializer of an allocator;
-          in all other cases this check will always pass.
+6.d/4
+          Ramification: {AI12-0095-1AI12-0095-1} This accessibility
+          check (and its dynamic cousin as well) can only fail if the
+          master of the function call (which is defined in the Heart of
+          Darkness, or *note 3.10.2:: if you prefer) is different than
+          the master directly enclosing the call.  The most likely place
+          where this will occur is in the initializer of an allocator;
+          in almost all other cases this check will always pass.
 
-6.4/3
+6.5/3
 {AI05-0144-2AI05-0144-2} Two names are known to denote the same object
 if:
 
-6.5/3
+6.6/3
    * both names statically denote the same stand-alone object or
      parameter; or
 
-6.6/3
+6.7/3
    * both names are selected_components, their prefixes are known to
      denote the same object, and their selector_names denote the same
      component; or
 
-6.7/3
+6.8/3
    * both names are dereferences (implicit or explicit) and the
      dereferenced names are known to denote the same object; or
 
-6.8/3
+6.9/3
    * both names are indexed_components, their prefixes are known to
      denote the same object, and each of the pairs of corresponding
      index values are either both static expressions with the same
      static value or both names that are known to denote the same
      object; or
 
-6.9/3
+6.10/3
    * both names are slices, their prefixes are known to denote the same
      object, and the two slices have statically matching index
      constraints; or
 
-6.10/3
+6.11/3
    * one of the two names statically denotes a renaming declaration
      whose renamed object_name is known to denote the same object as the
      other, the prefix of any dereference within the renamed object_name
@@ -31546,19 +33012,19 @@ if:
           R and S(ONE), we simply have to test S(1) vs.  S(ONE), which
           we already know denote the same object.
 
-6.11/3
+6.12/3
 {AI05-0144-2AI05-0144-2} Two names are known to refer to the same object
 if 
 
-6.12/3
+6.13/3
    * The two names are known to denote the same object; or
 
-6.13/3
+6.14/3
    * One of the names is a selected_component, indexed_component, or
      slice and its prefix is known to refer to the same object as the
      other name; or
 
-6.14/3
+6.15/3
    * One of the two names statically denotes a renaming declaration
      whose renamed object_name is known to refer to the same object as
      the other name.
@@ -31572,12 +33038,12 @@ if
           (There is nothing shared between an access value and the
           object it designates.)
 
-6.15/3
+6.16/3
 {AI05-0144-2AI05-0144-2} If a call C has two or more parameters of mode
 in out or out that are of an elementary type, then the call is legal
 only if:
 
-6.16/3
+6.17/3
    * For each name N that is passed as a parameter of mode in out or out
      to the call C, there is no other name among the other parameters of
      mode in out or out to C that is known to denote the same object.
@@ -31588,7 +33054,7 @@ only if:
           are always composite).  That's necessary to avoid having
           Legality Rules depend on the contents of the private part.
 
-6.17/3
+6.18/3
 {AI05-0144-2AI05-0144-2} If a construct C has two or more direct
 constituents that are names or expressions whose evaluation may occur in
 an arbitrary order, at least one of which contains a function call with
@@ -31601,7 +33067,7 @@ an in out or out parameter, then the construct is legal 
only if:
           places that don't involve names or expressions (such as checks
           or finalization).
 
-6.18/3
+6.19/3
    * For each name N that is passed as a parameter of mode in out or out
      to some inner function call C2 (not including the construct C
      itself), there is no other name anywhere within a direct
@@ -31632,30 +33098,30 @@ an in out or out parameter, then the construct is 
legal only if:
           writing parameters back from another -- that would not
           correspond to any allowed sequential order.
 
-6.19/3
+6.20/3
 {AI05-0144-2AI05-0144-2} For the purposes of checking this rule:
 
-6.20/3
+6.21/3
    * For an array aggregate, an expression associated with a
      discrete_choice_list that has two or more discrete choices, or that
      has a nonstatic range, is considered as two or more separate
      occurrences of the expression;
 
-6.21/3
+6.22/3
    * For a record aggregate:
 
-6.22/3
+6.23/3
              * The expression of a record_component_association is
                considered to occur once for each associated component;
                and
 
-6.23/3
+6.24/3
              * The default_expression for each
                record_component_association with <> for which the
                associated component has a default_expression is
                considered part of the aggregate;
 
-6.24/3
+6.25/3
    * For a call, any default_expression evaluated as part of the call is
      considered part of the call.
 
@@ -31680,7 +33146,7 @@ For the evaluation of a parameter_association:
    * For a parameter [(of any mode)] that is passed by reference (see
      *note 6.2::), a view conversion of the actual parameter to the
      nominal subtype of the formal parameter is evaluated, and the
-     formal parameter denotes that conversion.  
+     formal parameter denotes that conversion. 
 
 10.a
           Discussion: We are always allowing sliding, even for [in] out
@@ -31690,7 +33156,7 @@ For the evaluation of a parameter_association:
    * For an in or in out parameter that is passed by copy (see *note
      6.2::), the formal parameter object is created, and the value of
      the actual parameter is converted to the nominal subtype of the
-     formal parameter and assigned to the formal.  
+     formal parameter and assigned to the formal. 
 
 11.a
           Ramification: The conversion mentioned here is a value
@@ -31712,12 +33178,27 @@ For the evaluation of a parameter_association:
           object of an access type is always initialized with a
           "reasonable" value.
 
-13.1/3
-        * {AI05-0153-3AI05-0153-3} {AI05-0228-1AI05-0228-1} For a scalar
+13.1/4
+        * {AI05-0153-3AI05-0153-3} {AI05-0228-1AI05-0228-1}
+          {AI12-0074-1AI12-0074-1} {AI12-0159-1AI12-0159-1} For a scalar
           type that has the Default_Value aspect specified, the formal
           parameter is initialized from the value of the actual, without
           checking that the value satisfies any constraint or any
-          predicate;
+          predicate.  Furthermore, if the actual parameter is a view
+          conversion and either
+
+13.2/4
+             * {AI12-0074-1AI12-0074-1} there exists no type (other than
+               a root numeric type) that is an ancestor of both the
+               target type and the type of the operand of the
+               conversion; or
+
+13.3/4
+             * {AI12-0074-1AI12-0074-1} the Default_Value aspect is
+               unspecified for the type of the operand of the conversion
+
+13.4/4
+          {AI12-0074-1AI12-0074-1} then Program_Error is raised;
 
 13.b/3
           Reason: This preserves the Language Design Principle that all
@@ -31734,6 +33215,13 @@ For the evaluation of a parameter_association:
           support the size of the subtype (since no values are passed
           in).
 
+13.d/4
+          Discussion: The Program_Error case can only occur in the body
+          of an instance of a generic unit.  Legality Rules will catch
+          all other cases.  Implementations that macro-expand generics
+          can always detect this case when the enclosing instance body
+          is expanded.
+
 14
         * For a composite type with discriminants or that has implicit
           initial values for any subcomponents (see *note 3.3.1::), the
@@ -31791,8 +33279,8 @@ constrained.
 After normal completion and leaving of a subprogram, for each in out or
 out parameter that is passed by copy, the value of the formal parameter
 is converted to the subtype of the variable given as the actual
-parameter and assigned to it.  These conversions and assignments occur
-in an arbitrary order.
+parameter and assigned to it. These conversions and assignments occur in
+an arbitrary order.
 
 17.a
           Ramification: The conversions mentioned above during parameter
@@ -31908,6 +33396,33 @@ construct).
           order), and the results could even vary because of
           optimization settings and the like.  Thus they've been banned.
 
+                   _Incompatibilities With Ada 2012_
+
+18.j/4
+          {AI12-0074-1AI12-0074-1} {AI12-0159-1AI12-0159-1} Corrigendum:
+          Added rules to ensure that the value passed into a out
+          parameter for elementary types is well-defined in the case of
+          a view conversion.  The new rules can be incompatible.  For a
+          view conversion to an unrelated type with the Default_Value
+          aspect specified, the aspect is new in Ada 2012 so it should
+          be unlikely to occur in existing code.  For a view conversion
+          to an unrelated access type, the incompatibility is possible
+          as this could be written in Ada 95, but such a view conversion
+          is thought to be rare.  In both cases, declaring and passing a
+          temporary rather than a view conversion will eliminate the
+          problem.
+
+18.k/4
+          {AI12-0095-1AI12-0095-1} Corrigendum: Because of a rule added
+          in *note 12.5.1::, the checks for the passing of an object to
+          an explicitly aliased parameter in a generic body were
+          strengthened to use an assume the worst rule.  This case is
+          rather unlikely as a formal private or derived type with
+          discriminants is required along with an explicitly aliased
+          parameter whose type doesn't statically match the formal type.
+          Such a program is very unlikely, especially as explicitly
+          aliased parameters are a new Ada 2012 feature.
+
 
 File: aarm2012.info,  Node: 6.5,  Next: 6.6,  Prev: 6.4,  Up: 6
 
@@ -31952,7 +33467,7 @@ subtype denoted by the subtype_mark, or defined by the
 access_definition, after the reserved word return in the profile of the
 function.  The expected type for the expression, if any, of a
 simple_return_statement (*note 6.5: S0183.) is the result type of the
-corresponding function.  The expected type for the expression of an
+corresponding function. The expected type for the expression of an
 extended_return_statement is that of the return_subtype_indication
 (*note 6.5: S0187.).
 
@@ -31968,6 +33483,12 @@ or extended_return_statement that contains it.  A 
return statement shall
 not be within a body that is within the construct to which the return
 statement applies.
 
+4.a/4
+          To be honest: {AI12-0089-1AI12-0089-1} The above also applies
+          to generic subprograms, even though they are not callable
+          constructs.  (An instance of a generic subprogram is a
+          callable construct, but not a generic subprogram itself.)
+
 5/3
 {AI95-00318-02AI95-00318-02} {AI05-0015-1AI05-0015-1} A function body
 shall contain at least one return statement that applies to the function
@@ -31978,14 +33499,17 @@ extended_return_statement shall apply to a function 
body.  An
 extended_return_statement with the reserved word constant shall include
 an expression.
 
-5.a/2
-          Reason: {AI95-00318-02AI95-00318-02} The requirement that a
-          function body has to have at least one return statement is a
-          "helpful" restriction.  There has been some interest in
-          lifting this restriction, or allowing a raise statement to
-          substitute for the return statement.  However, there was
-          enough interest in leaving it as is that we decided not to
-          change it.
+5.a/4
+          Reason: {AI95-00318-02AI95-00318-02} {AI12-0022-1AI12-0022-1}
+          The requirement that a function body has to have at least one
+          return statement is a "helpful" restriction.  There has been
+          some interest in lifting this restriction, or allowing a raise
+          statement to substitute for the return statement.  However,
+          there was enough interest in leaving it as is that we decided
+          not to change it.  Note that for Ada 2012, Corrigendum 1, a
+          return statement whose expression is a raise_expression can be
+          given in any function body (the raise_expression will match
+          any type), so there is much less need to eliminate this rule.
 
 5.b/2
           Ramification: {AI95-00318-02AI95-00318-02} A return statement
@@ -31997,6 +33521,13 @@ an expression.
           extended_return_statement, as they must apply (directly) to a
           function body.
 
+5.b.1/4
+          {AI12-0089-1AI12-0089-1} Since a "function body" includes a
+          generic function body, this rule and all of the following
+          Legality Rules apply to generic function bodies as well as
+          non-generic function bodies.  This is true even though a
+          generic function is not a function.
+
 5.1/2
 {AI95-00318-02AI95-00318-02} For an extended_return_statement (*note
 6.5: S0186.) that applies to a function body:
@@ -32019,8 +33550,13 @@ an expression.
      is defined by an access_definition, the return_subtype_indication
      (*note 6.5: S0187.) shall be an access_definition.  The subtype
      defined by the access_definition shall statically match the result
-     subtype of the function.  The accessibility level of this anonymous
-     access subtype is that of the result subtype.
+     subtype of the function.  [The accessibility level of this
+     anonymous access subtype is that of the result subtype.]
+
+5.b.2/4
+          Proof: {AI12-0070-1AI12-0070-1} The accessibility of such
+          anonymous access types is defined in the Heart of Darkness
+          (aka *note 3.10.2::).
 
 5.4/3
    * {AI05-0032-1AI05-0032-1} If the result subtype of the function is
@@ -32028,7 +33564,7 @@ an expression.
      defined by the return_subtype_indication shall not be statically
      deeper than that of the master that elaborated the function body.
 
-5.b.1/3
+5.b.3/3
           Reason: In this case, the return_subtype_indication could be a
           specific type initialized by default; in that case there is no
           expression to check.
@@ -32053,14 +33589,15 @@ statement that applies to a function body:
      (if any) of the return statement shall not be statically deeper
      than that of the master that elaborated the function body.
 
-5.d/3
+5.d/4
           Discussion: {AI05-0032-1AI05-0032-1} {AI05-0051-1AI05-0051-1}
-          If the result type is class wide, then there must be an
-          expression of the return statement unless this is an
-          extended_return_statement whose return_subtype_indication is a
-          specific type.  We have a separate rule to cover that case.
-          Note that if an extended_return_statement has an expression,
-          then both this rule and the next one must be satisfied.
+          {AI12-0005-1AI12-0005-1} If the result type is class-wide,
+          then there must be an expression of the return statement
+          unless this is an extended_return_statement whose
+          return_subtype_indication is a specific type.  We have a
+          separate rule to cover that case.  Note that if an
+          extended_return_statement has an expression, then both this
+          rule and the next one must be satisfied.
 
 5.8/3
    * {AI05-0051-1AI05-0051-1} If the subtype determined by the
@@ -32108,7 +33645,7 @@ by default as for a stand-alone object of its nominal 
subtype (see *note
 3.3.1::).  If the nominal subtype is indefinite, the return object is
 constrained by its initial value.  A check is made that the value of the
 return object belongs to the function result subtype.  Constraint_Error
-is raised if this check fails.  
+is raised if this check fails. 
 
 5.e/2
           Ramification: If the result type is controlled or has a
@@ -32140,7 +33677,7 @@ is raised if this check fails.
 {AI95-00318-02AI95-00318-02} For the execution of a
 simple_return_statement (*note 6.5: S0183.), the expression (if any) is
 first evaluated, converted to the result subtype, and then is assigned
-to the anonymous return object.  
+to the anonymous return object. 
 
 6.a
           Ramification: The conversion might raise Constraint_Error --
@@ -32164,16 +33701,19 @@ not occur until after the function returns (see *note 
9.2::).]
           the begin at the end of the declarative part if the function
           is being used to initialize part of a declared object.
 
-8/3
+8/4
 {AI95-00318-02AI95-00318-02} {AI95-00344-01AI95-00344-01}
-{AI05-0024-1AI05-0024-1} {AI05-0032-1AI05-0032-1} If the result type of
-a function is a specific tagged type, the tag of the return object is
-that of the result type.  If the result type is class-wide, the tag of
-the return object is that of the type of the subtype_indication if it is
-specific, or otherwise that of the value of the expression.  A check is
-made that the master of the type identified by the tag of the result
-includes the elaboration of the master that elaborated the function
-body.  If this check fails, Program_Error is raised.  
+{AI05-0024-1AI05-0024-1} {AI05-0032-1AI05-0032-1}
+{AI12-0097-1AI12-0097-1} If the result type of a function is a specific
+tagged type, the tag of the return object is that of the result type.
+If the result type is class-wide, the tag of the return object is that
+of the value of the expression, unless the return object is defined by
+an extended_return_object_declaration with a subtype_indication that is
+specific, in which case it is that of the type of the
+subtype_indication.  A check is made that the master of the type
+identified by the tag of the result includes the elaboration of the
+master that elaborated the function body.  If this check fails,
+Program_Error is raised. 
 
 8.a/2
           Ramification: {AI95-00318-02AI95-00318-02} The first sentence
@@ -32207,6 +33747,16 @@ body.  If this check fails, Program_Error is raised.
           from the accept statement, and this object was itself a
           parameter to the accept statement.
 
+8.d.1/4
+          To be honest: {AI12-0097-1AI12-0097-1} The expression here is
+          the return expression if the return statement is a
+          simple_return_statement, and the initializing expression of
+          the extended_return_object_declaration if the return statement
+          is an extended_return_statement (ignoring any inner
+          simple_return_statements, which necessarily cannot have an
+          expression, and any other expressions inside of the
+          extended_return_statement).
+
 8.1/3
 {AI05-0073-1AI05-0073-1} If the result subtype of the function is
 defined by an access_definition designating a specific tagged type T, a
@@ -32234,7 +33784,7 @@ the accessibility level of the anonymous access type of 
each access
 discriminant, as determined by the expression or the
 return_subtype_indication (*note 6.5: S0187.) of the return statement,
 is not deeper than the level of the master of the call (see *note
-3.10.2::).  If this check fails, Program_Error is raised.  
+3.10.2::).  If this check fails, Program_Error is raised. 
 
 21.a/2
           This paragraph was deleted.
@@ -32688,6 +34238,21 @@ Examples of return statements:
           rules easier to write and eliminate the problem described in
           AI05-0205-1.
 
+                    _Wording Changes from Ada 2012_
+
+28.x/4
+          {AI05-0097-1AI05-0097-1} Corrigendum: Clarified the wording so
+          that it is clear where the tag of the return object comes
+          from.  While a literal reading of the original Ada 2012 rule
+          could have caused some weird results (by using some nearby
+          subtype_indication to provide the tag in the case of a
+          simple_return_statement, such a reading would be so unlike the
+          rest of the language that we do not believe anyone would ever
+          have thought it was intended.  As such, we do not believe any
+          implementation ever did this wrong (at least because of the
+          old wording), and thus do not document this as a possible
+          inconsistency.
+
 * Menu:
 
 * 6.5.1 ::    Nonreturning Procedures
@@ -32763,7 +34328,7 @@ procedure.
 
 6/2
 {AI95-00414-01AI95-00414-01} A procedure shall be nonreturning if it
-overrides a dispatching nonreturning procedure.  In addition to the
+overrides a dispatching nonreturning procedure. In addition to the
 places where Legality Rules normally apply (see *note 12.3::), this rule
 applies also in the private part of an instance of a generic unit.
 
@@ -32788,7 +34353,7 @@ Paragraph 8 was deleted.
 9/2
 {AI95-00329-01AI95-00329-01} {AI95-00414-01AI95-00414-01} If the body of
 a nonreturning procedure completes normally, Program_Error is raised at
-the point of the call.  
+the point of the call. 
 
 9.a/2
           Discussion: Note that there is no name for suppressing this
@@ -32909,12 +34474,12 @@ complementary result.
           rule is considered user-defined, which means that it will be
           inherited by a derived type.  "User-defined" means "not
           language-defined" for the purposes of inheritance, that is
-          anything other than predefined operators.  
+          anything other than predefined operators. 
 
      NOTES
 
 7
-     8  The operators "+" and "-" are both unary and binary operators,
+     10  The operators "+" and "-" are both unary and binary operators,
      and hence may be overloaded with both one- and two-parameter
      functions.
 
@@ -33060,19 +34625,24 @@ statement.
 
                                _Syntax_
 
-2/3
-     {AI95-0177-1AI95-0177-1} expression_function_declaration ::=
+2/4
+     {AI95-0177-1AI95-0177-1} {AI95-0147-1AI95-0147-1}
+     expression_function_declaration ::=
         [overriding_indicator]
         function_specification is
             (expression)
             [aspect_specification];
+      | [overriding_indicator]
+        function_specification is
+            aggregate
+            [aspect_specification];
 
                         _Name Resolution Rules_
 
-3/3
-{AI05-0177-1AI05-0177-1} The expected type for the expression of an
-expression_function_declaration (*note 6.8: S0189.) is the result type
-(see *note 6.5::) of the function.
+3/4
+{AI05-0177-1AI05-0177-1} {AI95-0147-1AI95-0147-1} The expected type for
+the expression or aggregate of an expression_function_declaration (*note
+6.8: S0189.) is the result type (see *note 6.5::) of the function.
 
                            _Legality Rules_
 
@@ -33083,12 +34653,13 @@ subprogram_declaration or 
generic_subprogram_declaration.  The profile
 of an expression_function_declaration (*note 6.8: S0189.) that completes
 a declaration shall conform fully to that of the declaration.
 
-5/3
-{AI05-0177-1AI05-0177-1} If the result subtype has one or more
-unconstrained access discriminants, the accessibility level of the
-anonymous access type of each access discriminant, as determined by the
-expression of the expression function, shall not be statically deeper
-than that of the master that elaborated the
+5/4
+{AI05-0177-1AI05-0177-1} {AI95-0147-1AI95-0147-1} If the result subtype
+has one or more unconstrained access discriminants, the accessibility
+level of the anonymous access type of each access discriminant, as
+determined by the expression or aggregate of the
+expression_function_declaration (*note 6.8: S0189.), shall not be
+statically deeper than that of the master that elaborated the
 expression_function_declaration (*note 6.8: S0189.).
 
 5.a/3
@@ -33096,34 +34667,36 @@ expression_function_declaration (*note 6.8: S0189.).
           access to a part of a non-aliased parameter, as there can be
           no local declarations here.
 
-5.b/3
-          Discussion: We don't need to repeat any of the other Legality
-          Rules for return statements since none of them can fail here:
-          the implicit return statement has to apply to this function
-          (and isn't nested in something), there clearly is a return
-          statement in this function, and the static classwide
-          accessibility check cannot fail as a tagged type cannot be
-          declared locally in an expression function.
+5.b/4
+          Discussion: {AI12-0005-1AI12-0005-1} We don't need to repeat
+          any of the other Legality Rules for return statements since
+          none of them can fail here: the implicit return statement has
+          to apply to this function (and isn't nested in something),
+          there clearly is a return statement in this function, and the
+          static class-wide accessibility check cannot fail as a tagged
+          type cannot be declared locally in an expression function.
 
                           _Static Semantics_
 
-6/3
-{AI05-0177-1AI05-0177-1} {AI05-0264-1AI05-0264-1} An
-expression_function_declaration (*note 6.8: S0189.) declares an
-expression function.  A completion is not allowed for an
+6/4
+{AI05-0177-1AI05-0177-1} {AI05-0264-1AI05-0264-1}
+{AI95-0147-1AI95-0147-1} An expression_function_declaration (*note 6.8:
+S0189.) declares an expression function.  The return expression of an
+expression function is the expression or aggregate of the
+expression_function_declaration.  A completion is not allowed for an
 expression_function_declaration (*note 6.8: S0189.); however, an
 expression_function_declaration (*note 6.8: S0189.) can complete a
 previous declaration.
 
                           _Dynamic Semantics_
 
-7/3
-{AI05-0177-1AI05-0177-1} {AI05-0262-1AI05-0262-1} The execution of an
-expression function is invoked by a subprogram call.  For the execution
-of a subprogram call on an expression function, the execution of the
-subprogram_body executes an implicit function body containing only a
-simple_return_statement whose expression is that of the expression
-function.
+7/4
+{AI05-0177-1AI05-0177-1} {AI05-0262-1AI05-0262-1}
+{AI95-0147-1AI95-0147-1} The execution of an expression function is
+invoked by a subprogram call.  For the execution of a subprogram call on
+an expression function, the execution of the subprogram_body executes an
+implicit function body containing only a simple_return_statement whose
+expression is the return expression of the expression function.
 
 7.a/3
           Discussion: The last sentence effectively means that all of
@@ -33148,6 +34721,13 @@ failing the Elaboration_Check.
           {AI05-0177-1AI05-0177-1} Expression functions are new in Ada
           2012.
 
+                       _Extensions to Ada 2012_
+
+9.b/4
+          {AI12-0157-1AI12-0157-1} A aggregate can directly be the
+          return expression of an expression function.  This eliminates
+          the double parentheses that otherwise would be necessary.
+
 
 File: aarm2012.info,  Node: 7,  Next: 8,  Prev: 6,  Up: Top
 
@@ -33160,7 +34740,7 @@ logically related entities.  Typically, a package 
contains the
 declaration of a type (often a private type or private extension) along
 with the declarations of primitive subprograms of the type, which can be
 called from outside the package, while their inner workings remain
-hidden from outside users.  ]
+hidden from outside users. ]
 
 * Menu:
 
@@ -33381,9 +34961,9 @@ from the internal entities.]
 
 4
 A package_body shall be the completion of a previous package_declaration
-(*note 7.1: S0190.) or generic_package_declaration (*note 12.1: S0272.).
+(*note 7.1: S0190.) or generic_package_declaration (*note 12.1: S0273.).
 A library package_declaration (*note 7.1: S0190.) or library
-generic_package_declaration (*note 12.1: S0272.) shall not have a body
+generic_package_declaration (*note 12.1: S0273.) shall not have a body
 unless it requires a body[; pragma Elaborate_Body can be used to require
 a library_unit_declaration (*note 10.1.1: S0249.) to have a body (see
 *note 10.2.1::) if it would not otherwise require one].
@@ -33409,7 +34989,7 @@ single null_statement.  For a noninstance, nonlibrary 
package, this body
 occurs at the end of the declarative_part (*note 3.11: S0086.) of the
 innermost enclosing program unit or block_statement (*note 5.6: S0160.);
 if there are several such packages, the order of the implicit
-package_bodies is unspecified.  [(For an instance, the implicit
+package_bodies is unspecified. [(For an instance, the implicit
 package_body (*note 7.2: S0192.) occurs at the place of the
 instantiation (see *note 12.3::).  For a library package, the place is
 partially determined by the elaboration dependences (see Clause *note
@@ -33541,7 +35121,7 @@ private type or private extension serves to separate 
the characteristics
 that can be used directly by outside program units (that is, the logical
 properties) from other characteristics whose direct use is confined to
 the package (the details of the definition of the type itself).  See
-*note 3.9.1:: for an overview of type extensions.  ]
+*note 3.9.1:: for an overview of type extensions. ]
 
                      _Language Design Principles_
 
@@ -33913,7 +35493,7 @@ type shall be a limited interface.
 If the declaration of a partial view includes a known_discriminant_part,
 then the full_type_declaration shall have a fully conforming
 [(explicit)] known_discriminant_part [(see *note 6.3.1::, "*note 6.3.1::
-Conformance Rules")].  [The ancestor subtype may be unconstrained; the
+Conformance Rules")]. [The ancestor subtype may be unconstrained; the
 parent subtype of the full view is required to be constrained (see *note
 3.7::).]
 
@@ -33991,7 +35571,7 @@ full_type_declaration shall define a definite subtype.
 13
 If the ancestor subtype of a private extension has constrained
 discriminants, then the parent subtype of the full view shall impose a
-statically matching constraint on those discriminants.  
+statically matching constraint on those discriminants. 
 
 13.a
           Ramification: If the parent type of the full view is not the
@@ -34042,13 +35622,13 @@ statically matching constraint on those discriminants.
 
 14
 A private_type_declaration declares a private type and its first
-subtype.  Similarly, a private_extension_declaration (*note 7.3: S0194.)
+subtype. Similarly, a private_extension_declaration (*note 7.3: S0194.)
 declares a private extension and its first subtype.
 
 14.a
           Discussion: A package-private type is one declared by a
           private_type_declaration; that is, a private type other than a
-          generic formal private type.  Similarly, a package-private
+          generic formal private type. Similarly, a package-private
           extension is one declared by a private_extension_declaration.
           These terms are not used in the RM95 version of this document.
 
@@ -34088,7 +35668,7 @@ its parent type and its progenitor types (see *note 
3.4:: and *note
 
 17
 The elaboration of a private_type_declaration creates a partial view of
-a type.  The elaboration of a private_extension_declaration elaborates
+a type. The elaboration of a private_extension_declaration elaborates
 the ancestor_subtype_indication, and creates a partial view of a type.
 
      NOTES
@@ -34275,7 +35855,7 @@ File: aarm2012.info,  Node: 7.3.1,  Next: 7.3.2,  Up: 
7.3
 1
 [For a type declared in the visible part of a package or generic
 package, certain operations on the type do not become visible until
-later in the package -- either in the private part or the body.  Such
+later in the package -- either in the private part or the body. Such
 private operations are available only inside the declarative region of
 the package or generic package.]
 
@@ -34348,22 +35928,22 @@ inherited from the ancestor[, and, for example, 
whether the type is
 considered to be a descendant of a record type, or a descendant only
 through record extensions of a more distant ancestor].
 
-5.2/3
-{AI05-0115-1AI05-0115-1} [It is possible for there to be places where a
-derived type is visibly a descendant of an ancestor type, but not a
-descendant of even a partial view of the ancestor type, because the
-parent of the derived type is not visibly a descendant of the ancestor.
-In this case, the derived type inherits no characteristics from that
-ancestor, but nevertheless is within the derivation class of the
-ancestor for the purposes of type conversion, the "covers" relationship,
-and matching against a formal derived type.  In this case the derived
-type is considered to be a descendant of an incomplete view of the
-ancestor.]
+5.2/4
+{AI05-0115-1AI05-0115-1} {AI12-0065-1AI12-0065-1} [Furthermore, it is
+possible for there to be places where a derived type is known to be
+derived indirectly from an ancestor type, but is not a descendant of
+even a partial view of the ancestor type, because the parent of the
+derived type is not visibly a descendant of the ancestor.  In this case,
+the derived type inherits no characteristics from that ancestor, but
+nevertheless is within the derivation class of the ancestor for the
+purposes of type conversion, the "covers" relationship, and matching
+against a formal derived type.  In this case the derived type is
+effectively a descendant of an incomplete view of the ancestor.]
 
-5.a.1/3
+5.a/3
           Discussion: Here is an example of this situation:
 
-5.a.2/3
+5.b/3
                package P is
                   type T is private;
                   C : constant T;
@@ -34372,17 +35952,22 @@ ancestor.]
                   C : constant T := 42;
                end P;
 
-5.a.3/3
-               with P;
+5.c/4
+               {AI12-0065-1AI12-0065-1} with P;
                package Q is
-                   type T2 is new P.T;
+                   type T2 is new P.T;  -- T2 is not a descendant of Integer
                end Q;
 
-5.a.4/3
-               with Q;
+5.d/4
+               {AI12-0065-1AI12-0065-1} with Q;
                package P.Child is
                    type T3 is new Q.T2;
                private
+                   -- Here T3 is known to be indirectly derived from Integer, 
but inherits
+                   -- no characteristics from Integer, since T2 inherits no 
characteristics
+                   -- from Integer.
+                   -- However, we allow an explicit conversion of T3 to/from 
Integer.
+                   -- Hence, T3 is effectively a descendant of an "incomplete" 
view of Integer.
                    Int : Integer := 52;
                    V : T3 := T3(P.C);  -- Legal: conversion allowed
                    W : T3 := T3(Int);  -- Legal: conversion allowed
@@ -34720,16 +36305,23 @@ Example of a type with private operations:
           has to be the case (so that privacy is not violated), but it
           wasn't spelled out in earlier versions of Ada.
 
+                    _Wording Changes from Ada 2012_
+
+20.g/4
+          {AI12-0065-1AI12-0065-1} Corrigendum: Clarified the
+          clarification added by AI05-0115-1, as it turned out to not be
+          that clear.  Hopefully this version is better.
+
 
 File: aarm2012.info,  Node: 7.3.2,  Prev: 7.3.1,  Up: 7.3
 
 7.3.2 Type Invariants
 ---------------------
 
-1/3
-{AI05-0146-1AI05-0146-1} For a private type or private extension, the
-following language-defined aspects may be specified with an
-aspect_specification (see *note 13.1.1::):
+1/4
+{AI05-0146-1AI05-0146-1} {AI12-0041-1AI12-0041-1} For a private type,
+private extension, or interface, the following language-defined aspects
+may be specified with an aspect_specification (see *note 13.1.1::):
 
 2/3
 {AI05-0146-1AI05-0146-1} {AI05-0250-1AI05-0250-1} Type_Invariant
@@ -34745,13 +36337,16 @@ aspect_specification (see *note 13.1.1::):
           Aspect Description for Type_Invariant: A condition that must
           hold true for all objects of a type.
 
-3/3
-{AI05-0146-1AI05-0146-1} Type_Invariant'Class
+3/4
+{AI05-0146-1AI05-0146-1} {AI12-0041-1AI12-0041-1}
+{AI12-0150-1AI12-0150-1} Type_Invariant'Class
                This aspect shall be specified by an expression, called
                an invariant expression.  Type_Invariant'Class may be
                specified on a private_type_declaration (*note 7.3:
-               S0193.) or a private_extension_declaration (*note 7.3:
-               S0194.).
+               S0193.), a private_extension_declaration (*note 7.3:
+               S0194.), or a full_type_declaration (*note 3.2.1: S0024.)
+               for an interface type.  Type_Invariant'Class determines a
+               class-wide type invariant for a tagged type.
 
 3.a/3
           Reason: {AI05-0254-1AI05-0254-1} A class-wide type invariant
@@ -34772,16 +36367,27 @@ aspect_specification (see *note 13.1.1::):
 {AI05-0146-1AI05-0146-1} The expected type for an invariant expression
 is any boolean type.
 
-5/3
-{AI05-0146-1AI05-0146-1} [Within an invariant expression, the identifier
+5/4
+{AI05-0146-1AI05-0146-1} {AI12-0150-1AI12-0150-1}
+{AI12-0159-1AI12-0159-1} [Within an invariant expression, the identifier
 of the first subtype of the associated type denotes the current instance
-of the type.]  Within an invariant expression associated with type T,
-the type of the current instance is T for the Type_Invariant aspect and
-T'Class for the Type_Invariant'Class aspect.
+of the type.]  Within an invariant expression for the Type_Invariant
+aspect of a type T, the type of this current instance is T. Within an
+invariant expression for the Type_Invariant'Class aspect of a type T,
+the type of this current instance is interpreted as though it had a
+(notional) type NT that is a visible formal derived type whose ancestor
+type is T.[ The effect of this interpretation is that the only
+operations that can be applied to this current instance are those
+defined for such a formal derived type.]
 
 5.a/3
           Proof: The first sentence is given formally in *note 13.1.1::.
 
+5.b/4
+          Reason: {AI12-0159-1AI12-0159-1} The rules for
+          Type_Invariant'Class ensure that the invariant expression is
+          well-defined for any type descended from T.
+
                            _Legality Rules_
 
 6/3
@@ -34792,6 +36398,12 @@ specified for an abstract type.
 6.a/3
           Proof: The first sentence is given formally in *note 13.1.1::.
 
+6.1/4
+{AI12-0042-1AI12-0042-1} If a type extension occurs at a point where a
+private operation of some ancestor is visible and inherited, and a
+Type_Invariant'Class expression applies to that ancestor, then the
+inherited operation shall be abstract or shall be overridden.
+
                           _Static Semantics_
 
 7/3
@@ -34808,15 +36420,36 @@ all descendants of T.]
 
                           _Dynamic Semantics_
 
-9/3
+9/4
 {AI05-0146-1AI05-0146-1} {AI05-0247-1AI05-0247-1}
-{AI05-0290-1AI05-0290-1} If one or more invariant expressions apply to a
-type T, then an invariant check is performed at the following places, on
-the specified object(s):
+{AI05-0290-1AI05-0290-1} {AI12-0150-1AI12-0150-1} If one or more
+invariant expressions apply to a nonabstract type T, then an invariant
+check is performed at the following places, on the specified object(s):
+
+10/4
+   * {AI12-0133-1AI12-0133-1} After successful initialization of an
+     object of type T by default (see *note 3.3.1::), the check is
+     performed on the new object unless the partial view of T has
+     unknown discriminants;
+
+10.a/4
+          Reason: {AI12-0133-1AI12-0133-1} The check applies everywhere,
+          even in the package body, because default initialization has
+          to work the same for clients as it does within the package.
+          As such, checks within the package are either harmless or will
+          uncover a bug that could also happen to a client.  However, if
+          the partial view of the type has unknown discriminants, no
+          client of the package can declare a default-initialized
+          object.  Therefore, no invariant check is needed, as all
+          default initialized objects are necessarily inside the
+          package.
 
-10/3
-   * After successful default initialization of an object of type T, the
-     check is performed on the new object;
+10.1/4
+   * {AI12-0049-1AI12-0049-1} After successful explicit initialization
+     of the completion of a deferred constant with a part of type T, if
+     the completion is inside the immediate scope of the full view of T,
+     and the deferred constant is visible outside the immediate scope of
+     T, the check is performed on the part(s) of type T;
 
 11/3
    * After successful conversion to type T, the check is performed on
@@ -34859,43 +36492,93 @@ the specified object(s):
           object and then calls the operation of its parent type.  If
           the tag is for itself, the operation is complete.
 
-15/3
-   * After a successful call on the Read or Input stream attribute of
-     the type T, the check is performed on the object initialized by the
-     stream attribute;
+15/4
+   * {AI12-0146-1AI12-0146-1} After a successful call on the Read or
+     Input stream-oriented attribute of the type T, the check is
+     performed on the object initialized by the attribute;
 
 16/3
    * {AI05-0146-1AI05-0146-1} {AI05-0269-1AI05-0269-1} An invariant is
      checked upon successful return from a call on any subprogram or
      entry that:
 
-17/3
-        * {AI05-0146-1AI05-0146-1} {AI05-0269-1AI05-0269-1} is declared
-          within the immediate scope of type T (or by an instance of a
-          generic unit, and the generic is declared within the immediate
-          scope of type T), and
-
-18/3
-        * is visible outside the immediate scope of type T or overrides
-          an operation that is visible outside the immediate scope of T,
-          and
-
-19/3
-        * {AI05-0289-1AI05-0289-1} has a result with a part of type T,
-          or one or more parameters with a part of type T, or an access
-          to variable parameter whose designated type has a part of type
-          T.
+17/4
+        * {AI05-0146-1AI05-0146-1} {AI05-0269-1AI05-0269-1}
+          {AI12-0042-1AI12-0042-1} is declared within the immediate
+          scope of type T (or by an instance of a generic unit, and the
+          generic is declared within the immediate scope of type T),
+
+18/4
+        * This paragraph was deleted.{AI12-0042-1AI12-0042-1}
+
+19/4
+        * {AI05-0289-1AI05-0289-1} {AI12-0042-1AI12-0042-1}
+          {AI12-0044-1AI12-0044-1} and either:
+
+19.1/4
+             * {AI12-0044-1AI12-0044-1} has a result with a part of type
+               T, or
+
+19.2/4
+             * {AI12-0044-1AI12-0044-1} has one or more out or in out
+               parameters with a part of type T, or
+
+19.3/4
+             * {AI12-0044-1AI12-0044-1} {AI12-0149-1AI12-0149-1} has an
+               access-to-object parameter or result whose designated
+               type has a part of type T, or
+
+19.4/4
+             * {AI12-0042-1AI12-0042-1} {AI12-0044-1AI12-0044-1} is a
+               procedure or entry that has an in parameter with a part
+               of type T,
+
+19.a/4
+          Discussion: We don't check in parameters for functions to
+          avoid infinite recursion for calls to public functions
+          appearing in invariant expressions.  Such function calls are
+          unavoidable for class-wide invariants and likely for other
+          invariants.  This is the simplest rule that avoids trouble,
+          and functions are much more likely to be queries that don't
+          modify their parameters than other callable entities.
+
+19.5/4
+        * {AI12-0042-1AI12-0042-1} and either:
+
+19.6/4
+             * T is a private type or a private extension and the
+               subprogram or entry is visible outside the immediate
+               scope of type T or overrides an inherited operation that
+               is visible outside the immediate scope of T, or
+
+19.7/4
+             * T is a record extension, and the subprogram or entry is a
+               primitive operation visible outside the immediate scope
+               of type T or overrides an inherited operation that is
+               visible outside the immediate scope of T.
 
 20/3
      {AI05-0146-1AI05-0146-1} {AI05-0269-1AI05-0269-1} The check is
      performed on each such part of type T.
 
-21/3
-{AI05-0290-1AI05-0290-1} If performing checks is required by the
-Invariant or Invariant'Class assertion policies (see *note 11.4.2::) in
-effect at the point of corresponding aspect specification applicable to
-a given type, then the respective invariant expression is considered
-enabled.
+20.1/4
+   * {AI12-0042-1AI12-0042-1} For a view conversion to a class-wide type
+     occurring within the immediate scope of T, from a specific type
+     that is a descendant of T (including T itself), a check is
+     performed on the part of the object that is of type T.
+
+20.a/4
+          Reason: Class-wide objects are treated as though they exist
+          outside the scope of every type, and may be passed across
+          package "boundaries" freely without further invariant checks.
+
+21/4
+{AI05-0290-1AI05-0290-1} {AI12-0080-1AI12-0080-1}
+{AI12-0159-1AI12-0159-1} If performing checks is required by the
+Type_Invariant or Type_Invariant'Class assertion policies (see *note
+11.4.2::) in effect at the point of the corresponding aspect
+specification applicable to a given type, then the respective invariant
+expression is considered enabled.
 
 21.a/3
           Ramification: If a class-wide invariant expression is enabled
@@ -34919,6 +36602,14 @@ by-copy in out or out parameters.  Invariant checks, 
any postcondition
 check, and any constraint or predicate checks associated with in out or
 out parameters are performed in an arbitrary order.
 
+22.1/4
+{AI12-0150-1AI12-0150-1} {AI12-0159-1AI12-0159-1} For an invariant check
+on a value of type T1 based on a class-wide invariant expression
+inherited from an ancestor type T, any operations within the invariant
+expression that were resolved as primitive operations of the (notional)
+formal derived type NT are bound to the corresponding operations of type
+T1 in the evaluation of the invariant expression for the check on T1.
+
 23/3
 {AI05-0146-1AI05-0146-1} {AI05-0247-1AI05-0247-1}
 {AI05-0250-1AI05-0250-1} The invariant checks performed on a call are
@@ -34926,10 +36617,11 @@ determined by the subprogram or entry actually 
invoked, whether
 directly, as part of a dispatching call, or as part of a call through an
 access-to-subprogram value.
 
-23.a/3
-          Ramification: Invariant checks on subprogram return are not
-          performed on objects that are accessible only through access
-          values.  It is also possible to call through an
+23.a/4
+          Ramification: {AI12-0149-1AI12-0149-1} Invariant checks on
+          subprogram return are not performed on objects that are
+          accessible only through access values that are subcomponents
+          of some other object.  It is also possible to call through an
           access-to-subprogram value and reach a subprogram body that
           has visibility on the full declaration of a type, from outside
           the immediate scope of the type.  No invariant checks will be
@@ -34937,8 +36629,13 @@ access-to-subprogram value.
           externally visible.  These cases represent "holes" in the
           protection provided by invariant checks; but note that these
           holes cannot be caused by clients of the type T with the
-          invariant without help for the designer of the package
-          containing T.
+          invariant.  The designer of the package has to declare a
+          visible type with an access-to-T subcomponent and use it as a
+          parameter or result to subprograms in the package, or pass the
+          client an access-to-subprogram value representing a private
+          operation of the package.  In the absence of such things, all
+          values that the client can see will be checked for a private
+          type or extension.
 
 23.b/3
           Implementation Note: The implementation might want to produce
@@ -34977,6 +36674,99 @@ access-to-subprogram value.
           {AI05-0250-1AI05-0250-1} {AI05-0289-1AI05-0289-1}
           Type_Invariant aspects are new.
 
+                    _Inconsistencies With Ada 2012_
+
+24.c/4
+          {AI12-0042-1AI12-0042-1} Corrigendum: Clarified the definition
+          of when invariant checks occur for inherited subprograms.
+          This might cause checks to be added or removed in some cases.
+          These are all rare cases involving class-wide type invariants
+          and either record extensions or multiple levels of derivation.
+          Additionally, implementations probably make the checks as the
+          intent seems clear, even though the formal language did not
+          include them.  So we do not expect this to be a problem in
+          practice.
+
+24.d/4
+          {AI12-0042-1AI12-0042-1} Corrigendum: Added invariant checks
+          for conversions to class-wide types.  This might cause an
+          invariant check to fail in some cases where they would not be
+          made in the original definition of Ada 2012.  Such cases
+          represent a hole where a value that fails an invariant could
+          "leak out" of a package, and as such will detect far more bugs
+          than it causes.
+
+24.e/4
+          {AI12-0044-1AI12-0044-1} Corrigendum: Removed the invariant
+          check for in parameters of functions, so that typical
+          invariants don't cause infinite recursion.  This is strictly
+          inconsistent, as the Ada 2012 definition has this check;
+          therefore, programs could depend on Assertion_Error being
+          raised upon the return from some call on a public function.
+          However, as the intent of assertion checking is to uncover
+          bugs, a program that depends on a bug occurring seems very
+          unlikely.
+
+24.f/4
+          {AI12-0049-1AI12-0049-1} {AI12-0149-1AI12-0149-1} Corrigendum:
+          Added an invariant check for deferred constants and for access
+          values returned from functions, so they cannot be used to
+          "leak" values that violate the invariant from a package.  This
+          is strictly inconsistent, as the Ada 2012 definition is
+          missing these checks; therefore, programs could depend on
+          using values that violate an invariant outside of the package
+          of definition.  These will not raise Assertion_Error in Ada
+          2012 as defined in the Ada 2012 Standard, but ought to do so
+          (as noted by this change).  As these are a violation of the
+          intent of invariants, we think that this change will mainly
+          reveal bugs rather than cause them.
+
+24.g/4
+          {AI12-0150-1AI12-0150-1} {AI12-0159-1AI12-0159-1} Corrigendum:
+          Eliminated unintentional redispatching from class-wide type
+          invariants.  This means that a different body might be
+          evaluated for a type invariant check where the value has a
+          different tag than that of the type.  The change means that
+          the behavior of Type_Invariant and Type_Invariant'Class will
+          be the same for a particular subprogram, and that the known
+          behavior of the operations can be assumed.  We expect that
+          this change will primarily fix bugs, as it will make
+          class-wide type invariants work more like expected.  In the
+          case where redispatching is desired, an explicit conversion to
+          a class-wide type can be used.
+
+                   _Incompatibilities With Ada 2012_
+
+24.h/4
+          {AI12-0042-1AI12-0042-1} Corrigendum: A private operation that
+          is inherited in the visible part of a package to which a
+          class-wide invariant applies now requires overriding.  This is
+          a very unlikely situation, and will prevent problems with
+          invariant checks being added to routines that assume that they
+          don't need them.
+
+                       _Extensions to Ada 2012_
+
+24.i/4
+          {AI12-0041-1AI12-0041-1} Corrigendum: Class-wide type
+          invariants can now be specified on interfaces as well as
+          private types.
+
+                    _Wording Changes from Ada 2012_
+
+24.j/4
+          {AI12-0133-1AI12-0133-1} Corrigendum: Clarified that all
+          objects that are initialized by default should have an
+          invariant check, and added an exception for types with unknown
+          discriminants, as in that case the client cannot declare a
+          default-initialized object.  This exception to the check is
+          formally inconsistent, but since it is only removing an
+          assertion failure that occurs where no assertion should be
+          checked anyway (meaning it's more likely to fix a bug than
+          cause one), and programs depending on assertion failure should
+          be very rare outside of test cases, we don't document this as
+          inconsistent.
+
 
 File: aarm2012.info,  Node: 7.4,  Next: 7.5,  Prev: 7.3,  Up: 7
 
@@ -34994,12 +36784,12 @@ from other languages (see *note Annex B::).]
 2/3
 {AI05-0229-1AI05-0229-1} {AI05-0269-1AI05-0269-1} [ A deferred constant
 declaration is an object_declaration with the reserved word constant but
-no initialization expression.]  The constant declared by a deferred
-constant declaration is called a deferred constant.  [Unless the Import
+no initialization expression.] The constant declared by a deferred
+constant declaration is called a deferred constant. [Unless the Import
 aspect (see *note B.1::) is True for a deferred constant declaration,
 the ] deferred constant declaration requires a completion, which shall
 be a full constant declaration (called the full declaration of the
-deferred constant).  
+deferred constant). 
 
 2.a
           Proof: The first sentence is redundant, as it is stated
@@ -35335,9 +37125,9 @@ whose dependent_expressions are permitted by this rule:
 2.8/2
    * the expression of a return statement (see *note 6.5::)
 
-2.9/3
-   * {AI05-0177-1AI05-0177-1} the expression of an
-     expression_function_declaration (see *note 6.8::)
+2.9/4
+   * {AI05-0177-1AI05-0177-1} {AI12-0157-1AI12-0157-1} the return
+     expression of an expression function (see *note 6.8::)
 
 2.10/3
    * the default_expression or actual parameter for a formal object of
@@ -35642,7 +37432,7 @@ Example of a package with a limited type:
           closely to parentheses as possible.
 
 23.i/3
-          {AI05-0178-1AI05-0178-1} Added wording so that expression
+          {AI05-0177-1AI05-0177-1} Added wording so that expression
           functions can return limited entities.
 
 23.j/3
@@ -35667,12 +37457,12 @@ finalized before being destroyed (for example, by 
leaving a
 subprogram_body containing an object_declaration, or by a call to an
 instance of Unchecked_Deallocation).  An assignment operation is used as
 part of assignment_statements, explicit initialization, parameter
-passing, and other operations.  
+passing, and other operations. 
 
 2
 Default definitions for these three fundamental operations are provided
 by the language, but a controlled type gives the user additional control
-over parts of these operations.  In particular, the user can define, for
+over parts of these operations. In particular, the user can define, for
 a controlled type, an Initialize procedure which is invoked immediately
 after the normal default initialization of a controlled object, a
 Finalize procedure which is invoked immediately before finalization of
@@ -36425,14 +38215,14 @@ File: aarm2012.info,  Node: 7.6.1,  Up: 7.6
 constructs and entities.  A master is the execution of a construct that
 includes finalization of local objects after it is complete (and after
 waiting for any local tasks -- see *note 9.3::), but before leaving.
-Other constructs and entities are left immediately upon completion.  ]
+Other constructs and entities are left immediately upon completion. ]
 
                           _Dynamic Semantics_
 
 2/2
 {AI95-00318-02AI95-00318-02} The execution of a construct or entity is
 complete when the end of that execution has been reached, or when a
-transfer of control (see *note 5.1::) causes it to be abandoned.  
+transfer of control (see *note 5.1::) causes it to be abandoned. 
 Completion due to reaching the end of execution, or due to the transfer
 of control of an exit_statement, return statement, goto_statement, or
 requeue_statement or of the selection of a terminate_alternative is
@@ -36449,8 +38239,8 @@ exception].
 {AI95-00162-01AI95-00162-01} {AI95-00416-01AI95-00416-01} After
 execution of a construct or entity is complete, it is left, meaning that
 execution continues with the next action, as defined for the execution
-that is taking place.  Leaving an execution happens immediately after
-its completion, except in the case of a master: the execution of a body
+that is taking place. Leaving an execution happens immediately after its
+completion, except in the case of a master: the execution of a body
 other than a package_body; the execution of a statement; or the
 evaluation of an expression, function_call, or range that is not part of
 an enclosing expression, function_call, range, or simple_statement
@@ -36577,12 +38367,13 @@ For the finalization of an object:
           access discriminant to refer to other components of the
           enclosing object prior to their being finalized.
 
-9.b/3
-          To be honest: {AI05-0099-1AI05-0099-1} The components
-          discussed here are all of the components that the object
-          actually has, not just those components that are statically
-          identified by the type of the object.  These can be different
-          if the object has a classwide type.
+9.b/4
+          To be honest: {AI05-0099-1AI05-0099-1}
+          {AI12-0005-1AI12-0005-1} The components discussed here are all
+          of the components that the object actually has, not just those
+          components that are statically identified by the type of the
+          object.  These can be different if the object has a class-wide
+          type.
 
 9.1/2
    * {AI95-00416-01AI95-00416-01} If the object has coextensions (see
@@ -36613,7 +38404,7 @@ finalization of objects created by declarations in the 
master in the
 reverse order of their creation.  After the finalization of a master is
 complete, the objects finalized as part of its finalization cease to
 exist, as do any types and subtypes defined and created within the
-master.  
+master. 
 
 11.a/3
           This paragraph was deleted.{AI05-0190-1AI05-0190-1}
@@ -36850,9 +38641,9 @@ operation:
      assignment_statement, other adjustments due to be performed might
      or might not be performed, and then Program_Error is raised.
      During its propagation, finalization might or might not be applied
-     to objects whose Adjust failed.  For an Adjust invoked as part of
-     an assignment_statement, any other adjustments due to be performed
-     are performed, and then Program_Error is raised.
+     to objects whose Adjust failed. For an Adjust invoked as part of an
+     assignment_statement, any other adjustments due to be performed are
+     performed, and then Program_Error is raised.
 
 16.a/2
           Reason: {8652/00248652/0024} {AI95-00193-01AI95-00193-01}
@@ -37312,11 +39103,12 @@ elaborated instead of at the first freezing point of 
the access type.
           which is now covered by the additional places where masters
           are defined.
 
-24.ee/3
-          {AI05-0099-1AI05-0099-1} Correction: Clarified the
-          finalization rules so that there is no doubt that privacy is
-          ignored, and to ensure that objects of classwide interface
-          types are finalized based on their specific concrete type.
+24.ee/4
+          {AI05-0099-1AI05-0099-1} {AI12-0005-1AI12-0005-1} Correction:
+          Clarified the finalization rules so that there is no doubt
+          that privacy is ignored, and to ensure that objects of
+          class-wide interface types are finalized based on their
+          specific concrete type.
 
 24.ff/3
           {AI05-0107-1AI05-0107-1} Correction: Allowed premature
@@ -37326,8 +39118,8 @@ elaborated instead of at the first freezing point of 
the access type.
           the permission.
 
 24.gg/3
-          {AI05-0111-3AI05-0111-3} Added a permission to finalize object
-          allocated from a subpool later than usual.
+          {AI05-0111-3AI05-0111-3} Added a permission to finalize an
+          object allocated from a subpool later than usual.
 
 24.hh/3
           {AI05-0142-4AI05-0142-4} Added text to specially define the
@@ -37407,6 +39199,9 @@ can occur]:
    * any declaration, other than that of an enumeration type, that is
      not a completion [of a previous declaration];
 
+2.1/4
+   * {AI12-0094-1AI12-0094-1} an access_definition;
+
 3
    * a block_statement;
 
@@ -37633,6 +39428,29 @@ region.
           *note 6.5::) is added to the list of constructs that have a
           declarative region.
 
+                       _Extensions to Ada 2012_
+
+18.r/4
+          {AI12-0094-1AI12-0094-1} Corrigendum: access_definition is
+          added to the list of constructs that have a declarative
+          region.  This allows parameter names declared in anonymous
+          access type subprogram types to be the same as other names
+          declared outside.  For instance:
+
+18.s/4
+               type Foo is record
+                  A : Natural;
+                  B : access procedure (A : Boolean);
+               end record;
+
+18.t/4
+          This is now legal, as one would expect; it was illegal in
+          previous versions of Ada as the parameter A and the component
+          A were homographs in the same declarative region (see *note
+          8.3::).  Note that some implementations already allow this
+          common sense interpretation, so this extension may in fact be
+          used in existing code.
+
 
 File: aarm2012.info,  Node: 8.2,  Next: 8.3,  Prev: 8.1,  Up: 8
 
@@ -37714,7 +39532,7 @@ exceptions:
 4
    * The immediate scope of a declaration in the private part of a
      library unit does not include the visible part of any public
-     descendant of that library unit.  
+     descendant of that library unit. 
 
 4.a
           Ramification: In other words, a declaration in the private
@@ -37812,7 +39630,7 @@ associated declaration.
 
 11
 The immediate scope of a declaration is also the immediate scope of the
-entity or view declared by the declaration.  Similarly, the scope of a
+entity or view declared by the declaration. Similarly, the scope of a
 declaration is also the scope of the entity or view declared by the
 declaration.
 
@@ -37872,9 +39690,15 @@ declaration.
                that occurs immediately within the body might include
                some children.
 
+12/4
+{AI12-0003-1AI12-0003-1} The immediate scope of a pragma that is not
+used as a configuration pragma is defined to be the region extending
+from immediately after the pragma to the end of the declarative region
+immediately enclosing the pragma.
+
      NOTES
 
-12/3
+13/3
      4  {AI05-0299-1AI05-0299-1} There are notations for denoting
      visible declarations that are not directly visible.  For example,
      parameter_specification (*note 6.1: S0175.)s are in the visible
@@ -37884,7 +39708,7 @@ declaration.
      of a package can be denoted by expanded names appearing outside the
      package, and can be made directly visible by a use_clause.
 
-12.a/3
+13.a/3
           Ramification: {AI95-00114-01AI95-00114-01}
           {AI05-0299-1AI05-0299-1} There are some obscure cases
           involving generics in which there is no such notation.  See
@@ -37892,7 +39716,7 @@ declaration.
 
                         _Extensions to Ada 83_
 
-12.b
+13.b
           The fact that the immediate scope of an overloadable
           declaration does not include its profile is new to Ada 95.  It
           replaces RM83-8.3(16), which said that within a subprogram
@@ -37905,11 +39729,11 @@ declaration.
 
                      _Wording Changes from Ada 83_
 
-12.c
+13.c
           We no longer need to talk about the scope of notations,
           identifiers, character_literals, and operator_symbols.
 
-12.d/3
+13.d/3
           {AI05-0299-1AI05-0299-1} The notion of "visible part" has been
           extended in Ada 95.  The syntax of task and protected units
           now allows private parts, thus requiring us to be able to talk
@@ -37926,33 +39750,33 @@ declaration.
           the concept is used only in arcane visibility rules, so we
           localize it to this subclause.
 
-12.e
+13.e
           In Ada 83, the semantics of with_clauses was described in
           terms of visibility.  It is now described in terms of
           [immediate] scope.
 
-12.f
+13.f
           We have clarified that the following is illegal (where Q and R
           are library units):
 
-12.g
+13.g
                package Q is
                    I : Integer := 0;
                end Q;
 
-12.h
+13.h
                package R is
                    package X renames Standard;
                    X.Q.I := 17; -- Illegal!
                end R;
 
-12.i
+13.i
           even though Q is declared in the declarative region of
           Standard, because R does not mention Q in a with_clause.
 
                      _Wording Changes from Ada 95_
 
-12.j/2
+13.j/2
           {AI95-00408-01AI95-00408-01} The scope of an
           attribute_definition_clause is defined so that it can be used
           to define the visibility of such a clause, so that can be used
@@ -37961,11 +39785,17 @@ declaration.
 
                     _Wording Changes from Ada 2005_
 
-12.k/3
+13.k/3
           {AI05-0183-1AI05-0183-1} The scope of an aspect_specification
           is defined for similar reasons that it was defined for
           attribute_definition_clauses.
 
+                    _Wording Changes from Ada 2012_
+
+13.l/4
+          {AI12-0003-1AI12-0003-1} The immediate scope of a pragma is
+          defined as it is used in other rules in the Standard.
+
 
 File: aarm2012.info,  Node: 8.3,  Next: 8.4,  Prev: 8.2,  Up: 8
 
@@ -37984,7 +39814,7 @@ A declaration is defined to be directly visible at 
places where a name
 consisting of only an identifier or operator_symbol is sufficient to
 denote the declaration; that is, no selected_component notation or
 special context (such as preceding => in a named association) is
-necessary to denote the declaration.  A declaration is defined to be
+necessary to denote the declaration. A declaration is defined to be
 visible wherever it is directly visible, as well as at other places
 where some name (such as a selected_component) can denote the
 declaration.
@@ -37997,16 +39827,16 @@ is required.
 
 4
 There are two kinds of direct visibility: immediate visibility and
-use-visibility.  A declaration is immediately visible at a place if it
-is directly visible because the place is within its immediate scope.  A
+use-visibility. A declaration is immediately visible at a place if it is
+directly visible because the place is within its immediate scope. A
 declaration is use-visible if it is directly visible because of a
 use_clause (see *note 8.4::).  Both conditions can apply.
 
 5
 A declaration can be hidden, either from direct visibility, or from all
-visibility, within certain parts of its scope.  Where hidden from all
+visibility, within certain parts of its scope. Where hidden from all
 visibility, it is not visible at all (neither using a direct_name nor a
-selector_name).  Where hidden from direct visibility, only direct
+selector_name). Where hidden from direct visibility, only direct
 visibility is lost; visibility using a selector_name is still possible.
 
 6
@@ -38037,7 +39867,7 @@ are overloadable[, meaning that overloading is allowed 
for them].
 
 8
 Two declarations are homographs if they have the same defining name,
-and, if both are overloadable, their profiles are type conformant.  [An
+and, if both are overloadable, their profiles are type conformant. [An
 inner declaration hides any outer homograph from direct visibility.]
 
 8.a/2
@@ -38048,7 +39878,7 @@ inner declaration hides any outer homograph from direct 
visibility.]
 9/1
 {8652/00258652/0025} {AI95-00044-01AI95-00044-01} [Two homographs are
 not generally allowed immediately within the same declarative region
-unless one overrides the other (see Legality Rules below).]  The only
+unless one overrides the other (see Legality Rules below).] The only
 declarations that are overridable are the implicit declarations for
 predefined operators and inherited primitive subprograms.  A declaration
 overrides another homograph that occurs immediately within the same
@@ -38131,7 +39961,7 @@ declarative region in the following cases:
                if more than one such homograph remains that is not thus
                overridden, then if they are all fully conformant with
                one another, one is chosen arbitrarily; if not, they are
-               all hidden from all visibility.  
+               all hidden from all visibility. 
 
 12.a/2
           Discussion: In the case where the implementation arbitrarily
@@ -38246,7 +40076,7 @@ visibility, as follows:
 18/3
              * {AI95-00345-01AI95-00345-01} {AI05-0177-1AI05-0177-1} For
                a package_declaration, generic_package_declaration (*note
-               12.1: S0272.), subprogram_body (*note 6.3: S0177.), or
+               12.1: S0273.), subprogram_body (*note 6.3: S0177.), or
                expression_function_declaration (*note 6.8: S0189.), the
                declaration is hidden from all visibility only until the
                reserved word is of the declaration;
@@ -38349,7 +40179,7 @@ aspect_specification is visible everywhere within its 
scope.
 
 24
 A direct_name shall resolve to denote a directly visible declaration
-whose defining name is the same as the direct_name.  A selector_name
+whose defining name is the same as the direct_name. A selector_name
 shall resolve to denote a visible declaration whose defining name is the
 same as the selector_name.
 
@@ -38391,7 +40221,7 @@ rules also apply to dispatching operations declared in 
the visible part
 of an instance of a generic unit.  However, they do not apply to other
 overloadable declarations in an instance[; such declarations may have
 type conformant profiles in the instance, so long as the corresponding
-declarations in the generic were not type conformant].  
+declarations in the generic were not type conformant]. 
 
 26.a
           Discussion: Normally, these rules just mean you can't
@@ -38770,11 +40600,12 @@ declarations in the generic were not type conformant].
 
                     _Wording Changes from Ada 2005_
 
-29.ee/3
-          {AI05-0177-1AI05-0177-1} Added wording so that the parameters
-          of an expression_function_declaration (*note 6.8: S0189.) are
-          visible in the expression of the function.  (It would be
-          pretty useless without such a rule.)
+29.ee/4
+          {AI05-0177-1AI05-0177-1} {AI12-0157-1AI12-0157-1} Added
+          wording so that the parameters of an
+          expression_function_declaration (*note 6.8: S0189.) are
+          visible in the return expression of the function.  (It would
+          be pretty useless without such a rule.)
 
 29.ff/3
           {AI05-0183-1AI05-0183-1} The visibility of an
@@ -38812,7 +40643,7 @@ null_procedure_declaration (*note 6.7: S0188.),
 expression_function_declaration (*note 6.8: S0189.), subprogram_body,
 subprogram_body_stub (*note 10.1.3: S0259.),
 subprogram_renaming_declaration (*note 8.5.4: S0203.),
-generic_instantiation (*note 12.3: S0275.) of a subprogram, or
+generic_instantiation (*note 12.3: S0276.) of a subprogram, or
 subprogram_declaration (*note 6.1: S0163.) other than a protected
 subprogram has an overriding_indicator (*note 8.3.1: S0195.), then:
 
@@ -39364,7 +41195,7 @@ renamed object and the type defined by the 
access_definition:
 
 4.3/2
    * {AI95-00409-01AI95-00409-01} shall both be access-to-subprogram
-     types with subtype conformant designated profiles.  
+     types with subtype conformant designated profiles. 
 
 4.4/2
 {AI95-00423-01AI95-00423-01} For an object_renaming_declaration with a
@@ -39378,7 +41209,7 @@ null_exclusion or an access_definition that has a 
null_exclusion:
      of G shall have a null_exclusion;
 
 4.6/2
-   * otherwise, the subtype of the object_name shall exclude null.  In
+   * otherwise, the subtype of the object_name shall exclude null. In
      addition to the places where Legality Rules normally apply (see
      *note 12.3::), this rule applies also in the private part of an
      instance of a generic unit.
@@ -39424,7 +41255,7 @@ null_exclusion or an access_definition that has a 
null_exclusion:
 shall not be a subcomponent that depends on discriminants of an object
 whose nominal subtype is unconstrained unless the object is known to be
 constrained.  A slice of an array shall not be renamed if this
-restriction disallows renaming of the array.  In addition to the places
+restriction disallows renaming of the array. In addition to the places
 where Legality Rules normally apply, these rules apply also in the
 private part of an instance of a generic unit.
 
@@ -39724,7 +41555,7 @@ File: aarm2012.info,  Node: 8.5.4,  Next: 8.5.5,  Prev: 
8.5.3,  Up: 8.5
 1/3
 {AI05-0299-1AI05-0299-1} A subprogram_renaming_declaration can serve as
 the completion of a subprogram_declaration; such a renaming_declaration
-is called a renaming-as-body.  A subprogram_renaming_declaration that is
+is called a renaming-as-body. A subprogram_renaming_declaration that is
 not a completion is called a renaming-as-declaration[, and is used to
 rename a subprogram (possibly an enumeration literal) or an entry].
 
@@ -39751,7 +41582,7 @@ in the subprogram_specification.
 
 4/3
 {AI05-0239-1AI05-0239-1} The profile of a renaming-as-declaration shall
-be mode conformant, with that of the renamed callable entity.  
+be mode conformant, with that of the renamed callable entity. 
 
 4.1/2
 {AI95-00423-01AI95-00423-01} For a parameter or result subtype of the
@@ -39767,10 +41598,10 @@ subprogram_specification that has an explicit 
null_exclusion:
 
 4.3/2
    * otherwise, the subtype of the corresponding parameter or result
-     type of the renamed callable entity shall exclude null.  In
-     addition to the places where Legality Rules normally apply (see
-     *note 12.3::), this rule applies also in the private part of an
-     instance of a generic unit.
+     type of the renamed callable entity shall exclude null. In addition
+     to the places where Legality Rules normally apply (see *note
+     12.3::), this rule applies also in the private part of an instance
+     of a generic unit.
 
 4.a/2
           Reason: This rule prevents "lying".  Null must never be the
@@ -39783,16 +41614,16 @@ subprogram_specification that has an explicit 
null_exclusion:
 {8652/00278652/0027} {8652/00288652/0028} {AI95-00135-01AI95-00135-01}
 {AI95-00145-01AI95-00145-01} {AI05-0239-1AI05-0239-1} The profile of a
 renaming-as-body shall conform fully to that of the declaration it
-completes.  If the renaming-as-body completes that declaration before
-the subprogram it declares is frozen, the profile shall be mode
-conformant with that of the renamed callable entity and the subprogram
-it declares takes its convention from the renamed subprogram; otherwise,
-the profile shall be subtype conformant with that of the renamed
-callable entity and the convention of the renamed subprogram shall not
-be Intrinsic.  A renaming-as-body is illegal if the declaration occurs
-before the subprogram whose declaration it completes is frozen, and the
-renaming renames the subprogram itself, through one or more subprogram
-renaming declarations, none of whose subprograms has been frozen.
+completes. If the renaming-as-body completes that declaration before the
+subprogram it declares is frozen, the profile shall be mode conformant
+with that of the renamed callable entity and the subprogram it declares
+takes its convention from the renamed subprogram; otherwise, the profile
+shall be subtype conformant with that of the renamed callable entity and
+the convention of the renamed subprogram shall not be Intrinsic. A
+renaming-as-body is illegal if the declaration occurs before the
+subprogram whose declaration it completes is frozen, and the renaming
+renames the subprogram itself, through one or more subprogram renaming
+declarations, none of whose subprograms has been frozen.
 
 5.a/1
           Reason: The otherwise part of the second sentence is to allow
@@ -39826,7 +41657,7 @@ renaming declarations, none of whose subprograms has 
been frozen.
           Ramification: An entry_declaration, unlike a
           subprogram_declaration, cannot be completed with a
           renaming_declaration (*note 8.5: S0199.).  Nor can a
-          generic_subprogram_declaration (*note 12.1: S0271.).
+          generic_subprogram_declaration (*note 12.1: S0272.).
 
 5.d
           The syntax rules prevent a protected subprogram declaration
@@ -40262,8 +42093,9 @@ a complete context:
           pragma arguments are allowed to be ambiguous, and ambiguity
           applies to a complete context.
 
-9
-   * The expression of a case_statement.
+9/4
+   * {AI12-0040-1AI12-0040-1} The selecting_expression of a
+     case_statement or case_expression.
 
 9.a
           Ramification: This means that the expression is resolved
@@ -40326,7 +42158,7 @@ complete context, not including constituents of inner 
complete contexts:
 
 14
 A possible interpretation is one that obeys the syntax rules and the
-visibility rules.  An acceptable interpretation is a possible
+visibility rules. An acceptable interpretation is a possible
 interpretation that obeys the overloading rules[, that is, those rules
 that specify an expected type or expected profile, or specify how a
 construct shall resolve or be interpreted.]
@@ -40392,6 +42224,23 @@ declaration, except in the following cases:
           the declarative region of T: here T denotes the type, not the
           current instance.
 
+17.1/4
+     {AI12-0068-1AI12-0068-1} Within an aspect_specification for a type
+     or subtype, the current instance represents a value of the type; it
+     is not an object.  The nominal subtype of this value is given by
+     the subtype itself (the first subtype in the case of a
+     type_declaration), prior to applying any predicate specified
+     directly on the type or subtype.  If the type or subtype is
+     by-reference, the associated object with the value is the object
+     associated (see *note 6.2::) with the execution of the usage name.
+
+17.c/4
+          Ramification: For the purposes of Legality Rules, the current
+          instance acts as a value within an aspect_specification.  It
+          might really be an object (and has to be for a by-reference
+          type), but that isn't discoverable by direct use of the name
+          of the current instance.
+
 18
    * If a usage name appears within the declarative region of a
      generic_declaration (but not within its generic_formal_part) and it
@@ -40420,7 +42269,7 @@ A usage name that denotes a view also denotes the 
entity of that view.
 {AI95-00231-01AI95-00231-01} The expected type for a given expression,
 name, or other construct determines, according to the type resolution
 rules given below, the types considered for the construct during
-overload resolution.  [ The type resolution rules provide support for
+overload resolution. [ The type resolution rules provide support for
 class-wide programming, universal literals, dispatching operations, and
 anonymous access types:]
 
@@ -40508,7 +42357,7 @@ anonymous access types:]
 In certain contexts, [such as in a subprogram_renaming_declaration,] the
 Name Resolution Rules define an expected profile for a given name; in
 such cases, the name shall resolve to the name of a callable entity
-whose profile is type conformant with the expected profile.  
+whose profile is type conformant with the expected profile. 
 
 26.a/3
           Ramification: {AI05-0239-1AI05-0239-1} The parameter and
@@ -40551,18 +42400,19 @@ operand of a type_conversion.
           renames).  Otherwise, such constructs wouldn't allow
           aggregates, 'Access, and so on.
 
-27.1/3
+27.1/4
 {AI05-0102-1AI05-0102-1} {AI05-0149-1AI05-0149-1}
-{AI05-0299-1AI05-0299-1} Other than for the simple_expression of a
-membership test, if the expected type for a name or expression is not
-the same as the actual type of the name or expression, the actual type
-shall be convertible to the expected type (see *note 4.6::); further, if
-the expected type is a named access-to-object type with designated type
-D1 and the actual type is an anonymous access-to-object type with
-designated type D2, then D1 shall cover D2, and the name or expression
-shall denote a view with an accessibility level for which the statically
-deeper relationship applies[; in particular it shall not denote an
-access parameter nor a stand-alone access object].
+{AI05-0299-1AI05-0299-1} {AI12-0039-1AI12-0039-1} Other than for the
+tested_simple_expression of a membership test, if the expected type for
+a name or expression is not the same as the actual type of the name or
+expression, the actual type shall be convertible to the expected type
+(see *note 4.6::); further, if the expected type is a named
+access-to-object type with designated type D1 and the actual type is an
+anonymous access-to-object type with designated type D2, then D1 shall
+cover D2, and the name or expression shall denote a view with an
+accessibility level for which the statically deeper relationship
+applies[; in particular it shall not denote an access parameter nor a
+stand-alone access object].
 
 27.c/3
           Reason: This rule prevents an implicit conversion that would
@@ -40637,7 +42487,7 @@ For a complete context, if there is exactly one overall 
acceptable
 interpretation where each constituent's interpretation is the same as or
 preferred (in the above sense) over those in all other overall
 acceptable interpretations, then that one overall acceptable
-interpretation is chosen.  Otherwise, the complete context is ambiguous.
+interpretation is chosen. Otherwise, the complete context is ambiguous.
 
 31
 A complete context other than a pragma_argument_association shall not be
@@ -40647,7 +42497,7 @@ ambiguous.
 A complete context that is a pragma_argument_association is allowed to
 be ambiguous (unless otherwise specified for the particular pragma), but
 only if every acceptable interpretation of the pragma argument is as a
-name that statically denotes a callable entity.  Such a name denotes all
+name that statically denotes a callable entity. Such a name denotes all
 of the declarations determined by its interpretations, and all of the
 views declared by these declarations.
 
@@ -40910,6 +42760,37 @@ views declared by these declarations.
           This rule was scattered about the Standard, we moved a single
           generalized version here.
 
+                    _Inconsistencies With Ada 2012_
+
+34.y/4
+          {AI12-0068-1AI12-0068-1} Corrigendum: Added a rule to specify
+          that the current instance of a type or subtype is a value
+          within an aspect_specification.  This could be inconsistent if
+          a predicate or invariant uses the Constrained attribute on the
+          current instance (it will always be False now, while it might
+          have returned True in original Ada 2012).  More likely, a
+          usage of a current instance as a prefix of an attribute will
+          become illegal (such as Size or Alignment).  Any such code is
+          very tricky.  Moreover, as this is a new feature of Ada 2012,
+          there are not that many predicates and invariants, and the
+          ones that exist are very unlikely to be this tricky.  Thus we
+          do not believe that there will be any practical effect to this
+          change, other than to explicitly allow common implementation
+          strategies.
+
+                    _Wording Changes from Ada 2012_
+
+34.z/4
+          {AI12-0040-1AI12-0040-1} Corrigendum: Added wording to clarify
+          that the selecting_expression of a case_expression is a
+          complete context, just like that of a case_statement.
+          Clearly, everyone expects these to work the same way.
+          Moreover, since it would be a lot of extra work to treat
+          case_expressions differently, it is quite unlikely that any
+          compiler would implement the much more complicated resolution
+          necessary (and we are not aware of any that did).  Therefore,
+          we didn't document this as a potential incompatibility.
+
 
 File: aarm2012.info,  Node: 9,  Next: 10,  Prev: 8,  Up: Top
 
@@ -40918,7 +42799,7 @@ File: aarm2012.info,  Node: 9,  Next: 10,  Prev: 8,  
Up: Top
 
 1/3
 {AI05-0299-1AI05-0299-1} The execution of an Ada program consists of the
-execution of one or more tasks.  Each task represents a separate thread
+execution of one or more tasks. Each task represents a separate thread
 of control that proceeds independently and concurrently between the
 points where it interacts with other tasks.  The various forms of task
 interaction are described in this clause, and include: 
@@ -40972,11 +42853,11 @@ and task_body, which together define a program unit 
called a task unit.
                           _Dynamic Semantics_
 
 10
-Over time, tasks proceed through various states.  A task is initially
+Over time, tasks proceed through various states. A task is initially
 inactive; upon activation, and prior to its termination it is either
-blocked (as part of some task interaction) or ready to run.  While
-ready, a task competes for the available execution resources that it
-requires to run.
+blocked (as part of some task interaction) or ready to run. While ready,
+a task competes for the available execution resources that it requires
+to run.
 
 10.a/3
           Discussion: {AI05-0229-1AI05-0229-1} The means for selecting
@@ -41087,7 +42968,7 @@ Paragraph 8 was deleted.
                           _Static Semantics_
 
 9
-A task_definition defines a task type and its first subtype.  The first
+A task_definition defines a task type and its first subtype. The first
 list of task_items of a task_definition (*note 9.1: S0207.), together
 with the known_discriminant_part (*note 3.7: S0061.), if any, is called
 the visible part of the task unit.  [ The optional list of task_items
@@ -41196,7 +43077,7 @@ declaration, at most one of the following shall apply:
    * {AI95-00345-01AI95-00345-01} {AI95-00397-01AI95-00397-01} the
      inherited subprogram is implemented by a single entry of the task
      type; in which case its prefixed view profile shall be subtype
-     conformant with that of the task entry.  
+     conformant with that of the task entry. 
 
 9.f/2
           Ramification: An entry may implement two subprograms from the
@@ -41452,9 +43333,9 @@ File: aarm2012.info,  Node: 9.2,  Next: 9.3,  Prev: 
9.1,  Up: 9
 
 1
 The execution of a task of a given task type consists of the execution
-of the corresponding task_body.  The initial part of this execution is
+of the corresponding task_body. The initial part of this execution is
 called the activation of the task; it consists of the elaboration of the
-declarative_part of the task_body.  Should an exception be propagated by
+declarative_part of the task_body. Should an exception be propagated by
 the elaboration of its declarative_part, the activation of the task is
 defined to have failed, and it becomes a completed task.
 
@@ -41519,7 +43400,7 @@ the activations are not initiated until after the 
function returns.
 5
 The task that created the new tasks and initiated their activations (the
 activator) is blocked until all of these activations complete
-(successfully or not).  Once all of these activations are complete, if
+(successfully or not). Once all of these activations are complete, if
 the activation of any of the tasks has failed [(due to the propagation
 of an exception)], Tasking_Error is raised in the activator, at the
 place at which it initiated the activations.  Otherwise, the activator
@@ -41638,11 +43519,11 @@ File: aarm2012.info,  Node: 9.3,  Next: 9.4,  Prev: 
9.2,  Up: 9
 Each task (other than an environment task -- see *note 10.2::) depends
 on one or more masters (see *note 7.6.1::), as follows:
 
-2
-   * If the task is created by the evaluation of an allocator for a
-     given access type, it depends on each master that includes the
-     elaboration of the declaration of the ultimate ancestor of the
-     given access type.
+2/4
+   * {AI12-0070-1AI12-0070-1} If the task is created by the evaluation
+     of an allocator for a given named access type, it depends on each
+     master that includes the elaboration of the declaration of the
+     ultimate ancestor of the given access type.
 
 3
    * If the task is created by the elaboration of an object_declaration,
@@ -41677,8 +43558,8 @@ A task is said to be completed when the execution of 
its corresponding
 task_body is completed.  A task is said to be terminated when any
 finalization of the task_body has been performed (see *note 7.6.1::).
 [The first step of finalizing a master (including a task_body) is to
-wait for the termination of any tasks dependent on the master.]  The
-task executing the master is blocked until all the dependents have
+wait for the termination of any tasks dependent on the master.] The task
+executing the master is blocked until all the dependents have
 terminated.  [Any remaining finalization is then performed and the
 master is left.]
 
@@ -41801,8 +43682,16 @@ Example of task dependence:
 
 20.d/2
           {AI95-00416-01AI95-00416-01} Added missing wording that
-          explained the master of tasks that are neither object
-          declarations nor allocators, such as function returns.
+          explained the master of tasks that are neither
+          object_declarations nor allocators, such as function returns.
+
+                    _Wording Changes from Ada 2012_
+
+20.e/4
+          {AI12-0070-1AI12-0070-1} Corrigendum: Ensured that the master
+          of tasks that are not allocators of named access types is
+          correctly determined.  (Ignoring the accessibility rules of
+          *note 3.10.2:: could not be intended.)
 
 
 File: aarm2012.info,  Node: 9.4,  Next: 9.5,  Prev: 9.3,  Up: 9
@@ -41813,13 +43702,13 @@ File: aarm2012.info,  Node: 9.4,  Next: 9.5,  Prev: 
9.3,  Up: 9
 1
 A protected object provides coordinated access to shared data, through
 calls on its visible protected operations, which can be protected
-subprograms or protected entries.  A protected unit is declared by a
+subprograms or protected entries. A protected unit is declared by a
 protected declaration, which has a corresponding protected_body.  A
 protected declaration may be a protected_type_declaration, in which case
 it declares a named protected type; alternatively, it may be a
 single_protected_declaration, in which case it defines an anonymous
 protected type, as well as declaring a named protected object of that
-type.  
+type. 
 
                                _Syntax_
 
@@ -41869,10 +43758,13 @@ type.
         { protected_operation_item }
        end [protected_identifier];
 
-8/1
+8/4
      {8652/00098652/0009} {AI95-00137-01AI95-00137-01}
-     protected_operation_item ::= subprogram_declaration
+     {AI12-0147-1AI12-0147-1} protected_operation_item ::=
+     subprogram_declaration
           | subprogram_body
+          | null_procedure_declaration
+          | expression_function_declaration
           | entry_body
           | aspect_clause
 
@@ -41890,8 +43782,8 @@ Paragraph 10 was deleted.
 
 11/2
 {AI95-00345-01AI95-00345-01} {AI95-00401-01AI95-00401-01} A
-protected_definition defines a protected type and its first subtype.
-The list of protected_operation_declaration (*note 9.4: S0213.)s of a
+protected_definition defines a protected type and its first subtype. The
+list of protected_operation_declaration (*note 9.4: S0213.)s of a
 protected_definition (*note 9.4: S0212.), together with the
 known_discriminant_part (*note 3.7: S0061.), if any, is called the
 visible part of the protected unit.  [ The optional list of
@@ -41918,7 +43810,7 @@ profile is type conformant with the prefixed view 
profile of the
 inherited subprogram, the inherited subprogram is said to be implemented
 by the conforming protected subprogram or entry using an implicitly
 declared nonabstract subprogram which has the same profile as the
-inherited subprogram and which overrides it.  
+inherited subprogram and which overrides it. 
 
 11.b/2
           Ramification: The inherited subprograms can only come from an
@@ -42000,7 +43892,7 @@ declaration, at most one of the following shall apply:
      inherited subprogram is implemented by a protected subprogram or
      single entry of the protected type, in which case its prefixed view
      profile shall be subtype conformant with that of the protected
-     subprogram or entry.  
+     subprogram or entry. 
 
 11.8/2
 If neither applies, the inherited subprogram shall be a null procedure.
@@ -42063,7 +43955,7 @@ generic unit.
 
 12
 [The elaboration of a protected declaration elaborates the
-protected_definition.  The elaboration of a single_protected_declaration
+protected_definition. The elaboration of a single_protected_declaration
 (*note 9.4: S0211.) also creates an object of an (anonymous) protected
 type.]
 
@@ -42382,12 +44274,13 @@ Examples of protected objects:
                    _Incompatibilities With Ada 2005_
 
 35.g/3
-          {AI05-0291-1AI05-0291-1} When an inherited subprogram is
-          implemented by a protected function, the first parameter has
-          to be an in parameter, but not an access-to-variable type.
-          Ada 2005 allowed access-to-variable parameters in this case;
-          the parameter will need to be changed to access-to-constant
-          with the addition of the constant keyword.
+          {AI05-0291-1AI05-0291-1} Correction: When an inherited
+          subprogram is implemented by a protected function, the first
+          parameter has to be an in parameter, but not an
+          access-to-variable type.  Original Ada 2005 allowed
+          access-to-variable parameters in this case; the parameter will
+          need to be changed to access-to-constant with the addition of
+          the constant keyword.
 
                        _Extensions to Ada 2005_
 
@@ -42408,6 +44301,15 @@ Examples of protected objects:
           {AI05-0090-1AI05-0090-1} Correction: Added the missing
           defining name in the no conflicting primitive operation rule.
 
+                       _Extensions to Ada 2012_
+
+35.k/4
+          {AI12-0147-1AI12-0147-1} Corrigendum: Null procedures and
+          expression functions are allowed in protected bodies.  We
+          consider this an omission, as there is no reason why the
+          convinient shorthand notations should not be allowed in this
+          context.
+
 
 File: aarm2012.info,  Node: 9.5,  Next: 9.6,  Prev: 9.4,  Up: 9
 
@@ -42702,6 +44604,35 @@ defined to be a variable (updating is permitted).]
           parameter, of mode in for a protected function, and of mode in
           out for a protected procedure (or protected entry).
 
+2.1/4
+{AI12-0129-1AI12-0129-1} For a type declared by a
+protected_type_declaration or for the anonymous type of an object
+declared by a single_protected_declaration, the following
+language-defined type-related representation aspect may be specified:
+
+2.2/4
+Exclusive_Functions
+               The type of aspect Exclusive_Functions is Boolean.  If
+               not specified (including by inheritance), the aspect is
+               False.
+
+2.3/4
+
+               A value of True for this aspect indicates that protected
+               functions behave in the same way as protected procedures
+               with respect to mutual exclusion and queue servicing (see
+               below).
+
+2.a.1/4
+          Aspect Description for Exclusive_Functions: Specifies mutual
+          exclusion behavior of protected functions in a protected type.
+
+2.4/4
+{AI12-0129-1AI12-0129-1} A protected procedure or entry is an exclusive
+protected operation.  A protected function of a protected type P is an
+exclusive protected operation if the Exclusive_Functions aspect of P is
+True.
+
                           _Dynamic Semantics_
 
 3
@@ -42716,27 +44647,27 @@ protected object; the protected action completes 
after the body of the
 subprogram is executed.  [A protected action can also be started by an
 entry call (see *note 9.5.3::).]
 
-4
-A new protected action is not started on a protected object while
-another protected action on the same protected object is underway,
-unless both actions are the result of a call on a protected function.
-This rule is expressible in terms of the execution resource associated
-with the protected object:
+4/4
+{AI12-0129-1AI12-0129-1} A new protected action is not started on a
+protected object while another protected action on the same protected
+object is underway, unless both actions are the result of a call on a
+nonexclusive protected function.  This rule is expressible in terms of
+the execution resource associated with the protected object:
 
-5
-   * Starting a protected action on a protected object corresponds to
-     acquiring the execution resource associated with the protected
-     object, either for concurrent read-only access if the protected
-     action is for a call on a protected function, or for exclusive
-     read-write access otherwise;
+5/4
+   * {AI12-0129-1AI12-0129-1} Starting a protected action on a protected
+     object corresponds to acquiring the execution resource associated
+     with the protected object, either for exclusive read-write access
+     if the protected action is for a call on an exclusive protected
+     operation, or for concurrent read-only access otherwise;
 
 6
    * Completing the protected action corresponds to releasing the
      associated execution resource.
 
-7
-[After performing an operation on a protected object other than a call
-on a protected function, but prior to completing the associated
+7/4
+{AI12-0129-1AI12-0129-1} [After performing an exclusive protected
+operation on a protected object, but prior to completing the associated
 protected action, the entry queues (if any) of the protected object are
 serviced (see *note 9.5.3::).]
 
@@ -42744,7 +44675,7 @@ serviced (see *note 9.5.3::).]
 
 8
 During a protected action, it is a bounded error to invoke an operation
-that is potentially blocking.  The following are defined to be
+that is potentially blocking. The following are defined to be
 potentially blocking operations:
 
 8.a
@@ -42894,6 +44825,13 @@ Examples of protected subprogram calls (see *note 
9.4::):
           protected actions by converting the Bounded Error into a
           required check.
 
+                       _Extensions to Ada 2012_
+
+24.b/4
+          {AI12-0129-1AI12-0129-1} Corrigendum: Aspect
+          Exclusive_Functions is new.  The term "exclusive protected
+          operations" is new.
+
 
 File: aarm2012.info,  Node: 9.5.2,  Next: 9.5.3,  Prev: 9.5.1,  Up: 9.5
 
@@ -43089,7 +45027,7 @@ task_body, and the entry_direct_name (*note 4.1: 
S0092.) shall denote an
 entry_declaration (*note 9.5.2: S0218.) in the corresponding task
 declaration; the profile of the accept_statement (*note 9.5.2: S0219.)
 shall conform fully to that of the corresponding entry_declaration
-(*note 9.5.2: S0218.).  An accept_statement (*note 9.5.2: S0219.) shall
+(*note 9.5.2: S0218.). An accept_statement (*note 9.5.2: S0219.) shall
 have a parenthesized entry_index (*note 9.5.2: S0220.) if and only if
 the corresponding entry_declaration (*note 9.5.2: S0218.) has a
 discrete_subtype_definition (*note 3.6: S0055.).
@@ -43137,8 +45075,8 @@ enclosing task_body.
 An entry_declaration of a protected unit requires a completion[, which
 shall be an entry_body,] and every entry_body (*note 9.5.2: S0221.)
 shall be the completion of an entry_declaration (*note 9.5.2: S0218.) of
-a protected unit.  The profile of the entry_body (*note 9.5.2: S0221.)
-shall conform fully to that of the corresponding declaration.  
+a protected unit. The profile of the entry_body (*note 9.5.2: S0221.)
+shall conform fully to that of the corresponding declaration. 
 
 16.a
           Ramification: An entry_declaration, unlike a
@@ -43167,7 +45105,7 @@ An entry_body_formal_part shall have an 
entry_index_specification (*note
 In this case, the discrete_subtype_definition (*note 3.6: S0055.)s of
 the entry_declaration (*note 9.5.2: S0218.) and the
 entry_index_specification (*note 9.5.2: S0224.) shall fully conform to
-one another (see *note 6.3.1::).  
+one another (see *note 6.3.1::). 
 
 18
 A name that denotes a formal parameter of an entry_body is not allowed
@@ -43191,7 +45129,7 @@ with one such entry for each value of the entry index 
subtype defined by
 the discrete_subtype_definition (*note 3.6: S0055.).  [A name for an
 entry of a family takes the form of an indexed_component, where the
 prefix denotes the entry_declaration for the family, and the index value
-identifies the entry within the family.]  The term single entry is used
+identifies the entry within the family.] The term single entry is used
 to refer to any entry other than an entry of an entry family.
 
 21
@@ -43234,7 +45172,7 @@ an entry of a task unit, and by the corresponding 
entry_body (*note
 24
 For the execution of an accept_statement, the entry_index, if any, is
 first evaluated and converted to the entry index subtype; this index
-value identifies which entry of the family is to be accepted.  Further
+value identifies which entry of the family is to be accepted. Further
 execution of the accept_statement is then blocked until a caller of the
 corresponding entry is selected (see *note 9.5.3::), whereupon the
 handled_sequence_of_statements, if any, of the accept_statement is
@@ -43272,7 +45210,7 @@ execution independently.]
 [An entry_body is executed when the condition of the entry_barrier
 evaluates to True and a caller of the corresponding single entry, or
 entry of the corresponding entry family, has been selected (see *note
-9.5.3::).]  For the execution of the entry_body (*note 9.5.2: S0221.),
+9.5.3::).] For the execution of the entry_body (*note 9.5.2: S0221.),
 the declarative_part (*note 3.11: S0086.) of the entry_body (*note
 9.5.2: S0221.) is elaborated, and the handled_sequence_of_statements
 (*note 11.2: S0265.) of the body is executed, as for the execution of a
@@ -43396,7 +45334,7 @@ File: aarm2012.info,  Node: 9.5.3,  Next: 9.5.4,  Prev: 
9.5.2,  Up: 9.5
 
 1
 [An entry_call_statement (an entry call) can appear in various
-contexts.]  A simple entry call is a stand-alone statement that
+contexts.] A simple entry call is a stand-alone statement that
 represents an unconditional call on an entry of a target task or a
 protected object.  [Entry calls can also appear as part of
 select_statements (see *note 9.7::).]
@@ -43436,7 +45374,7 @@ protected object is checked to see whether it is open 
or closed:
 7/3
    * {AI05-0264-1AI05-0264-1} An entry of a protected object is open if
      the condition of the entry_barrier of the corresponding entry_body
-     evaluates to True; otherwise, it is closed.  If the evaluation of
+     evaluates to True; otherwise, it is closed. If the evaluation of
      the condition propagates an exception, the exception Program_Error
      is propagated to all current callers of all entries of the
      protected object.
@@ -43462,7 +45400,7 @@ protected object is checked to see whether it is open 
or closed:
 8
 For the execution of an entry_call_statement, evaluation of the name and
 of the parameter associations is as for a subprogram call (see *note
-6.4::).  The entry call is then issued: For a call on an entry of a
+6.4::). The entry call is then issued: For a call on an entry of a
 protected object, a new protected action is started on the object (see
 *note 9.5.1::).  The named entry is checked to see if it is open; if
 open, the entry call is said to be selected immediately, and the
@@ -43508,11 +45446,11 @@ under the following circumstances:
    * When the associated task reaches a corresponding accept_statement,
      or a selective_accept with a corresponding open accept_alternative;
 
-15
-   * If after performing, as part of a protected action on the
-     associated protected object, an operation on the object other than
-     a call on a protected function, the entry is checked and found to
-     be open.
+15/4
+   * {AI12-0129-1AI12-0129-1} If after performing, as part of a
+     protected action on the associated protected object, an exclusive
+     protected operation on the object, the entry is checked and found
+     to be open.
 
 16
 If there is at least one call on a queue corresponding to an open entry,
@@ -43522,7 +45460,7 @@ is executed as above for an entry call that is selected 
immediately.
 
 17
 The entry queuing policy controls selection among queued calls both for
-task and protected entry queues.  The default entry queuing policy is to
+task and protected entry queues. The default entry queuing policy is to
 select calls on a given entry queue in order of arrival.  If calls from
 two or more queues are simultaneously eligible for selection, the
 default entry queuing policy does not specify which queue is serviced
@@ -43603,25 +45541,25 @@ waiting for the entire protected action to complete.
           any case, and the "current_task" function is not guaranteed to
           work during a protected action (see *note C.7.1::).
 
-23
-When the entry of a protected object is checked to see whether it is
-open, the implementation need not reevaluate the condition of the
-corresponding entry_barrier if no variable or attribute referenced by
-the condition (directly or indirectly) has been altered by the execution
-(or cancellation) of a protected procedure or entry call on the object
-since the condition was last evaluated.
+23/4
+{AI12-0129-1AI12-0129-1} When the entry of a protected object is checked
+to see whether it is open, the implementation need not reevaluate the
+condition of the corresponding entry_barrier if no variable or attribute
+referenced by the condition (directly or indirectly) has been altered by
+the execution (or cancellation) of a call to an exclusive protected
+operation of the object since the condition was last evaluated.
 
-23.a
+23.a/4
           Ramification: Changes to variables referenced by an entry
-          barrier that result from actions outside of a protected
-          procedure or entry call on the protected object need not be
-          "noticed."  For example, if a global variable is referenced by
-          an entry barrier, it should not be altered (except as part of
-          a protected action on the object) any time after the barrier
-          is first evaluated.  In other words, globals can be used to
-          "parameterize" a protected object, but they cannot reliably be
-          used to control it after the first use of the protected
-          object.
+          barrier that result from actions outside of a call to an
+          exclusive protected operation of the protected object need not
+          be "noticed."  For example, if a global variable is referenced
+          by an entry barrier, it should not be altered (except as part
+          of a protected action on the object) any time after the
+          barrier is first evaluated.  In other words, globals can be
+          used to "parameterize" a protected object, but they cannot
+          reliably be used to control it after the first use of the
+          protected object.
 
 23.b
           Implementation Note: Note that even if a global variable is
@@ -43762,6 +45700,12 @@ Examples of entry calls:
      Controller.Request(Low)(Some_Item);   --  see *note 9.1::
      Flags(3).Seize;                       --  see *note 9.4::
 
+                    _Wording Changes from Ada 2012_
+
+31.a/4
+          {AI12-0129-1AI12-0129-1} Corrigendum: Revised wording to talk
+          about "exclusive protected operations" (see *note 9.5.1::).
+
 
 File: aarm2012.info,  Node: 9.5.4,  Prev: 9.5.3,  Up: 9.5
 
@@ -43771,9 +45715,9 @@ File: aarm2012.info,  Node: 9.5.4,  Prev: 9.5.3,  Up: 
9.5
 1
 [A requeue_statement can be used to complete an accept_statement or
 entry_body, while redirecting the corresponding entry call to a new (or
-the same) entry queue.  Such a requeue can be performed with or without
+the same) entry queue. Such a requeue can be performed with or without
 allowing an intermediate cancellation of the call, due to an abort or
-the expiration of a delay.  ]
+the expiration of a delay. ]
 
                                _Syntax_
 
@@ -43790,7 +45734,7 @@ procedure or an entry (the requeue target).  The 
profile of the entry,
 or the profile or prefixed profile of the procedure, shall either have
 no parameters, or be type conformant (see *note 6.3.1::) with the
 profile of the innermost enclosing entry_body (*note 9.5.2: S0221.) or
-accept_statement (*note 9.5.2: S0219.).  
+accept_statement (*note 9.5.2: S0219.). 
 
                            _Legality Rules_
 
@@ -43802,16 +45746,56 @@ innermost enclosing body or callable construct.
 5/3
 {AI05-0030-2AI05-0030-2} {AI05-0215-1AI05-0215-1} If the requeue target
 has parameters, then its (prefixed) profile shall be subtype conformant
-with the profile of the innermost enclosing callable construct.  
+with the profile of the innermost enclosing callable construct. 
+
+5.1/4
+{AI12-0090-1AI12-0090-1} Given a requeue_statement where the innermost
+enclosing callable construct is for an entry E1, for every [specific or
+class-wide ]postcondition expression P1 that applies to E1, there shall
+exist a postcondition expression P2 that applies to the requeue target
+E2 such that
+
+5.2/4
+   * P1 is fully conformant with the expression produced by replacing
+     each reference in P2 to a formal parameter of E2 with a reference
+     to the corresponding formal paramter of E1; and
+
+5.3/4
+   * if P1 is enabled, then P2 is also enabled.
+
+5.a/4
+          Discussion: Roughly speaking, the postcondition of the requeue
+          target is required to imply that of the enclosing callable
+          construct.
 
-5.1/3
-{AI05-0030-2AI05-0030-2} {AI05-0215-1AI05-0215-1} If the target is a
-procedure, the name shall denote a renaming of an entry, or shall denote
-a view or a prefixed view of a primitive subprogram of a synchronized
-interface, where the first parameter of the unprefixed view of the
-primitive subprogram shall be a controlling parameter, and the
-Synchronization aspect shall be specified with synchronization_kind
-By_Entry for the primitive subprogram.
+5.4/4
+{AI12-0090-1AI12-0090-1} The requeue target shall not have an applicable
+specific or class-wide postcondition which includes an Old
+attribute_reference.
+
+5.5/4
+{AI12-0090-1AI12-0090-1} If the requeue target is declared immediately
+within the task_definition of a named task type or the
+protected_definition of a named protected type, and if the requeue
+statement occurs within the body of that type, and if the requeue is an
+external requeue, then the requeue target shall not have a specific or
+class-wide postcondition which includes a name denoting either the
+current instance of that type or any entity declared within the
+declaration of that type.
+
+5.b/4
+          Discussion: The above pair of rules always apply; they don't
+          depend on whether or not any of the postconditions are
+          enabled.
+
+5.6/4
+{AI05-0030-2AI05-0030-2} {AI05-0215-1AI05-0215-1}
+{AI12-0090-1AI12-0090-1} If the target is a procedure, the name shall
+denote a renaming of an entry, or shall denote a view or a prefixed view
+of a primitive subprogram of a synchronized interface, where the first
+parameter of the unprefixed view of the primitive subprogram shall be a
+controlling parameter, and the Synchronization aspect shall be specified
+with synchronization_kind By_Entry for the primitive subprogram.
 
 6/3
 {AI05-0030-2AI05-0030-2} In a requeue_statement of an accept_statement
@@ -43864,12 +45848,14 @@ the entry_declaration for the entry_body.
 
                           _Dynamic Semantics_
 
-7/3
-{AI05-0030-2AI05-0030-2} The execution of a requeue_statement proceeds
-by first evaluating the procedure_or_entry_name[, including the prefix
-identifying the target task or protected object and the expression
-identifying the entry within an entry family, if any].  The entry_body
-or accept_statement enclosing the requeue_statement is then completed[,
+7/4
+{AI05-0030-2AI05-0030-2} {AI12-0090-1AI12-0090-1} The execution of a
+requeue_statement proceeds by first evaluating the
+procedure_or_entry_name[, including the prefix identifying the target
+task or protected object and the expression identifying the entry within
+an entry family, if any].  Precondition checks are then performed as for
+a call to the requeue target entry or subprogram.  The entry_body or
+accept_statement enclosing the requeue_statement is then completed[,
 finalized, and left (see *note 7.6.1::)].
 
 8
@@ -43902,10 +45888,11 @@ after leaving the enclosing callable construct:
      -- see *note 9.5::), a protected action is started on the target
      object and proceeds as for a normal entry call (see *note 9.5.3::).
 
-12/3
-{AI05-0030-2AI05-0030-2} If the requeue target named in the
-requeue_statement has formal parameters, then during the execution of
-the accept_statement or entry_body corresponding to the new entry, the
+12/4
+{AI05-0030-2AI05-0030-2} {AI05-0090-1AI05-0090-1} If the requeue target
+named in the requeue_statement has formal parameters, then during the
+execution of the accept_statement or entry_body corresponding to the new
+entry and during the checking of any preconditions of the new entry, the
 formal parameters denote the same objects as did the corresponding
 formal parameters of the callable construct completed by the requeue.
 [In any case, no parameters are specified in a requeue_statement; any
@@ -43951,7 +45938,7 @@ requeue_statement.
      entry family, or vice-versa.  The entry index, if any, plays no
      part in the subtype conformance check between the profiles of the
      two entries; an entry index is part of the entry_name for an entry
-     of a family.  
+     of a family. 
 
                               _Examples_
 
@@ -43978,6 +45965,32 @@ Examples of requeue statements:
           ability to requeue on operations of synchronized interfaces
           that are declared to be an entry.
 
+                    _Inconsistencies With Ada 2012_
+
+20.c/4
+          {AI05-0090-1AI05-0090-1} Corrigendum: We now define that any
+          preconditions of the requeue target are evaluated as part of a
+          requeue_statement.  Original Ada 2012 did not specify this, so
+          a program that requeues when the preconditions fail will raise
+          an exception when none would happen in original Ada 2012.  We
+          don't expect this to be a problem, as in that case, the entry
+          body would be called with some of its preconditions evaluating
+          as False; the body is likely to assume that they are true and
+          probably will have failed in some other way anyway.
+
+                   _Incompatibilities With Ada 2012_
+
+20.d/4
+          {AI05-0090-1AI05-0090-1} Corrigendum: If a requeue target has
+          a different postcondition than the original entry, the requeue
+          is now illegal.  In such a case, the original postcondition
+          would never have been evaluated, and assumptions that the
+          caller relied upon might not be true.  A requeue should be
+          invisible to the caller with respect to any postconditions;
+          thus we only allow it when the original entry has no
+          postconditions or the requeue target has (at least) the same
+          postconditions.
+
 
 File: aarm2012.info,  Node: 9.6,  Next: 9.7,  Prev: 9.5,  Up: 9
 
@@ -43991,7 +46004,7 @@ as a particular point in time (in a 
delay_until_statement (*note 9.6:
 S0228.)), or in seconds from the current time (in a
 delay_relative_statement (*note 9.6: S0229.)).  The language-defined
 package Calendar provides definitions for a type Time and associated
-operations, including a function Clock that returns the current time.  ]
+operations, including a function Clock that returns the current time. ]
 
                                _Syntax_
 
@@ -44009,7 +46022,7 @@ operations, including a function Clock that returns the 
current time.  ]
 
 5
 The expected type for the delay_expression in a delay_relative_statement
-is the predefined type Duration.  The delay_expression in a
+is the predefined type Duration. The delay_expression in a
 delay_until_statement is expected to be of any nonlimited type.
 
                            _Legality Rules_
@@ -44108,13 +46121,13 @@ The following language-defined library package exists:
 
 20
 For the execution of a delay_statement, the delay_expression is first
-evaluated.  For a delay_until_statement, the expiration time for the
+evaluated. For a delay_until_statement, the expiration time for the
 delay is the value of the delay_expression, in the time base associated
-with the type of the expression.  For a delay_relative_statement, the
+with the type of the expression. For a delay_relative_statement, the
 expiration time is defined as the current time, in the time base
 associated with relative delays, plus the value of the delay_expression
 converted to the type Duration, and then rounded up to the next clock
-tick.  The time base associated with relative delays is as defined in
+tick. The time base associated with relative delays is as defined in
 *note D.9::, "*note D.9:: Delay Accuracy" or is implementation defined.
 
 20.a
@@ -44445,17 +46458,17 @@ language-defined library packages exist:
 4/2
         type Time_Offset is range -28*60 .. 28*60;
 
-4.a/2
-          Reason: We want to be able to specify the difference between
-          any two arbitrary time zones.  You might think that 1440 (24
-          hours) would be enough, but there are places (like Tonga,
-          which is UTC+13hr) which are more than 12 hours than UTC.
-          Combined with summer time (known as daylight saving time in
-          some parts of the world) - which switches opposite in the
-          northern and souther hemispheres - and even greater
-          differences are possible.  We know of cases of a 26 hours
-          difference, so we err on the safe side by selecting 28 hours
-          as the limit.
+4.a/4
+          Reason: {AI12-0005-1AI12-0005-1} We want to be able to specify
+          the difference between any two arbitrary time zones.  You
+          might think that 1440 (24 hours) would be enough, but there
+          are places (like Tonga, which is UTC+13hr) which are more than
+          12 hours different than UTC. Combined with summer time (known
+          as daylight saving time in some parts of the world) - which
+          switches opposite in the northern and southern hemispheres -
+          and even greater differences are possible.  We know of cases
+          of a 26 hours difference, so we err on the safe side by
+          selecting 28 hours as the limit.
 
 5/2
         Unknown_Zone_Error : exception;
@@ -45306,8 +47319,8 @@ the selected call is removed from its entry queue and 
the
 handled_sequence_of_statements (*note 11.2: S0265.) (if any) of the
 corresponding accept_statement is executed; after the rendezvous
 completes any subsequent sequence_of_statements (*note 5.1: S0145.) of
-the alternative is executed.  If no selection is immediately possible
-(in the above sense) and there is no else part, the task blocks until an
+the alternative is executed. If no selection is immediately possible (in
+the above sense) and there is no else part, the task blocks until an
 open alternative can be selected.
 
 17
@@ -45401,7 +47414,7 @@ File: aarm2012.info,  Node: 9.7.2,  Next: 9.7.3,  Prev: 
9.7.1,  Up: 9.7
 that is cancelled if the call (or a requeue-with-abort of the call) is
 not selected before the expiration time is reached.  A procedure call
 may appear rather than an entry call for cases where the procedure might
-be implemented by an entry.  ]
+be implemented by an entry. ]
 
                                _Syntax_
 
@@ -45708,14 +47721,18 @@ Example of a time-limited calculation:
         Horribly_Complicated_Recursive_Function(X, Y);
      end select;
 
+14/4
+{AI12-0098-1AI12-0098-1} Note that these examples presume that there are
+abort completion points within the execution of the abortable_part.
+
                         _Extensions to Ada 83_
 
-13.a
+14.a
           Asynchronous_select is new.
 
                         _Extensions to Ada 95_
 
-13.b/2
+14.b/2
           {AI95-00345-01AI95-00345-01} A procedure can be used as the
           triggering_statement (*note 9.7.4: S0243.) of an
           asynchronous_select, if the procedure might actually be an
@@ -45748,7 +47765,7 @@ of the same task type.]
 
 4
 For the execution of an abort_statement, the given task_names are
-evaluated in an arbitrary order.  Each named task is then aborted, which
+evaluated in an arbitrary order. Each named task is then aborted, which
 consists of making the task abnormal and aborting the execution of the
 corresponding task_body, unless it is already completed.
 
@@ -45885,7 +47902,7 @@ points for an execution:
 part of the execution of an abort-deferred operation is a bounded error.
 Similarly, an attempt to create a task that depends on a master that is
 included entirely within the execution of an abort-deferred operation is
-a bounded error.  In both cases, Program_Error is raised if the error is
+a bounded error. In both cases, Program_Error is raised if the error is
 detected by the implementation; otherwise, the operations proceed as
 they would outside an abort-deferred operation, except that an abort of
 the abortable_part or the created task might or might not have an
@@ -46041,14 +48058,13 @@ unspecified whether the parts are independently 
addressable.
           still be updated independently if the hardware efficiently
           supports it.
 
-1.d/3
+1.d/4
           Ramification: {AI05-0009-1AI05-0009-1}
-          {AI05-0201-1AI05-0201-1} An atomic object (including atomic
-          components) is always independently addressable from any other
-          nonoverlapping object.  Any aspect_specification or
-          representation item which would prevent this from being true
-          should be rejected, notwithstanding what this Standard says
-          elsewhere.  Note, however, that the components of an atomic
+          {AI05-0201-1AI05-0201-1} {AI12-0001-1AI12-0001-1} An atomic
+          object (including atomic components) is always independently
+          addressable from any other nonoverlapping object.
+          Aspect_specifications and representation items cannot change
+          that fact.  Note, however, that the components of an atomic
           object are not necessarily atomic.
 
                           _Dynamic Semantics_
@@ -46145,7 +48161,7 @@ circumstances:
 Given an action of assigning to an object, and an action of reading or
 updating a part of the same object (or of a neighboring object if the
 two are not independently addressable), then the execution of the
-actions is erroneous unless the actions are sequential.  Two actions are
+actions is erroneous unless the actions are sequential. Two actions are
 sequential if one of the following is true:
 
 12
@@ -46387,7 +48403,7 @@ As explained below, a partition is constructed from 
library units.
 Syntactically, the declaration of a library unit is a library_item, as
 is the body of a library unit.  An implementation may support a concept
 of a program library (or simply, a "library"), which contains
-library_items and their subunits.  Library units may be organized into a
+library_items and their subunits. Library units may be organized into a
 hierarchy of children, grandchildren, and so on.]
 
 3/3
@@ -46488,7 +48504,7 @@ implementation-defined.
 A library unit is a separately compiled program unit, and is always a
 package, subprogram, or generic unit.  Library units may have other
 (logically nested) library units as children, and may have other program
-units physically nested within them.  A root library unit, together with
+units physically nested within them. A root library unit, together with
 its children and grandchildren and so on, form a subsystem.
 
                      _Implementation Permissions_
@@ -46545,7 +48561,7 @@ File: aarm2012.info,  Node: 10.1.1,  Next: 10.1.2,  Up: 
10.1
 1
 [A library_item is a compilation unit that is the declaration, body, or
 renaming of a library unit.  Each library unit (except Standard) has a
-parent unit, which is a library package or generic library package.]  A
+parent unit, which is a library package or generic library package.] A
 library unit is a child of its parent unit.  The root library units are
 the children of the predefined library package Standard.
 
@@ -46600,11 +48616,11 @@ A library unit is a program unit that is declared by 
a library_item.
 When a program unit is a library unit, the prefix "library" is used to
 refer to it (or "generic library" if generic), as well as to its
 declaration and body, as in "library procedure", "library package_body",
-or "generic library package".  The term compilation unit is used to
-refer to a compilation_unit.  When the meaning is clear from context,
-the term is also used to refer to the library_item of a compilation_unit
-or to the proper_body of a subunit [(that is, the compilation_unit
-without the context_clause and the separate (parent_unit_name))].
+or "generic library package". The term compilation unit is used to refer
+to a compilation_unit.  When the meaning is clear from context, the term
+is also used to refer to the library_item of a compilation_unit or to
+the proper_body of a subunit [(that is, the compilation_unit without the
+context_clause and the separate (parent_unit_name))].
 
 9.a
           Discussion: In this example:
@@ -46634,12 +48650,12 @@ without the context_clause and the separate 
(parent_unit_name))].
 The parent declaration of a library_item (and of the library unit) is
 the declaration denoted by the parent_unit_name (*note 10.1.1: S0252.),
 if any, of the defining_program_unit_name (*note 6.1: S0169.) of the
-library_item.  If there is no parent_unit_name (*note 10.1.1: S0252.),
+library_item. If there is no parent_unit_name (*note 10.1.1: S0252.),
 the parent declaration is the declaration of Standard, the library_item
 is a root library_item, and the library unit (renaming) is a root
 library unit (renaming).  The declaration and body of Standard itself
-have no parent declaration.  The parent unit of a library_item or
-library unit is the library unit declared by its parent declaration.
+have no parent declaration. The parent unit of a library_item or library
+unit is the library unit declared by its parent declaration.
 
 10.a
           Discussion: The declaration and body of Standard are presumed
@@ -46658,9 +48674,9 @@ library unit is the library unit declared by its parent 
declaration.
 
 11
 [The children of a library unit occur immediately within the declarative
-region of the declaration of the library unit.]  The ancestors of a
+region of the declaration of the library unit.] The ancestors of a
 library unit are itself, its parent, its parent's parent, and so on.
-[(Standard is an ancestor of every library unit.)]  The descendant
+[(Standard is an ancestor of every library unit.)] The descendant
 relation is the inverse of the ancestor relation.
 
 11.a
@@ -46676,9 +48692,9 @@ relation is the inverse of the ancestor relation.
 A library_unit_declaration or a library_unit_renaming_declaration (*note
 10.1.1: S0250.) is private if the declaration is immediately preceded by
 the reserved word private; it is otherwise public.  A library unit is
-private or public according to its declaration.  The public descendants
+private or public according to its declaration. The public descendants
 of a library unit are the library unit itself, and the public
-descendants of its public children.  Its other descendants are private
+descendants of its public children. Its other descendants are private
 descendants.
 
 12.a
@@ -47901,18 +49917,18 @@ parent's body can be visible within the subunits.]
           that is disallowed by *note 10.1.1::, "*note 10.1.1::
           Compilation Units - Library Units".
 
-4
-     package_body_stub ::=
+4/3
+     {AI05-0267-1AI05-0267-1} package_body_stub ::=
         package body defining_identifier is separate
            [aspect_specification];
 
-5
-     task_body_stub ::=
+5/3
+     {AI05-0267-1AI05-0267-1} task_body_stub ::=
         task body defining_identifier is separate
            [aspect_specification];
 
-6
-     protected_body_stub ::=
+6/3
+     {AI05-0267-1AI05-0267-1} protected_body_stub ::=
         protected body defining_identifier is separate
            [aspect_specification];
 
@@ -47946,7 +49962,7 @@ defining_identifier as the subunit.
 10/3
 {AI05-0004-1AI05-0004-1} A package_body_stub shall be the completion of
 a package_declaration (*note 7.1: S0190.) or generic_package_declaration
-(*note 12.1: S0272.); a task_body_stub (*note 10.1.3: S0261.) shall be
+(*note 12.1: S0273.); a task_body_stub (*note 10.1.3: S0261.) shall be
 the completion of a task declaration; a protected_body_stub (*note
 10.1.3: S0262.) shall be the completion of a protected declaration.
 
@@ -47956,7 +49972,7 @@ previous declaration, [in which case the _stub declares 
the subprogram].
 If the _stub is a completion, it shall be the completion of a
 subprogram_declaration or generic_subprogram_declaration.  The profile
 of a subprogram_body_stub that completes a declaration shall conform
-fully to that of the declaration.  
+fully to that of the declaration. 
 
 11.a
           Discussion: The part about subprogram_body_stubs echoes the
@@ -47967,7 +49983,7 @@ fully to that of the declaration.
 A subunit that corresponds to a body_stub shall be of the same kind
 (package_, subprogram_, task_, or protected_) as the body_stub.  The
 profile of a subprogram_body subunit shall be fully conformant to that
-of the corresponding body_stub.  
+of the corresponding body_stub. 
 
 13
 A body_stub shall appear immediately within the declarative_part of a
@@ -48336,7 +50352,7 @@ that subprogram.
      constructed when a compilation unit is submitted to the compiler.
      Naming conflicts between different libraries might be resolved by
      treating each library as the root of a hierarchy of child library
-     units.  
+     units. 
 
 9.a
           Implementation Note: Alternatively, naming conflicts could be
@@ -48411,7 +50427,7 @@ units, and compilations.]
                         _Name Resolution Rules_
 
 2
-Certain pragmas are defined to be program unit pragmas.  A name given as
+Certain pragmas are defined to be program unit pragmas. A name given as
 the argument of a program unit pragma shall resolve to denote the
 declarations or renamings of one or more program units that occur
 immediately within the declarative region or compilation in which the
@@ -48435,8 +50451,8 @@ A program unit pragma shall appear in one of these 
places:
      immediately follow in the same compilation (except for other
      pragmas) a library_unit_declaration (*note 10.1.1: S0249.) that is
      a subprogram_declaration (*note 6.1: S0163.),
-     generic_subprogram_declaration (*note 12.1: S0271.), or
-     generic_instantiation (*note 12.3: S0275.), and the pragma shall
+     generic_subprogram_declaration (*note 12.1: S0272.), or
+     generic_instantiation (*note 12.3: S0276.), and the pragma shall
      have an argument that is a name denoting that declaration.
 
 4.a
@@ -48459,8 +50475,8 @@ A program unit pragma shall appear in one of these 
places:
      pragma shall have an argument, which shall be a direct_name that
      denotes one or more of the following (and nothing else): a
      subprogram_declaration (*note 6.1: S0163.), a
-     generic_subprogram_declaration (*note 12.1: S0271.), or a
-     generic_instantiation (*note 12.3: S0275.), of the same
+     generic_subprogram_declaration (*note 12.1: S0272.), or a
+     generic_instantiation (*note 12.3: S0276.), of the same
      declarative_part (*note 3.11: S0086.) or program unit declaration.
 
 6.a
@@ -48838,7 +50854,7 @@ there is one.  A partition's execution is that of its 
tasks.]
 
 9
 [The order of elaboration of library units is determined primarily by
-the elaboration dependences.]  There is an elaboration dependence of a
+the elaboration dependences.] There is an elaboration dependence of a
 given library_item upon another if the given library_item or any of its
 subunits depends semantically on the other library_item.  In addition,
 if a given library_item or any of its subunits has a pragma Elaborate or
@@ -49033,7 +51049,7 @@ in dynamic linking, or "load-and-go" systems.]
 
 25
 The execution of a program consists of the execution of a set of
-partitions.  Further details are implementation defined.  The execution
+partitions.  Further details are implementation defined. The execution
 of a partition starts with the execution of its environment task, ends
 when the environment task terminates, and includes the executions of all
 tasks of the partition.  [The execution of the (implicit) task_body of
@@ -49065,7 +51081,7 @@ such tasks, and then finalizes any remaining objects of 
the partition.]
 Once the environment task has awaited the termination of all other tasks
 of the partition, any further attempt to create a task (during
 finalization) is a bounded error, and may result in the raising of
-Program_Error either upon creation or activation of the task.  If such a
+Program_Error either upon creation or activation of the task. If such a
 task is activated, it is not specified whether the task is awaited prior
 to termination of the environment task.
 
@@ -49489,7 +51505,7 @@ The declaration and body of a preelaborated library 
unit, and all
 subunits that are elaborated as part of elaborating the library unit,
 shall be preelaborable.  All compilation units of a preelaborated
 library unit shall depend semantically only on declared pure or
-preelaborated library_items.  In addition to the places where Legality
+preelaborated library_items. In addition to the places where Legality
 Rules normally apply (see *note 12.3::), these rules also apply in the
 private part of an instance of a generic unit.  [ If a library unit is
 preelaborated, then its declaration, if any, and body, if any, are
@@ -49566,9 +51582,9 @@ view of the type shall have preelaborable 
initialization.  If the pragma
 is applied to a protected type, the protected type shall not have
 entries, and each component of the protected type shall have
 preelaborable initialization.  For any other composite type, the type
-shall have preelaborable initialization.  In addition to the places
-where Legality Rules normally apply (see *note 12.3::), these rules
-apply also in the private part of an instance of a generic unit.
+shall have preelaborable initialization. In addition to the places where
+Legality Rules normally apply (see *note 12.3::), these rules apply also
+in the private part of an instance of a generic unit.
 
 11.c/3
           Reason: {AI05-0028-1AI05-0028-1} The reason why we need the
@@ -49743,7 +51759,7 @@ package is declared pure.  The declaration and body of 
a declared pure
 library unit, and all subunits that are elaborated as part of
 elaborating the library unit, shall be pure.  All compilation units of a
 declared pure library unit shall depend semantically only on declared
-pure library_items.  In addition to the places where Legality Rules
+pure library_items. In addition to the places where Legality Rules
 normally apply (see *note 12.3::), these rules also apply in the private
 part of an instance of a generic unit.  Furthermore, the full view of
 any partial view declared in the visible part of a declared pure library
@@ -49801,6 +51817,18 @@ streaming (see *note 13.13.2::).
           Aspect Description for Pure: Side effects are avoided in the
           subprograms of a given package.
 
+                         _Erroneous Execution_
+
+17.1/4
+{AI12-0076-1AI12-0076-1} Execution is erroneous if some operation (other
+than the initialization or finalization of the object) modifies the
+value of a constant object declared at library-level in a pure package.
+
+17.g/4
+          Discussion: This could be accomplished via a self-referencing
+          pointer or via squirrelling a writable pointer to a controlled
+          object.
+
                      _Implementation Permissions_
 
 18/3
@@ -50120,6 +52148,17 @@ declaration.]
           just said "limited type", which can change via visibility and
           thus isn't appropriate for dynamic semantics permissions.
 
+                    _Wording Changes from Ada 2012_
+
+28.t/4
+          {AI12-0076-1AI12-0076-1} Corrigendum: Explicitly stated that
+          modifying a library-level constant in a pure package is
+          erroneous.  We don't document this as inconsistent as
+          implementations certainly can still do whatever they were
+          previously doing (no change is required); moreover, this case
+          (and many more) were erroneous in Ada 2005 and before, so
+          we're just restoring the previous semantics.
+
 
 File: aarm2012.info,  Node: 11,  Next: 12,  Prev: 10,  Up: Top
 
@@ -50129,12 +52168,12 @@ File: aarm2012.info,  Node: 11,  Next: 12,  Prev: 10, 
 Up: Top
 1/3
 {AI05-0299-1AI05-0299-1} [This clause defines the facilities for dealing
 with errors or other exceptional situations that arise during program
-execution.]  An exception represents a kind of exceptional situation; an
+execution.] An exception represents a kind of exceptional situation; an
 occurrence of such a situation (at run time) is called an exception
 occurrence.  [ To raise an exception is to abandon normal program
 execution so as to draw attention to the fact that the corresponding
-situation has arisen.  Performing some actions in response to the
-arising of an exception is called handling the exception.  ]
+situation has arisen. Performing some actions in response to the arising
+of an exception is called handling the exception.  ]
 
 1.a
           To be honest: ...or handling the exception occurrence.
@@ -50184,7 +52223,7 @@ execution.]
 
 * 11.1 ::     Exception Declarations
 * 11.2 ::     Exception Handlers
-* 11.3 ::     Raise Statements
+* 11.3 ::     Raise Statements and Raise Expressions
 * 11.4 ::     Exception Handling
 * 11.5 ::     Suppressing Checks
 * 11.6 ::     Exceptions and Optimization
@@ -50256,7 +52295,7 @@ The elaboration of an exception_declaration has no 
effect.
 
 6
 The execution of any construct raises Storage_Error if there is
-insufficient storage for that execution.  The amount of storage needed
+insufficient storage for that execution. The amount of storage needed
 for the execution of constructs is unspecified.
 
 6.a
@@ -50345,6 +52384,10 @@ exception_handler.]
 
                            _Legality Rules_
 
+5.1/4
+{AI12-0022-1AI12-0022-1} An exception_name of an exception_choice shall
+denote an exception.
+
 6
 A choice with an exception_name covers the named exception.  A choice
 with others covers all exceptions not named by previous choices of the
@@ -50442,8 +52485,8 @@ Example of an exception handler:
 
 File: aarm2012.info,  Node: 11.3,  Next: 11.4,  Prev: 11.2,  Up: 11
 
-11.3 Raise Statements
-=====================
+11.3 Raise Statements and Raise Expressions
+===========================================
 
 1
 [A raise_statement raises an exception.]
@@ -50454,31 +52497,163 @@ File: aarm2012.info,  Node: 11.3,  Next: 11.4,  
Prev: 11.2,  Up: 11
      {AI95-00361-01AI95-00361-01} raise_statement ::= raise;
            | raise exception_name [with string_expression];
 
+2.1/4
+     {AI12-0022-1AI12-0022-1} {AI12-0152-1AI12-0152-1} raise_expression
+     ::= raise exception_name [with string_simple_expression]
+
+2.2/4
+     {AI12-0152-1AI12-0152-1} If a raise_expression appears within the
+     expression of one of the following contexts, the raise_expression
+     shall appear within a pair of parentheses within the expression:
+
+2.3/4
+        * object_declaration;
+
+2.4/4
+        * modular_type_definition;
+
+2.5/4
+        * floating_point_definition;
+
+2.6/4
+        * ordinary_fixed_point_definition;
+
+2.7/4
+        * decimal_fixed_point_definition;
+
+2.8/4
+        * default_expression;
+
+2.9/4
+        * ancestor_part.
+
+2.a.1/4
+          Reason: Unlike conditional expressions, this doesn't say
+          "immediately surrounded"; the only requirement is that it is
+          somehow within a pair of parentheses that is part of the
+          expression.  We need this restriction in order that
+          raise_expressions cannot be syntactically confused with
+          immediately following constructs (such as
+          aspect_specifications).
+
+2.a.2/4
+          Discussion: We only need to require that a right parenthesis
+          appear somewhere between the raise_expression and the
+          surrounding context; that's all we need to specify in order to
+          eliminate the ambiguities.  Moreover, we don't care at all
+          where the left parenthesis is (so long as it is legal, of
+          course).
+
+2.a.3/4
+          For instance, the following is illegal by this rule:
+
+2.a.4/4
+               Obj : Boolean := Func_Call or else raise TBD_Error with Atomic;
+
+2.a.5/4
+          as the "with Atomic" could be part of the raise_expression or
+          part of the object declaration.  Both of the following are
+          legal:
+
+2.a.6/4
+               Obj : Boolean := Func_Call or else (raise TBD_Error) with 
Atomic;
+               Obj : Boolean := (Func_Call or else raise TBD_Error) with 
Atomic;
+
+2.a.7/4
+          and if the with belongs to the raise_expression, then both of
+          the following are legal:
+
+2.a.8/4
+               Obj : Boolean := Func_Call or else (raise TBD_Error with 
Atomic);
+               Obj : Boolean := (Func_Call or else raise TBD_Error with 
Atomic);
+
+2.a.9/4
+          This rule only requires parentheses for raise_expressions that
+          are part of the "top-level" of an expression in one of the
+          named contexts; the raise_expression is either the entire
+          expression, or part of a chain of logical operations.  In
+          practice, the raise_expression will almost always be last in
+          interesting top-level expressions; anything that follows it
+          could never be executed, so that should be rare.  Other
+          contexts such as conditional expressions, qualified
+          expressions, aggregates, and even function calls, provide the
+          needed parentheses.  All of the following are legal, no
+          additional parens are needed:
+
+2.a.10/4
+               Pre : Boolean  := (if not Is_Valid(Param) then raise 
Not_Valid_Error);
+               A : A_Tagged   := (Some_Tagged'(raise TBD_Error) with Comp => 
'A');
+               B : Some_Array := (1, 2, 3, others => raise Not_Valid_Error);
+               C : Natural    := Func (Val => raise TBD_Error);
+
+2.a.11/4
+          Parentheses that are part of the context of the expression
+          don't count.  For instance, the parentheses around the
+          raise_expression are required in the following:
+
+2.a.12/4
+               D : A_Tagged   := ((raise TBD_Error) with Comp => 'A');
+
+2.a.13/4
+          as ancestor_part is one of the contexts that triggers the
+          rule.
+
+2.a.14/4
+          This English-language rule could have been implemented instead
+          by adding nonterminals initial_expression and
+          initial_relation, which are the same as choice_expression and
+          choice_relation except for the inclusion of membership in
+          initial_relation.  Then, initial_expresion could be used in
+          place of expression in all of the contexts noted.  We did not
+          do that because of the large amount of change required, both
+          to the grammar and to language rules that refer to the
+          grammar.  A complete grammar is given in
+          AI12-0152-1AI12-0152-1.
+
+2.a.15/4
+          The use of a raise_expression is illegal in each of
+          modular_type_definition, floating_point_definition,
+          ordinary_fixed_point_definition, and
+          decimal_fixed_point_definition as these uses are required to
+          be static and a raise_expression is never static.  We include
+          these in this rule so that Ada text has an unambiguous syntax
+          in these cases.
+
                            _Legality Rules_
 
-3
-The name, if any, in a raise_statement shall denote an exception.  A
-raise_statement with no exception_name (that is, a re-raise statement)
+3/4
+{AI12-0022-1AI12-0022-1} {AI12-0159-1AI12-0159-1} The exception_name, if
+any, of a raise_statement or raise_expression shall denote an exception.
+A raise_statement with no exception_name (that is, a re-raise statement)
 shall be within a handler, but not within a body enclosed by that
 handler.
 
                         _Name Resolution Rules_
 
-3.1/2
-{AI95-00361-01AI95-00361-01} The expression, if any, in a
-raise_statement, is expected to be of type String.
+3.1/4
+{AI95-00361-01AI95-00361-01} {AI12-0022-1AI12-0022-1}
+{AI12-0152-1AI12-0152-1} The string_expression or
+string_simple_expression, if any, of a raise_statement or
+raise_expression is expected to be of type String.
+
+3.2/4
+{AI12-0022-1AI12-0022-1} {AI12-0159-1AI12-0159-1} The expected type for
+a raise_expression shall be any single type.
 
                           _Dynamic Semantics_
 
-4/2
-{AI95-00361-01AI95-00361-01} To raise an exception is to raise a new
-occurrence of that exception[, as explained in *note 11.4::].  For the
+4/4
+{AI95-00361-01AI95-00361-01} {AI12-0022-1AI12-0022-1}
+{AI12-0152-1AI12-0152-1} To raise an exception is to raise a new
+occurrence of that exception[, as explained in *note 11.4::]. For the
 execution of a raise_statement with an exception_name, the named
-exception is raised.  [If a string_expression is present, the expression
-is evaluated and its value is associated with the exception occurrence.]
-For the execution of a re-raise statement, the exception occurrence that
-caused transfer of control to the innermost enclosing handler is raised
-[again].
+exception is raised.  Similarly, for the evaluation of a
+raise_expression, the named exception is raised.  [In both of these
+cases, if a string_expression or string_simple_expression is present,
+the expression is evaluated and its value is associated with the
+exception occurrence.] For the execution of a re-raise statement, the
+exception occurrence that caused transfer of control to the innermost
+enclosing handler is raised [again].
 
 4.a.1/2
           Proof: {AI95-00361-01AI95-00361-01} The definition of
@@ -50493,6 +52668,15 @@ caused transfer of control to the innermost enclosing 
handler is raised
           instead propagates the same Exception_Occurrence value.  This
           allows the original cause of the exception to be determined.
 
+     NOTES
+
+4.1/4
+     1  {AI12-0062-1AI12-0062-1} {AI12-0152-1AI12-0152-1}
+     {AI12-0159-1AI12-0159-1} If the evaluation of a string_expression
+     or string_simple_expression raises an exception, that exception is
+     propagated instead of the one denoted by the exception_name of the
+     raise_statement or raise_expression.
+
                               _Examples_
 
 5
@@ -50524,6 +52708,17 @@ Examples of raise statements:
           (exception_name'Identity, string_expression), and should
           encourage the use of message strings when raising exceptions.
 
+                       _Extensions to Ada 2012_
+
+7.c/4
+          {AI12-0022-1AI12-0022-1} {AI12-0152-1AI12-0152-1}
+          {AI12-0159-1AI12-0159-1} Corrigendum: The raise_expression is
+          new.  This construct is necessary to allow conversion of
+          existing specifications to use preconditions and predicates
+          without changing the exceptions raised.  It is considered
+          important enough to be added to Ada 2012 rather than waiting
+          for Ada 202x.
+
 
 File: aarm2012.info,  Node: 11.4,  Next: 11.5,  Prev: 11.3,  Up: 11
 
@@ -50533,8 +52728,8 @@ File: aarm2012.info,  Node: 11.4,  Next: 11.5,  Prev: 
11.3,  Up: 11
 1
 [When an exception occurrence is raised, normal program execution is
 abandoned and control is transferred to an applicable exception_handler,
-if any.  To handle an exception occurrence is to respond to the
-exceptional event.  To propagate an exception occurrence is to raise it
+if any. To handle an exception occurrence is to respond to the
+exceptional event. To propagate an exception occurrence is to raise it
 again in another context; that is, to fail to respond to the exceptional
 event in the present context.]
 
@@ -50555,7 +52750,7 @@ event in the present context.]
 Within a given task, if the execution of construct a is defined by this
 International Standard to consist (in part) of the execution of
 construct b, then while b is executing, the execution of a is said to
-dynamically enclose the execution of b.  The innermost dynamically
+dynamically enclose the execution of b. The innermost dynamically
 enclosing execution of a given execution is the dynamically enclosing
 execution that started most recently.
 
@@ -50659,7 +52854,7 @@ sequence_of_statements.
      NOTES
 
 8
-     1  Note that exceptions raised in a declarative_part of a body are
+     2  Note that exceptions raised in a declarative_part of a body are
      not handled by the handlers of the handled_sequence_of_statements
      (*note 11.2: S0265.) of that body.
 
@@ -50769,18 +52964,21 @@ E'Identity
 {AI95-00361-01AI95-00361-01} Raise_Exception raises a new occurrence of
 the identified exception.
 
-10.1/3
+10.1/4
 {AI95-00361-01AI95-00361-01} {AI95-00378-01AI95-00378-01}
-{AI05-0043-1AI05-0043-1} {AI05-0248-1AI05-0248-1} Exception_Message
+{AI05-0043-1AI05-0043-1} {AI05-0248-1AI05-0248-1}
+{AI12-0022-1AI12-0022-1} {AI12-0152-1AI12-0152-1} Exception_Message
 returns the message associated with the given Exception_Occurrence.  For
 an occurrence raised by a call to Raise_Exception, the message is the
 Message parameter passed to Raise_Exception.  For the occurrence raised
-by a raise_statement with an exception_name and a string_expression, the
-message is the string_expression.  For the occurrence raised by a
-raise_statement with an exception_name but without a string_expression,
-the message is a string giving implementation-defined information about
-the exception occurrence.  For an occurrence originally raised in some
-other manner (including by the failure of a language-defined check), the
+by a raise_statement or raise_expression with an exception_name and a
+string_expression or string_simple_expression, the message is the
+string_expression or string_simple_expression.  For the occurrence
+raised by a raise_statement or raise_expression with an exception_name
+but without a string_expression or string_simple_expression, the message
+is a string giving implementation-defined information about the
+exception occurrence.  For an occurrence originally raised in some other
+manner (including by the failure of a language-defined check), the
 message is an unspecified string.  In all cases, Exception_Message
 returns a string with lower bound 1.
 
@@ -51286,12 +53484,15 @@ expressions.
           Glossary entry: A postcondition is an assertion that is
           expected to be True when a given subprogram returns normally.
 
-1.a.4/3
-          Glossary entry: A invariant is an assertion that is expected
+1.a.4/4
+          Glossary entry: An invariant is an assertion that is expected
           to be True for all objects of a given private type when viewed
           from outside the defining package.
 
-1.a.5/3
+1.a.5/4
+          Glossary entry: See Invariant.
+
+1.a.6/3
           Glossary entry: An assertion is a boolean expression that
           appears in any of the following: a pragma Assert, a predicate,
           a precondition, a postcondition, an invariant, a constraint,
@@ -51546,10 +53747,25 @@ than it would if the first expression had not been 
evaluated.
           trigger these rules unless it also changes the value of a
           reevaluation of the precondition expression.
 
+                     _Language Design Principles_
+
+27.d/4
+          {AI12-0005-1AI12-0005-1} Our intent is that any assertion
+          expression that violates this ImplPerm is considered
+          pathological.  We definitely want compilers to be able to
+          assume that if you evaluate an assertion expression once and
+          it is True, you don't need to evaluate it again if all you are
+          doing in the mean time is evaluating assertion expressions.
+          We were unable to find wording that had this effect that
+          didn't throw out important other cases (logging, memo
+          functions), so we settled for a strong warning that compilers
+          can reject such pathologies.  Perhaps in a future version of
+          Ada we'll be able to tighten this up.
+
      NOTES
 
 28/2
-     2  {AI95-00286-01AI95-00286-01} Normally, the boolean expression in
+     3  {AI95-00286-01AI95-00286-01} Normally, the boolean expression in
      a pragma Assert should not call functions that have significant
      side effects when the result of the expression is True, so that the
      particular assertion policy in effect will not affect normal
@@ -51581,7 +53797,7 @@ than it would if the first expression had not been 
evaluated.
 
 28.c/3
           {AI05-0290-1AI05-0290-1} Assertion_Policy pragmas are now
-          allowed in more places and can specify behavior for invidivual
+          allowed in more places and can specify behavior for individual
           kinds of assertions.
 
 
@@ -51696,7 +53912,7 @@ checks..
 {AI05-0264-1AI05-0264-1} A language-defined check (or simply, a "check")
 is one of the situations defined by this International Standard that
 requires a check to be made at run time to determine whether some
-condition is true.  A check fails when the condition being checked is
+condition is true. A check fails when the condition being checked is
 False, causing an exception to be raised.
 
 2.a
@@ -51757,13 +53973,12 @@ entire instance.
 8/2
 {AI95-00224-01AI95-00224-01} A pragma Suppress gives permission to an
 implementation to omit the named check (or every check in the case of
-All_Checks) for any entities to which it applies.  If permission has
-been given to suppress a given check, the check is said to be
-suppressed.
+All_Checks) for any entities to which it applies. If permission has been
+given to suppress a given check, the check is said to be suppressed.
 
 8.a
           Ramification: A check is suppressed even if the implementation
-          chooses not to actually generate better code.  This allows the
+          chooses not to actually generate better code. This allows the
           implementation to raise Program_Error, for example, if the
           erroneousness is detected.
 
@@ -51938,7 +54153,7 @@ situation occurs, the execution of the program is 
erroneous.
 restrictions on checking pragmas, subject only to the requirement that
 pragma Unsuppress shall allow any check names supported by pragma
 Suppress.  An implementation is allowed to add additional check names,
-with implementation-defined semantics.  When Overflow_Check has been
+with implementation-defined semantics. When Overflow_Check has been
 suppressed, an implementation may also suppress an unspecified subset of
 the Range_Checks.
 
@@ -51987,12 +54202,12 @@ have been suppressed.
      NOTES
 
 29
-     3  There is no guarantee that a suppressed check is actually
+     4  There is no guarantee that a suppressed check is actually
      removed; hence a pragma Suppress should be used only for efficiency
      reasons.
 
 29.1/2
-     4  {AI95-00224-01AI95-00224-01} It is possible to give both a
+     5  {AI95-00224-01AI95-00224-01} It is possible to give both a
      pragma Suppress and Unsuppress for the same check immediately
      within the same declarative_part.  In that case, the last pragma
      given determines whether or not the check is suppressed.
@@ -52094,17 +54309,18 @@ checks:
 
                     _Wording Changes from Ada 2005_
 
-31.l/3
-          {AI05-0290-1AI05-0290-1} The effect of a checking pragma no
-          longer applies inside an inlined subprogram body.  While this
-          could change the behavior of a program that depends on a check
-          being suppressed in an inlined body, such a program is
-          erroneous and thus no behavior can be depended upon anyway.
-          It's also likely to be very rare.  We make this change so that
-          inlining has no effect on the meaning of the subprogram body
-          (since inlining is never requiring, this is necessary in order
-          to be able to reason about the body), and so that assertion
-          policies and suppress work the same way for inlining.
+31.l/4
+          {AI05-0290-1AI05-0290-1} {AI12-0005-1AI12-0005-1} The effect
+          of a checking pragma no longer applies inside an inlined
+          subprogram body.  While this could change the behavior of a
+          program that depends on a check being suppressed in an inlined
+          body, such a program is erroneous and thus no behavior can be
+          depended upon anyway.  It's also likely to be very rare.  We
+          make this change so that inlining has no effect on the meaning
+          of the subprogram body (since inlining is never required, this
+          is necessary in order to be able to reason about the body),
+          and so that assertion policies and suppress work the same way
+          for inlining.
 
 
 File: aarm2012.info,  Node: 11.6,  Prev: 11.5,  Up: 11
@@ -52258,9 +54474,9 @@ The following additional permissions are granted to the 
implementation:
      canonical semantics, but not within the execution of some
      abort-deferred operation or independent subprogram that does not
      dynamically enclose the execution of the construct whose check
-     failed.  An independent subprogram is one that is defined outside
+     failed. An independent subprogram is one that is defined outside
      the library unit containing the construct whose check failed, and
-     for which the Inline aspect is False.  Any assignment that occurred
+     for which the Inline aspect is False. Any assignment that occurred
      outside of such abort-deferred operations or independent
      subprograms can be disrupted by the raising of the exception,
      causing the object or its parts to become abnormal, and certain
@@ -52347,7 +54563,7 @@ The following additional permissions are granted to the 
implementation:
      NOTES
 
 7/3
-     5  {AI05-0299-1AI05-0299-1} The permissions granted by this
+     6  {AI05-0299-1AI05-0299-1} The permissions granted by this
      subclause can have an effect on the semantics of a program only if
      the program fails a language-defined check.
 
@@ -52403,10 +54619,10 @@ File: aarm2012.info,  Node: 12,  Next: 13,  Prev: 11, 
 Up: Top
 
 1
 A generic unit is a program unit that is either a generic subprogram or
-a generic package.  A generic unit is a template[, which can be
+a generic package. A generic unit is a template[, which can be
 parameterized, and from which corresponding (nongeneric) subprograms or
 packages can be obtained].  The resulting program units are said to be
-instances of the original generic unit.  
+instances of the original generic unit. 
 
 1.a
           Glossary entry: A generic unit is a template for a
@@ -52423,7 +54639,7 @@ instances of the original generic unit.
 
 2
 [A generic unit is declared by a generic_declaration.  This form of
-declaration has a generic_formal_part (*note 12.1: S0273.) declaring any
+declaration has a generic_formal_part (*note 12.1: S0274.) declaring any
 generic formal parameters.  An instance of a generic unit is obtained as
 the result of a generic_instantiation with appropriate generic actual
 parameters for the generic formal parameters.  An instance of a generic
@@ -52808,9 +55024,9 @@ File: aarm2012.info,  Node: 12.3,  Next: 12.4,  Prev: 
12.2,  Up: 12
 7/3
 {AI05-0004-1AI05-0004-1} The generic actual parameter is either the
 explicit_generic_actual_parameter given in a generic_association (*note
-12.3: S0277.) for each formal, or the corresponding default_expression
-(*note 3.7: S0063.) or default_name (*note 12.6: S0299.) if no
-generic_association (*note 12.3: S0277.) is given for the formal.  When
+12.3: S0278.) for each formal, or the corresponding default_expression
+(*note 3.7: S0063.) or default_name (*note 12.6: S0300.) if no
+generic_association (*note 12.3: S0278.) is given for the formal.  When
 the meaning is clear from context, the term "generic actual," or simply
 "actual," is used as a synonym for "generic actual parameter" and also
 for the view denoted by one, or the value of one.
@@ -52918,7 +55134,7 @@ explicitly specifies otherwise.
 11.j/3
              * {AI05-0239-1AI05-0239-1} The profile of a formal
                subprogram is not subtype conformant with any other
-               profile.  
+               profile. 
 
 11.k
              * A generic formal function is not static.
@@ -53123,9 +55339,8 @@ instance body, both at the place of the instantiation.
 13
 The instance is a copy of the text of the template.  [Each use of a
 formal parameter becomes (in the copy) a use of the actual, as explained
-below.]  An instance of a generic package is a package, that of a
-generic procedure is a procedure, and that of a generic function is a
-function.
+below.] An instance of a generic package is a package, that of a generic
+procedure is a procedure, and that of a generic function is a function.
 
 13.a
           Ramification: An instance is a package or subprogram (because
@@ -53748,7 +55963,7 @@ actual shall have the same designated type as that of 
the
 access_definition.  If the anonymous access type is an
 access-to-subprogram type, the type of the actual shall have a
 designated profile which is type conformant with that of the
-access_definition.  
+access_definition. 
 
 5.a
           Reason: See the corresponding rule for
@@ -53791,7 +56006,7 @@ type of the actual and the type of the formal:
 
 8.2/2
    * {AI95-00423-01AI95-00423-01} shall both be access-to-subprogram
-     types with subtype conformant designated profiles.  
+     types with subtype conformant designated profiles. 
 
 8.3/2
 {AI95-00423-01AI95-00423-01} For a formal_object_declaration with a
@@ -53807,7 +56022,7 @@ null_exclusion or an access_definition that has a 
null_exclusion:
 
 8.5/2
    * otherwise, the subtype of the actual matching the
-     formal_object_declaration shall exclude null.  In addition to the
+     formal_object_declaration shall exclude null. In addition to the
      places where Legality Rules normally apply (see *note 12.3::), this
      rule applies also in the private part of an instance of a generic
      unit.
@@ -53826,9 +56041,9 @@ null_exclusion or an access_definition that has a 
null_exclusion:
 9/2
 {AI95-00255-01AI95-00255-01} {AI95-00423-01AI95-00423-01} A
 formal_object_declaration declares a generic formal object.  The default
-mode is in.  For a formal object of mode in, the nominal subtype is the
+mode is in. For a formal object of mode in, the nominal subtype is the
 one denoted by the subtype_mark or access_definition in the declaration
-of the formal.  For a formal object of mode in out, its type is
+of the formal. For a formal object of mode in out, its type is
 determined by the subtype_mark or access_definition in the declaration;
 its nominal subtype is nonstatic, even if the subtype_mark denotes a
 static subtype; for a composite type, its nominal subtype is
@@ -53884,7 +56099,7 @@ properties are identical to those of the actual.
 For the evaluation of a generic_association for a formal object of mode
 in, a constant object is created, the value of the actual parameter is
 converted to the nominal subtype of the formal object, and assigned to
-the object[, including any value adjustment -- see *note 7.6::].  
+the object[, including any value adjustment -- see *note 7.6::]. 
 
 11.a
           Ramification: This includes evaluating the actual and doing a
@@ -54397,14 +56612,16 @@ be a limited interface if the reserved word 
synchronized appears.
           ancestors.  However, it can be given even if neither the
           ancestor nor the progenitors are synchronized.
 
-5.1/3
+5.1/4
 {AI95-00251-01AI95-00251-01} {AI95-00401-01AI95-00401-01}
-{AI95-00443-01AI95-00443-01} {AI05-0087-1AI05-0087-1} The actual type
-for a formal derived type shall be a descendant of [the ancestor type
-and] every progenitor of the formal type.  If the formal type is
-nonlimited, the actual type shall be nonlimited.  If the reserved word
-synchronized appears in the declaration of the formal derived type, the
-actual type shall be a synchronized tagged type.
+{AI95-00443-01AI95-00443-01} {AI05-0087-1AI05-0087-1}
+{AI12-0036-1AI12-0036-1} The actual type for a formal derived type shall
+be a descendant of [the ancestor type and] every progenitor of the
+formal type.  If the formal type is nonlimited, the actual type shall be
+nonlimited.  The actual type for a formal derived type shall be tagged
+if and only if the formal derived type is a private extension.  If the
+reserved word synchronized appears in the declaration of the formal
+derived type, the actual type shall be a synchronized tagged type.
 
 5.d/2
           Proof: The actual type has to be a descendant of the ancestor
@@ -54436,6 +56653,16 @@ actual type shall be a synchronized tagged type.
           assign limited objects.  Thus, we have to explicitly ban this
           case.
 
+5.g/4
+          {AI12-0036-1AI12-0036-1} If we allowed actual types that
+          differ from the kind of the formal derived type, we could
+          allow type conversions that would not be allowed outside of
+          the generic.  That would be particularly problematical if the
+          actual is a tagged type with extension components; we could
+          have created an object of the type that is missing those
+          components by converting from the ancestor type to a formal
+          derived type that is not an extension.
+
 6/3
 {AI05-0213-1AI05-0213-1} If a formal private or derived subtype is
 definite, then the actual subtype shall also be definite.
@@ -54516,7 +56743,7 @@ incomplete type with a known_discriminant_part:
 14
    * The subtype of each discriminant of the actual type shall
      statically match the subtype of the corresponding discriminant of
-     the formal type.  
+     the formal type. 
 
 14.a
           Reason: We considered defining the first and third rule to be
@@ -54530,6 +56757,13 @@ incomplete type with a known_discriminant_part:
 may, but need not, have discriminants, and may be definite or
 indefinite.]
 
+15.1/4
+{AI12-0095-1AI12-0095-1} When enforcing Legality Rules, for the purposes
+of determining within a generic body whether a type is unconstrained in
+any partial view, a discriminated subtype is considered to have a
+constrained partial view if it is a descendant of an untagged generic
+formal private or derived type.
+
                           _Static Semantics_
 
 16/2
@@ -54603,6 +56837,13 @@ executed will be that corresponding to the actual 
type.]
           progenitor type, for subprograms inherited from an interface
           type).
 
+21.b/4
+          To be honest: {AI12-0030-1AI12-0030-1} The availability of
+          stream attributes is not formally a characteristic of a type,
+          but it is still determined by the ancestor type for a formal
+          derived type in the same way as the characteristics are.
+          Availability is rechecked in the instance specification.
+
 22/1
 For a prefix S that denotes a formal indefinite subtype, the following
 attribute is defined:
@@ -54648,7 +56889,7 @@ class-wide type T'Class:
      5.2::).  In the case where the tag would be statically determined
      to be that of the formal type, the call raises Program_Error.  If
      such a function is renamed, any call on the renaming raises
-     Program_Error.  
+     Program_Error. 
 
 23.b/2
           Discussion: As it states in *note 6.3.1::, the convention of
@@ -54821,6 +57062,28 @@ class-wide type T'Class:
           instantiate any such generic, this cannot happen outside of
           test suites and thus is not documented as an incompatibility.
 
+                   _Incompatibilities With Ada 2012_
+
+28.o/4
+          {AI12-0036-1AI12-0036-1} Corrigendum: Added a requirement that
+          a tagged type only match a formal derived type that is a
+          private extension.  This is necessary to prevent type
+          conversions that would not be allowed outside of the generic.
+          We expect that this will be rare, as it only can happen if the
+          formal derived type does not accurately describe the actual
+          type; in most such cases, extension will be desired and a
+          private extension used so that is allowed.
+
+                    _Wording Changes from Ada 2012_
+
+28.p/4
+          {AI12-0095-1AI12-0095-1} Corrigendum: The assume the worst
+          rule for determining within a generic body whether a type is
+          unconstrained in any partial view was moved here.  While
+          AI05-0041-1 added it to *note 3.10.2::, it's also needed (at
+          least) in *note 4.6:: and *note 6.4.1::.  Thus, it was moved
+          here so that it applies generally.
+
 
 File: aarm2012.info,  Node: 12.5.2,  Next: 12.5.3,  Prev: 12.5.1,  Up: 12.5
 
@@ -54941,11 +57204,11 @@ following conditions:
 6
    * For each index position, the index types shall be the same, and the
      index subtypes (if unconstrained), or the index ranges (if
-     constrained), shall statically match (see *note 4.9.1::).  
+     constrained), shall statically match (see *note 4.9.1::). 
 
 7
    * The component subtypes of the formal and actual array types shall
-     statically match.  
+     statically match. 
 
 8
    * If the formal type has aliased components, then so shall the
@@ -55035,7 +57298,7 @@ access type is the category of all access types.]
 
 3
 For a formal access-to-object type, the designated subtypes of the
-formal and actual types shall statically match.  
+formal and actual types shall statically match. 
 
 4/2
 {AI95-00231-01AI95-00231-01} If and only if the general_access_modifier
@@ -55073,7 +57336,7 @@ the actual subtype shall exclude null.
 5/3
 {AI05-0239-1AI05-0239-1} {AI05-0288-1AI05-0288-1} For a formal
 access-to-subprogram subtype, the designated profiles of the formal and
-the actual shall be subtype conformant.  
+the actual shall be subtype conformant. 
 
                               _Examples_
 
@@ -55314,7 +57577,7 @@ that of the formal subprogram.
 
 7/3
 {AI05-0239-1AI05-0239-1} The profiles of the formal and any named
-default shall be mode conformant.  
+default shall be mode conformant. 
 
 7.a/3
           Ramification: {AI05-0299-1AI05-0299-1} This rule, unlike
@@ -55323,7 +57586,7 @@ default shall be mode conformant.
 
 8/3
 {AI05-0239-1AI05-0239-1} The profiles of the formal and actual shall be
-mode conformant.  
+mode conformant. 
 
 8.1/2
 {AI95-00423-01AI95-00423-01} For a parameter or result subtype of a
@@ -55341,7 +57604,7 @@ formal_subprogram_declaration that has an explicit 
null_exclusion:
 8.3/2
    * otherwise, the subtype of the corresponding parameter or result
      type of the actual matching the formal_subprogram_declaration shall
-     exclude null.  In addition to the places where Legality Rules
+     exclude null. In addition to the places where Legality Rules
      normally apply (see *note 12.3::), this rule applies also in the
      private part of an instance of a generic unit.
 
@@ -55356,16 +57619,16 @@ formal_subprogram_declaration that has an explicit 
null_exclusion:
 8.4/3
 {AI95-00260-02AI95-00260-02} {AI05-0296-1AI05-0296-1} If a formal
 parameter of a formal_abstract_subprogram_declaration (*note 12.6:
-S0297.) is of a specific tagged type T or of an anonymous access type
+S0298.) is of a specific tagged type T or of an anonymous access type
 designating a specific tagged type T, T is called a controlling type of
-the formal_abstract_subprogram_declaration (*note 12.6: S0297.).
+the formal_abstract_subprogram_declaration (*note 12.6: S0298.).
 Similarly, if the result of a formal_abstract_subprogram_declaration
-(*note 12.6: S0297.) for a function is of a specific tagged type T or of
+(*note 12.6: S0298.) for a function is of a specific tagged type T or of
 an anonymous access type designating a specific tagged type T, T is
 called a controlling type of the formal_abstract_subprogram_declaration
-(*note 12.6: S0297.).  A formal_abstract_subprogram_declaration (*note
-12.6: S0297.) shall have exactly one controlling type, and that type
-shall not be incomplete.  
+(*note 12.6: S0298.).  A formal_abstract_subprogram_declaration (*note
+12.6: S0298.) shall have exactly one controlling type, and that type
+shall not be incomplete. 
 
 8.b/2
           Ramification: The specific tagged type could be any of a
@@ -55378,19 +57641,19 @@ shall not be incomplete.
 
 8.c/2
           We informally call a subprogram declared by a
-          formal_abstract_subprogram_declaration (*note 12.6: S0297.) an
+          formal_abstract_subprogram_declaration (*note 12.6: S0298.) an
           abstract formal subprogram, but we do not use this term in
-          normative wording.  (We do use it often in these notes.)
+          normative wording. (We do use it often in these notes.)
 
 8.5/2
 {AI95-00260-02AI95-00260-02} The actual subprogram for a
-formal_abstract_subprogram_declaration (*note 12.6: S0297.) shall be a
+formal_abstract_subprogram_declaration (*note 12.6: S0298.) shall be a
 dispatching operation of the controlling type or of the actual type
 corresponding to the controlling type.
 
 8.d/2
           To be honest: We mean the controlling type of the
-          formal_abstract_subprogram_declaration (*note 12.6: S0297.),
+          formal_abstract_subprogram_declaration (*note 12.6: S0298.),
           of course.  Saying that gets unwieldy and redundant (so says
           at least one reviewer, anyway).
 
@@ -55469,7 +57732,7 @@ formal_subprogram_declaration declares a view of the 
actual.  The
 profile of this view takes its subtypes and calling convention from the
 original profile of the actual entity, while taking the formal parameter
 names and default_expression (*note 3.7: S0063.)s from the profile given
-in the formal_subprogram_declaration (*note 12.6: S0295.).  The view is
+in the formal_subprogram_declaration (*note 12.6: S0296.).  The view is
 a function or procedure, never an entry.
 
 9.a
@@ -55540,11 +57803,11 @@ name of the formal.
 specified by the reserved word null, and the corresponding actual
 parameter is omitted, then it is equivalent to an explicit actual
 parameter that is a null procedure having the profile given in the
-formal_subprogram_declaration (*note 12.6: S0295.).
+formal_subprogram_declaration (*note 12.6: S0296.).
 
 10.2/2
 {AI95-00260-02AI95-00260-02} The subprogram declared by a
-formal_abstract_subprogram_declaration (*note 12.6: S0297.) with a
+formal_abstract_subprogram_declaration (*note 12.6: S0298.) with a
 controlling type T is a dispatching operation of type T.
 
 10.a/2
@@ -55597,14 +57860,14 @@ controlling type T is a dispatching operation of type 
T.
 16/2
      18  {AI95-00260-02AI95-00260-02} The actual subprogram cannot be
      abstract unless the formal subprogram is a
-     formal_abstract_subprogram_declaration (*note 12.6: S0297.) (see
+     formal_abstract_subprogram_declaration (*note 12.6: S0298.) (see
      *note 3.9.3::).
 
 16.1/2
      19  {AI95-00260-02AI95-00260-02} The subprogram declared by a
-     formal_abstract_subprogram_declaration (*note 12.6: S0297.) is an
+     formal_abstract_subprogram_declaration (*note 12.6: S0298.) is an
      abstract subprogram.  All calls on a subprogram declared by a
-     formal_abstract_subprogram_declaration (*note 12.6: S0297.) must be
+     formal_abstract_subprogram_declaration (*note 12.6: S0298.) must be
      dispatching calls.  See *note 3.9.3::.
 
 16.2/2
@@ -55796,7 +58059,7 @@ follows:
 
 5.1/2
    * {AI95-00317-01AI95-00317-01} If the formal_package_actual_part
-     (*note 12.7: S0301.) includes generic_associations as well as
+     (*note 12.7: S0302.) includes generic_associations as well as
      associations with <>, then only the actual parameters specified
      explicitly with generic_associations are required to match;
 
@@ -55822,7 +58085,7 @@ between the actual instance and the formal package are 
as follows:
 
 7
    * For a formal subtype, the actuals match if they denote statically
-     matching subtypes.  
+     matching subtypes. 
 
 8
    * For other kinds of formals, the actuals match if they statically
@@ -56164,9 +58427,9 @@ item.]
 
 1/1
 {8652/00098652/0009} {AI95-00137-01AI95-00137-01} There are six kinds of
-representation items: attribute_definition_clause (*note 13.3: S0309.)s
+representation items: attribute_definition_clause (*note 13.3: S0310.)s
 for representation attributes, enumeration_representation_clause (*note
-13.4: S0310.)s, record_representation_clause (*note 13.5.1: S0312.)s,
+13.4: S0311.)s, record_representation_clause (*note 13.5.1: S0313.)s,
 at_clauses, component_clauses, and representation pragmas.  [ They can
 be provided to give more efficient representation or to interface with
 features that are outside the domain of the language (for example,
@@ -56227,7 +58490,7 @@ representation pragma in a compilation.]
 4/1
      {8652/00098652/0009} {AI95-00137-01AI95-00137-01} A representation
      pragma is allowed only at places where an aspect_clause or
-     compilation_unit is allowed.  
+     compilation_unit is allowed. 
 
                         _Name Resolution Rules_
 
@@ -56316,7 +58579,7 @@ the machine code when loading, storing, or operating-on 
the value of the
 object.  For an object of a composite type, these are the bits reserved
 for this object, and include bits occupied by subcomponents of the
 object.  If the size of an object is greater than that of its subtype,
-the additional bits are padding bits.  For an elementary object, these
+the additional bits are padding bits. For an elementary object, these
 padding bits are normally read and updated along with the others.  For a
 composite object, padding bits might not be read or updated in any given
 composite operation, depending on the implementation.
@@ -56408,7 +58671,7 @@ composite operation, depending on the implementation.
 directly specifies a representation aspect of the entity denoted by the
 local_name, except in the case of a type-related representation item,
 whose local_name shall denote a first subtype, and which directly
-specifies an aspect of the subtype's type.  A representation item that
+specifies an aspect of the subtype's type. A representation item that
 names a subtype is either subtype-specific (Size and Alignment clauses)
 or type-related (all others).  [Subtype-specific aspects may differ for
 different subtypes of the same type.]
@@ -56578,7 +58841,7 @@ different subtypes of the same type.]
 operational aspect of the entity denoted by the local_name, except in
 the case of a type-related operational item, whose local_name shall
 denote a first subtype, and which directly specifies an aspect of the
-type of the subtype.  
+type of the subtype. 
 
 8.mm/1
           Ramification: {8652/00098652/0009}
@@ -56600,14 +58863,11 @@ type of the subtype.
 8.rr/1
              * Output clause
 
-9/3
-{AI05-0183-1AI05-0183-1} A representation item that directly specifies
-an aspect of a subtype or type shall appear after the type is completely
-defined (see *note 3.11.1::), and before the subtype or type is frozen
-(see *note 13.14::).  If a representation item or aspect_specification
-is given that directly specifies an aspect of an entity, then it is
-illegal to give another representation item or aspect_specification that
-directly specifies the same aspect of the entity.
+9/4
+{AI05-0183-1AI05-0183-1} {AI12-0116-1AI12-0116-1} A representation item
+that directly specifies an aspect of a subtype or type shall appear
+after the type is completely defined (see *note 3.11.1::), and before
+the subtype or type is frozen (see *note 13.14::).
 
 9.a/1
           Ramification: {8652/00098652/0009}
@@ -56618,25 +58878,15 @@ directly specifies the same aspect of the entity.
           an entity after using the entity in ways that require the
           representation to be known.
 
-9.b/3
-          To be honest: {AI05-0183-1AI05-0183-1} The rule preventing
-          multiple specification is also intended to cover other ways to
-          specify representation aspects, such as obsolescent pragma
-          Priority.  Priority is not a representation pragma, and as
-          such is neither a representation item nor an
-          aspect_specification.  Regardless, giving both a pragma
-          Priority and an aspect_specification for Priority is illegal.
-          We didn't want to complicate the wording solely to support
-          obsolescent features.
+9.b/4
+          This paragraph was deleted.{AI05-0183-1AI05-0183-1}
+          {AI12-0116-1AI12-0116-1}
 
-9.1/3
+9.1/4
 {8652/00098652/0009} {AI95-00137-01AI95-00137-01}
-{AI05-0183-1AI05-0183-1} An operational item that directly specifies an
-aspect of an entity shall appear before the entity is frozen (see *note
-13.14::).  If an operational item or aspect_specification is given that
-directly specifies an aspect of an entity, then it is illegal to give
-another operational item or aspect_specification that directly specifies
-the same aspect of the entity.
+{AI05-0183-1AI05-0183-1} {AI12-0116-1AI12-0116-1} An operational item
+that directly specifies an aspect of an entity shall appear before the
+entity is frozen (see *note 13.14::).
 
 9.c/1
           Ramification: Unlike representation items, operational items
@@ -56644,10 +58894,34 @@ the same aspect of the entity.
           the representation, the full declaration need not be known to
           determine their legality.
 
-9.2/3
-{AI05-0106-1AI05-0106-1} {AI05-0295-1AI05-0295-1} Unless otherwise
-specified, it is illegal to specify an operational or representation
-aspect of a generic formal parameter.
+9.2/4
+{AI12-0116-1AI12-0116-1} If a representation item, operational item, or
+aspect_specification is given that directly specifies an aspect of an
+entity, then it is illegal to give another representation item,
+operational item, or aspect_specification that directly specifies the
+same aspect of the entity.
+
+9.c.1/4
+          Ramification: {AI12-0116-1AI12-0116-1} This rule applies to
+          all aspects, not just those that are operational aspects or
+          representation aspects.  For instance, it applies to subtype
+          predicates and type invariants.
+
+9.c.2/4
+          To be honest: {AI12-0116-1AI12-0116-1} This rule is also
+          intended to cover other ways to specify representation
+          aspects, such as obsolescent pragma Priority.  Priority is not
+          a representation pragma, and as such is neither a
+          representation item nor an aspect_specification.  Regardless,
+          giving both a pragma Priority and an aspect_specification for
+          Priority is illegal.  We didn't want to complicate the wording
+          solely to support obsolescent features.
+
+9.3/4
+{AI05-0106-1AI05-0106-1} {AI05-0295-1AI05-0295-1}
+{AI12-0116-1AI12-0116-1} Unless otherwise specified, it is illegal to
+specify an operational or representation aspect of a generic formal
+parameter.
 
 9.d/3
           Reason: Specifying an aspect on a generic formal parameter
@@ -56663,10 +58937,13 @@ aspect of a generic formal parameter.
           and operational items are all covered by this (and similar)
           rules.
 
-10/3
-{AI05-0295-1AI05-0295-1} For an untagged derived type, it is illegal to
-specify a type-related representation aspect if the parent type is a
-by-reference type, or has any user-defined primitive subprograms.
+10/4
+{AI05-0295-1AI05-0295-1} {AI12-0109-1AI12-0109-1} For an untagged
+derived type, it is illegal to specify a type-related representation
+aspect if the parent type is a by-reference type, or has any
+user-defined primitive subprograms.  Similarly, it is illegal to specify
+a nonconfirming type-related representation aspect for an untagged
+by-reference type after one or more types have been derived from it.
 
 10.a/3
           Ramification: {8652/00098652/0009}
@@ -56675,12 +58952,14 @@ by-reference type, or has any user-defined primitive 
subprograms.
           specified for the first subtype of such a type, as can
           operational aspects.
 
-10.b/3
-          Reason: {AI05-0229-1AI05-0229-1} {AI05-0295-1AI05-0295-1} The
-          reason for forbidding specification of type-related
-          representation aspects on untagged by-reference types is
-          because a change of representation is impossible when passing
-          by reference (to an inherited subprogram).  The reason for
+10.b/4
+          Reason: {AI05-0229-1AI05-0229-1} {AI05-0295-1AI05-0295-1}
+          {AI12-0109-1AI12-0109-1} The reason for forbidding
+          specification of type-related representation aspects on
+          untagged by-reference types is because a change of
+          representation is impossible when passing by reference (to an
+          inherited subprogram).  (A by-reference object cannot be
+          copied to change its representation.)  The reason for
           forbidding specification of type-related representation
           aspects on untagged types with user-defined primitive
           subprograms was to prevent implicit change of representation
@@ -56696,6 +58975,17 @@ by-reference type, or has any user-defined primitive 
subprograms.
           For example, specifying aspect Pack will cause packing of the
           extension part, but not of the parent part.
 
+10.c/4
+          Discussion: {AI12-0109-1AI12-0109-1} "By-reference type"
+          usually cannot be used in Legality Rules, as it is privacy
+          breaking.  Our use here is privacy breaking, but we're stuck
+          with it for compatibility reasons.  Since representation
+          aspects cannot be specified on partial views, privacy
+          violations only can happen when a type includes a component of
+          a private type.  In that case, whether these rules are
+          triggered depends on the full type of the private type --
+          which is clearly privacy breaking.
+
 11/3
 {8652/00098652/0009} {AI95-00137-01AI95-00137-01} {8652/00118652/0011}
 {AI95-00117-01AI95-00117-01} {AI95-00326-01AI95-00326-01}
@@ -56826,7 +59116,7 @@ that cause conflicts are implementation defined.
 
 14
 If two subtypes statically match, then their subtype-specific aspects
-(Size and Alignment) are the same.  
+(Size and Alignment) are the same. 
 
 14.a/3
           Reason: {AI05-0295-1AI05-0295-1} This is necessary because we
@@ -56927,6 +59217,13 @@ aspect of the type or subtype.
           that rules that apply only to nonconfirming representation
           values still apply to this type.
 
+15.b.2/4
+          {AI12-0109-1AI12-0109-1} If an aspect was specified by an
+          aspect_specification and the parent type has not yet been
+          frozen, then the inherited aspect might not yet have been
+          resolved and evaluated.  The implementation will need to have
+          a mechanism to handle such an aspect.
+
 15.1/3
 {8652/00408652/0040} {AI95-00108-01AI95-00108-01}
 {AI95-00444-01AI95-00444-01} {AI05-0183-1AI05-0183-1}
@@ -56941,7 +59238,7 @@ grandparent type are inherited.  An inherited 
operational aspect is
 overridden by a subsequent aspect_specification or operational item that
 specifies the same aspect of the type.
 
-15.b.2/1
+15.b.3/1
           Ramification: As with representation items, if an operational
           item for the parent appears after the derived_type_definition
           (*note 3.4: S0035.), then inheritance does not happen for that
@@ -57018,7 +59315,7 @@ aspect_specification or representation item is said to 
be confirming.
 The aspect value specified in this case is said to be a confirming
 representation aspect value.  Other values of the aspect are said to be
 nonconfirming, as are the aspect_specifications and representation items
-that specified them.  
+that specified them. 
 
                           _Dynamic Semantics_
 
@@ -57037,7 +59334,7 @@ an aspect_clause, any evaluable constructs within it 
are evaluated.
 {AI05-0295-1AI05-0295-1} An implementation may interpret representation
 aspects in an implementation-defined manner.  An implementation may
 place implementation-defined restrictions on the specification of
-representation aspects.  A recommended level of support is defined for
+representation aspects. A recommended level of support is defined for
 the specification of representation aspects and related features in each
 subclause.  These recommendations are changed to requirements for
 implementations that support the Systems Programming Annex (see *note
@@ -57386,6 +59683,30 @@ minimally aligned objects of this type might be 
declared at some point.
           "representation item".  This better separates how an aspect is
           specified from what rules apply to the value of the aspect.
 
+                   _Incompatibilities With Ada 2012_
+
+29.u/4
+          {AI12-0109-1AI12-0109-1} Corrigendum: Added a rule that makes
+          it illegal to specify a representation value after a type is
+          derived from an untagged by-reference type.  This restriction
+          is incompatible, but since the implementation would have had
+          to copy an object that does not allow copying in order to
+          change the representation for any implicit or explicit
+          conversion between the original and the derived type, it is
+          unlikely that any program could exist without running into
+          internal compiler errors or bogus results.
+
+                    _Wording Changes from Ada 2012_
+
+29.v/4
+          {AI12-0116-1AI12-0116-1} Corrigendum: Clarified that an aspect
+          (any aspect) can be specified only once for an entity, no
+          matter what means of specifying it are used.  We did not
+          document this as an incompatibility as only aspects that are
+          neither operational nor representation could change behavior
+          and there is no known implementation of these new aspects that
+          allows multiple definitions.
+
 * Menu:
 
 * 13.1.1 ::   Aspect Specifications
@@ -57428,8 +59749,8 @@ termed the associated declaration.
           allowed).  Kinds of declarations with no indication are
           followed by their subdivisions (which have indications).
 
-4.b/3
-               basic_declaration
+4.b/4
+               {AI12-0005-1AI12-0005-1} basic_declaration
                  type_declaration
                    full_type_declaration
                      type declaration syntax*
@@ -57449,6 +59770,7 @@ termed the associated declaration.
                  subprogram_declaration*
                  abstract_subprogram_declaration*
                  null_procedure_declaration*
+                 expression_function_declaration*
                  package_declaration*  -- via package_specification
                  renaming_declaration*
                    -- There are no language-defined aspects that may be 
specified
@@ -57575,6 +59897,16 @@ the aspect_mark shall be an aspect that can be 
specified for the
 associated entity (or view of the entity defined by the associated
 declaration).
 
+14.a/4
+          Ramification: {AI12-0116-1AI12-0116-1} This rule prevents
+          multiple specifications in the same aspect_specification.
+          Rules in *note 13.1:: prevent multiple specifications in
+          different aspect_specifications (on different views of the
+          same type, for instance) or between operational or
+          representation items and an aspect_specification, even for
+          aspects that are neither operational nor representation
+          aspects.
+
 15/3
 {AI05-0183-1AI05-0183-1} The aspect_definition associated with a given
 aspect_mark may be omitted only when the aspect_mark identifies an
@@ -57601,11 +59933,11 @@ a subprogram_body_stub.
           formal types; there are no default matching rules defined by
           the language.
 
-18/3
-{AI05-0183-1AI05-0183-1} {AI05-0267-1AI05-0267-1} A language-defined
-aspect shall not be specified in an aspect_specification given on a
-subprogram_body or subprogram_body_stub that is a completion of another
-declaration.
+18/4
+{AI05-0183-1AI05-0183-1} {AI05-0267-1AI05-0267-1}
+{AI12-0105-1AI12-0105-1} A language-defined aspect shall not be
+specified in an aspect_specification given on a completion of a
+subprogram or generic subprogram.
 
 18.a/3
           Reason: Most language-defined aspects (for example,
@@ -57620,6 +59952,62 @@ declaration.
           and stubs, and what happens if they are specified on both the
           declaration and body of a unit.
 
+18.1/4
+{AI05-0183-1AI05-0183-1} {AI12-0138-1AI12-0138-1} If an aspect of a
+derived type is inherited from an ancestor type and has the boolean
+value True, the inherited value shall not be overridden to have the
+value False for the derived type, unless otherwise specified in this
+International Standard.
+
+18.2/4
+{AI12-0138-1AI12-0138-1} Certain type-related aspects are defined to be
+nonoverridable; all such aspects are specified using an
+aspect_definition that is a name.
+
+18.3/4
+{AI12-0138-1AI12-0138-1} If a nonoverridable aspect is directly
+specified for a type T, then any explicit specification of that aspect
+for any other descendant of T shall be confirming; that is, the
+specified name shall match the inherited aspect, meaning that the
+specified name shall denote the same declarations as would the inherited
+name.
+
+18.4/4
+{AI12-0138-1AI12-0138-1} If a full type has a partial view, and a given
+nonoverridable aspect is allowed for both the full view and the partial
+view, then the given aspect for the partial view and the full view shall
+be the same: the aspect shall be directly specified only on the partial
+view; if the full type inherits the aspect, then a matching definition
+shall be specified (directly or by inheritance) for the partial view.
+
+18.b
+          Ramification: In order to enforce these rules without breaking
+          privacy, we cannot allow a private type that could have a
+          particular overridable aspect to have a hidden definition of
+          that aspect.  There is no problem if the private type does not
+          allow the aspect (as the aspect could not be specified on
+          descendants in that case).
+
+18.5/4
+{AI12-0138-1AI12-0138-1} In addition to the places where Legality Rules
+normally apply (see *note 12.3::), these rules about nonoverridable
+aspects also apply in the private part of an instance of a generic unit.
+
+18.6/4
+{AI12-0138-1AI12-0138-1} [The Default_Iterator, Iterator_Element,
+Implicit_Dereference, Constant_Indexing, and Variable_Indexing aspects
+are nonoverridable.]
+
+18.c/4
+          Discussion: We don't need an assume-the-worst rule for most
+          nonoverridable aspects as they only work on tagged types and
+          deriving from formal tagged types is not allowed in generic
+          bodies.  In the case of Implicit_Dereference, a derivation in
+          a generic body does not cause problems (the ancestor
+          necessarily cannot have the aspect, else specifying the aspect
+          would be illegal), as there could be no place with visibility
+          on both aspects.
+
                           _Static Semantics_
 
 19/3
@@ -57660,8 +60048,10 @@ aspects are view specific:
 with the entity, and apply to all views of the entity, unless otherwise
 specified in this International Standard.
 
-28/3
-{AI05-0183-1AI05-0183-1} If the aspect_mark includes 'Class, then:
+28/4
+{AI05-0183-1AI05-0183-1} {AI12-0106-1AI12-0106-1} If the aspect_mark
+includes 'Class (a class-wide aspect), then, unless specified otherwise
+for a particular class-wide aspect:
 
 29/3
    * if the associated entity is a tagged type, the specification
@@ -57683,12 +60073,16 @@ aspect_specification instead of an 
attribute_definition_clause (see
           the attribute (see *note 13.3::), so the aspect_mark is the
           attribute_designator of the attribute.
 
-32/3
-{AI05-0229-1AI05-0229-1} Any aspect specified by a representation pragma
-or library unit pragma that has a local_name as its single argument may
-be specified by an aspect_specification, with the entity being the
-local_name.  The aspect_definition is expected to be of type Boolean.
-The expression shall be static.
+32/4
+{AI05-0229-1AI05-0229-1} {AI12-0154-1AI12-0154-1} Any aspect specified
+by a representation pragma or library unit pragma that has a local_name
+as its single argument may be specified by an aspect_specification, with
+the entity being the local_name.  The aspect_definition is expected to
+be of type Boolean.  The expression shall be static.  Notwithstanding
+what this International Standard says elsewhere, the expression of an
+aspect that can be specified by a library unit pragma is resolved and
+evaluated at the point where it occurs in the aspect_specification[,
+rather than the first freezing point of the associated package].
 
 32.a/3
           Ramification: The name of the aspect is the same as that of
@@ -57701,11 +60095,9 @@ representation aspects not associated with specifiable 
attributes or
 representation pragmas may be specified, as specified elsewhere in this
 International Standard.
 
-34/3
-{AI05-0183-1AI05-0183-1} If an aspect of a derived type is inherited
-from an ancestor type and has the boolean value True, the inherited
-value shall not be overridden to have the value False for the derived
-type, unless otherwise specified in this International Standard.
+34/4
+This paragraph was deleted.{AI05-0183-1AI05-0183-1}
+{AI12-0138-1AI12-0138-1}
 
 35/3
 {AI05-0183-1AI05-0183-1} If a Legality Rule or Static Semantics rule
@@ -57770,6 +60162,37 @@ legality and semantics rules.
           {AI05-0183-1AI05-0183-1} {AI05-0229-1AI05-0229-1}
           {AI05-0267-1AI05-0267-1} Aspect specifications are new.
 
+                   _Incompatibilities With Ada 2012_
+
+38.c/4
+          {AI12-0154-1AI12-0154-1} Corrigendum: Added a clarification
+          that aspects that correspond to library unit pragmas are
+          resolved and evaluated immediately.  This is incompatible, as
+          a reference to an entity defined after the aspect will now be
+          illegal.  However, this would have require retroactive
+          enforcement of such aspects, which is a new capability not
+          available from the associated pragma, and moreover no known
+          Ada 2012 implementation has ever allowed late evaluation of
+          such aspects.  As such, there should be no practical
+          incompatibility.
+
+                    _Wording Changes from Ada 2012_
+
+38.d/4
+          {AI125-0105-1AI125-0105-1} Corrigendum: Clarified the wording
+          so that the restriction against language-defined aspects on
+          subprogram completions includes completions that are
+          expressions functions and null procedures.
+
+38.e/4
+          {AI125-0106-1AI125-0106-1} Corrigendum: Defined class-wide
+          aspect for use in rules in *note 13.13.2::.
+
+38.f/4
+          {AI125-0138-1AI125-0138-1} Corrigendum: Added a definition of
+          nonoverridable aspects.  This is necessary to prevent generic
+          contract problems with formal derived types.
+
 
 File: aarm2012.info,  Node: 13.2,  Next: 13.3,  Prev: 13.1,  Up: 13
 
@@ -57784,6 +60207,35 @@ selecting the representation of a composite type.]
 Paragraphs 2 through 4 were moved to *note Annex J::, "*note Annex J::
 Obsolescent Features".
 
+                     _Language Design Principles_
+
+1.a/4
+          {AI12-0001-1AI12-0001-1} If the default representation already
+          uses minimal storage for a particular type, aspect Pack might
+          not cause any representation change.  It follows that aspect
+          Pack should always be allowed, even when it has no effect on
+          representation.
+
+1.b/4
+          As a consequence, the chosen representation for a packed type
+          may change during program maintenance even if the type is
+          unchanged (in particular, if other representation aspects
+          change on a part of the type).  This is different than the
+          behavior of most other representation aspects, whose
+          properties remain guaranteed no matter what changes are made
+          to other aspects.
+
+1.c/4
+          Therefore, aspect Pack should not be used to achieve a
+          representation required by external criteria.  For instance,
+          setting Component_Size to 1 should be preferred over using
+          aspect Pack to ensure an array of bits.  If future maintenance
+          would make the array components aliased, independent, or
+          atomic, the program would become illegal if Component_Size is
+          used (immediately identifying a problem) while the aspect Pack
+          version would simply change representations (probably causing
+          a hard-to-find bug).
+
                           _Static Semantics_
 
 5/3
@@ -57797,7 +60249,7 @@ Pack
                True for a type, the type (or the extension part) is said
                to be packed.  For a type extension, the parent part is
                packed as for the parent type, and specifying Pack causes
-               packing only of the extension part.  
+               packing only of the extension part. 
 
 5.a/3
           Aspect Description for Pack: Minimize storage when laying out
@@ -57834,24 +60286,39 @@ addressing calculations.
           Component_Size clause, or a Size clause should be used instead
           of, or in addition to, the Pack aspect.
 
-6.1/2
-{AI95-00291-02AI95-00291-02} If a packed type has a component that is
-not of a by-reference type and has no aliased part, then such a
-component need not be aligned according to the Alignment of its subtype;
-in particular it need not be allocated on a storage element boundary.
+6.1/4
+This paragraph was deleted.{AI95-00291-02AI95-00291-02}
+{AI12-0001-1AI12-0001-1}
 
 7/3
 {AI05-0229-1AI05-0229-1} The recommended level of support for the Pack
 aspect is:
 
-8
-   * For a packed record type, the components should be packed as
-     tightly as possible subject to the Sizes of the component subtypes,
-     and subject to any record_representation_clause that applies to the
-     type; the implementation may, but need not, reorder components or
-     cross aligned word boundaries to improve the packing.  A component
-     whose Size is greater than the word size may be allocated an
-     integral number of words.
+7.1/4
+   * {AI12-0001-1AI12-0001-1} Any component of a packed type that is of
+     a by-reference type, that is specified as independently
+     addressable, or that contains an aliased part, shall be aligned
+     according to the alignment of its subtype.
+
+7.a/4
+          Ramification: This also applies to atomic components.
+          "Atomic" implies "specified as independently addressable", so
+          we don't need to mention atomic here.
+
+7.b/4
+          Other components do not have to respect the alignment of the
+          subtype when packed; in many cases, the Recommended Level of
+          Support will require the alignment to be ignored.
+
+8/4
+   * {AI12-0001-1AI12-0001-1} For a packed record type, the components
+     should be packed as tightly as possible subject to the above
+     alignment requirements, the Sizes of the component subtypes, and
+     any record_representation_clause that applies to the type; the
+     implementation may, but need not, reorder components or cross
+     aligned word boundaries to improve the packing.  A component whose
+     Size is greater than the word size may be allocated an integral
+     number of words.
 
 8.a
           Ramification: The implementation can always allocate an
@@ -57862,17 +60329,16 @@ aspect is:
           probably more efficient than a component of size 7 plus a
           1-bit gap (assuming the gap is needed anyway).
 
-9/3
-   * {AI05-0009-1AI05-0009-1} For a packed array type, if the Size of
-     the component subtype is less than or equal to the word size,
-     Component_Size should be less than or equal to the Size of the
-     component subtype, rounded up to the nearest factor of the word
-     size.
+9/4
+   * {AI05-0009-1AI05-0009-1} {AI12-0001-1AI12-0001-1} For a packed
+     array type, if the Size of the component subtype is less than or
+     equal to the word size, Component_Size should be less than or equal
+     to the Size of the component subtype, rounded up to the nearest
+     factor of the word size, unless this would violate the above
+     alignment requirements.
 
-9.a
-          Ramification: If a component subtype is aliased, its Size will
-          generally be a multiple of Storage_Unit, so it probably won't
-          get packed very tightly.
+9.a/4
+          This paragraph was deleted.{AI12-0001-1AI12-0001-1}
 
 9.b/3
           Implementation Advice: The recommended level of support for
@@ -57901,6 +60367,19 @@ aspect is:
           representation clause does not change the meaning of the Pack
           aspect.
 
+                    _Wording Changes from Ada 2012_
+
+9.f/4
+          {AI12-0001-1AI12-0001-1} Corrigendum: Fixed so that the
+          Recommended Level of Support does not require packing of
+          components for which such packing would violate other
+          representation items or aspects.  This is not incompatible, as
+          either such Pack aspects were treated as illegal or the
+          Recommended Level of Support was ignored as impractical,
+          neither of which would change the behavior of any working
+          programs.  (Other behavior cannot be justifed from the
+          Standard.)
+
 
 File: aarm2012.info,  Node: 13.3,  Next: 13.4,  Prev: 13.2,  Up: 13
 
@@ -57910,9 +60389,8 @@ File: aarm2012.info,  Node: 13.3,  Next: 13.4,  Prev: 
13.2,  Up: 13
 1/1
 {8652/00098652/0009} {AI95-00137-01AI95-00137-01} [ The values of
 certain implementation-dependent characteristics can be obtained by
-interrogating appropriate operational or representation attributes.
-Some of these attributes are specifiable via an
-attribute_definition_clause.]
+interrogating appropriate operational or representation attributes. Some
+of these attributes are specifiable via an attribute_definition_clause.]
 
                      _Language Design Principles_
 
@@ -57939,7 +60417,7 @@ the form with a name shall be used.
 4
 For an attribute_definition_clause that specifies an attribute that
 denotes a value or an object, the expected type for the expression or
-name is that of the attribute.  For an attribute_definition_clause that
+name is that of the attribute. For an attribute_definition_clause that
 specifies an attribute that denotes a subprogram, the expected profile
 for the name is the profile required for the attribute.  For an
 attribute_definition_clause that specifies an attribute that denotes
@@ -57973,7 +60451,7 @@ the appropriate kind.
 {AI05-0183-1AI05-0183-1} An attribute_designator is allowed in an
 attribute_definition_clause only if this International Standard
 explicitly allows it, or for an implementation-defined attribute if the
-implementation allows it.  Each specifiable attribute constitutes an
+implementation allows it. Each specifiable attribute constitutes an
 operational aspect or aspect of representation; the name of the aspect
 is that of the attribute.
 
@@ -57997,7 +60475,7 @@ is that of the attribute.
 For an attribute_definition_clause that specifies an attribute that
 denotes a subprogram, the profile shall be mode conformant with the one
 required for the attribute, and the convention shall be Ada.  Additional
-requirements are defined for particular attributes.  
+requirements are defined for particular attributes. 
 
 6.a
           Ramification: This implies, for example, that if one writes:
@@ -58022,8 +60500,8 @@ definitions apply to the other specifiable attributes.
           type-related or subtype-specific attribute, respectively.
 
 8
-A storage element is an addressable element of storage in the machine.
-A word is the largest amount of storage that can be conveniently and
+A storage element is an addressable element of storage in the machine. A
+word is the largest amount of storage that can be conveniently and
 efficiently manipulated by the hardware, given the implementation's
 run-time model.  A word consists of an integral number of storage
 elements.
@@ -58334,7 +60812,7 @@ X'Alignment
 25/2
                {AI95-00291-02AI95-00291-02} Alignment may be specified
                for [stand-alone] objects via an
-               attribute_definition_clause (*note 13.3: S0309.); the
+               attribute_definition_clause (*note 13.3: S0310.); the
                expression of such a clause shall be static, and its
                value nonnegative.
 
@@ -58364,7 +60842,7 @@ S'Alignment
 26.4/2
                {AI95-00291-02AI95-00291-02} Alignment may be specified
                for first subtypes via an attribute_definition_clause
-               (*note 13.3: S0309.); the expression of such a clause
+               (*note 13.3: S0310.); the expression of such a clause
                shall be static, and its value nonnegative.
 
 26.a/3
@@ -58682,12 +61160,12 @@ S'Size
 48
                If S is indefinite, the meaning is implementation
                defined.  The value of this attribute is of the type
-               universal_integer.  The Size of an object is at least as
+               universal_integer. The Size of an object is at least as
                large as that of its subtype, unless the object's Size is
                determined by a Size clause, a component_clause, or a
                Component_Size clause.  Size may be specified for first
                subtypes via an attribute_definition_clause (*note 13.3:
-               S0309.); the expression of such a clause shall be static
+               S0310.); the expression of such a clause shall be static
                and its value nonnegative.
 
 48.a
@@ -58923,14 +61401,14 @@ The recommended level of support for the Size 
attribute of subtypes is:
 55.i
           Another reason for making the Size of an object bigger than
           its subtype's Size is to support the run-time detection of
-          uninitialized variables.  The implementation might add an
-          extra value to a discrete subtype that represents the
-          uninitialized state, and check for this value on use.  In some
-          cases, the extra value will require an extra bit in the
-          representation of the object.  Such detection is not required
-          by the language.  If it is provided, the implementation has to
-          be able to turn it off.  For example, if the programmer gives
-          a record_representation_clause or Component_Size clause that
+          uninitialized variables. The implementation might add an extra
+          value to a discrete subtype that represents the uninitialized
+          state, and check for this value on use.  In some cases, the
+          extra value will require an extra bit in the representation of
+          the object.  Such detection is not required by the language.
+          If it is provided, the implementation has to be able to turn
+          it off.  For example, if the programmer gives a
+          record_representation_clause or Component_Size clause that
           makes a component too small to allow the extra bit, then the
           implementation will not be able to perform the checking (not
           using this method, anyway).
@@ -59207,7 +61685,7 @@ X'Component_Size
 
 70
                Component_Size may be specified for array types via an
-               attribute_definition_clause (*note 13.3: S0309.); the
+               attribute_definition_clause (*note 13.3: S0310.); the
                expression of such a clause shall be static, and its
                value nonnegative.
 
@@ -59264,7 +61742,7 @@ The recommended level of support for the Component_Size 
attribute is:
 73.1/3
 {AI05-0191-1AI05-0191-1} For a prefix X that denotes an object:
 
-73.2/3
+73.2/4
 X'Has_Same_Storage
                {AI05-0191-1AI05-0191-1} X'Has_Same_Storage denotes a
                function with the following specification:
@@ -59273,15 +61751,16 @@ X'Has_Same_Storage
                     function X'Has_Same_Storage (Arg : any_type)
                       return Boolean
 
-73.4/3
-               {AI05-0191-1AI05-0191-1} {AI05-0264-1AI05-0264-1} The
-               actual parameter shall be a name that denotes an object.
-               The object denoted by the actual parameter can be of any
-               type.  This function evaluates the names of the objects
-               involved and returns True if the representation of the
-               object denoted by the actual parameter occupies exactly
-               the same bits as the representation of the object denoted
-               by X; otherwise, it returns False.
+73.4/4
+               {AI05-0191-1AI05-0191-1} {AI05-0264-1AI05-0264-1}
+               {AI12-0077-1AI12-0077-1} The actual parameter shall be a
+               name that denotes an object.  The object denoted by the
+               actual parameter can be of any type.  This function
+               evaluates the names of the objects involved.  It returns
+               True if the representation of the object denoted by the
+               actual parameter occupies exactly the same bits as the
+               representation of the object denoted by X and the objects
+               occupy at least one bit; otherwise, it returns False.
 
 73.c/3
           Discussion: Has_Same_Storage means that, if the representation
@@ -59632,6 +62111,12 @@ Examples of attribute definition clauses:
           {AI05-0116-1AI05-0116-1} Correction: Added Implementation
           Advice for the alignment of class-wide types.
 
+                    _Wording Changes from Ada 2012_
+
+85.s/4
+          {AI12-0070-1AI12-0070-1} Corrigendum: Clarified the behavior
+          of Has_Same_Storage when 'Size = 0.
+
 
 File: aarm2012.info,  Node: 13.4,  Next: 13.5,  Prev: 13.3,  Up: 13
 
@@ -59694,7 +62179,7 @@ codes shall satisfy the predefined ordering relation of 
the type.
 
 7
 An enumeration_representation_clause specifies the coding aspect of
-representation.  The coding consists of the internal code for each
+representation. The coding consists of the internal code for each
 enumeration literal, that is, the integral value used internally to
 represent each literal.
 
@@ -59736,7 +62221,7 @@ is:
 10
    * An implementation should support at least the internal codes in the
      range System.Min_Int..System.Max_Int.  An implementation need not
-     support enumeration_representation_clause (*note 13.4: S0310.)s for
+     support enumeration_representation_clause (*note 13.4: S0311.)s for
      boolean types.
 
 10.a
@@ -59840,7 +62325,7 @@ File: aarm2012.info,  Node: 13.5,  Next: 13.6,  Prev: 
13.4,  Up: 13
 The (record) layout aspect of representation consists of the storage
 places for some or all components, that is, storage place attributes of
 the components.  The layout can be specified with a
-record_representation_clause (*note 13.5.1: S0312.).
+record_representation_clause (*note 13.5.1: S0313.).
 
 * Menu:
 
@@ -59857,7 +62342,7 @@ File: aarm2012.info,  Node: 13.5.1,  Next: 13.5.2,  Up: 
13.5
 1
 [A record_representation_clause specifies the storage representation of
 records and record extensions, that is, the order, position, and size of
-components (including discriminants, if any).  ]
+components (including discriminants, if any). ]
 
                      _Language Design Principles_
 
@@ -59921,9 +62406,9 @@ If the component_local_name is a direct_name, the 
local_name shall
 denote a component of the type.  For a record extension, the component
 shall not be inherited, and shall not be a discriminant that corresponds
 to a discriminant of the parent type.  If the component_local_name
-(*note 13.1: S0305.) has an attribute_designator (*note 4.1.4: S0101.),
+(*note 13.1: S0306.) has an attribute_designator (*note 4.1.4: S0101.),
 the direct_name (*note 4.1: S0092.) of the local_name (*note 13.1:
-S0305.) shall denote either the declaration of the type or a component
+S0306.) shall denote either the declaration of the type or a component
 of the type, and the attribute_designator (*note 4.1.4: S0101.) shall
 denote an implementation-defined implicit component of the type.
 
@@ -60048,8 +62533,8 @@ implementation may generate names that denote such
 implementation-defined components; such names shall be
 implementation-defined attribute_references.  An implementation may
 allow such implementation-defined names to be used in
-record_representation_clause (*note 13.5.1: S0312.)s.  An implementation
-can restrict such component_clause (*note 13.5.1: S0313.)s in any manner
+record_representation_clause (*note 13.5.1: S0313.)s.  An implementation
+can restrict such component_clause (*note 13.5.1: S0314.)s in any manner
 it sees fit.
 
 15.a
@@ -60078,7 +62563,7 @@ If a record_representation_clause is given for an 
untagged derived type,
 the storage place attributes for all of the components of the derived
 type may differ from those of the corresponding components of the parent
 type, even for components whose storage place is not specified
-explicitly in the record_representation_clause (*note 13.5.1: S0312.).
+explicitly in the record_representation_clause (*note 13.5.1: S0313.).
 
 16.a
           Reason: This is clearly necessary, since the whole record may
@@ -60175,7 +62660,7 @@ The recommended level of support for 
record_representation_clauses is:
           queues, bit maps for barrier values, etc.  In order to control
           the representation of the user-defined components, simply
           declare a record type, give it a record_representation_clause
-          (*note 13.5.1: S0312.), and give the protected type one
+          (*note 13.5.1: S0313.), and give the protected type one
           component whose type is the record type.  Alternatively, if
           the protected object is protecting something like a device
           register, it makes more sense to keep the thing being
@@ -60426,10 +62911,10 @@ place attributes.]
 
 2
 A bit ordering is a method of interpreting the meaning of the storage
-place attributes.  High_Order_First [(known in the vernacular as "big
+place attributes. High_Order_First [(known in the vernacular as "big
 endian")] means that the first bit of a storage element (bit 0) is the
 most significant bit (interpreting the sequence of bits that represent a
-component as an unsigned integer value).  Low_Order_First [(known in the
+component as an unsigned integer value). Low_Order_First [(known in the
 vernacular as "little endian")] means the opposite: the first bit is the
 least significant.
 
@@ -60439,8 +62924,8 @@ For every specific record subtype S, the following 
attribute is defined:
 4
 S'Bit_Order
                Denotes the bit ordering for the type of S. The value of
-               this attribute is of type System.Bit_Order.  Bit_Order
-               may be specified for specific record types via an
+               this attribute is of type System.Bit_Order. Bit_Order may
+               be specified for specific record types via an
                attribute_definition_clause; the expression of such a
                clause shall be static.
 
@@ -60452,7 +62937,7 @@ S'Bit_Order
 If Word_Size = Storage_Unit, the default bit ordering is implementation
 defined.  If Word_Size > Storage_Unit, the default bit ordering is the
 same as the ordering of storage elements in a word, when interpreted as
-an integer.  
+an integer. 
 
 5.a
           Implementation defined: If Word_Size = Storage_Unit, the
@@ -60808,7 +63293,7 @@ Memory_Size
 preelaborable initialization (see *note 10.2.1::).  Address represents
 machine addresses capable of addressing individual storage elements.
 Null_Address is an address that is distinct from the address of any
-object or program unit.  
+object or program unit. 
 
 34.a
           Ramification: The implementation has to ensure that there is
@@ -61033,7 +63518,7 @@ The following language-defined library package exists:
 12
 Storage_Element represents a storage element.  Storage_Offset represents
 an offset in storage elements.  Storage_Count represents a number of
-storage elements.  Storage_Array represents a contiguous sequence of
+storage elements. Storage_Array represents a contiguous sequence of
 storage elements.
 
 12.a
@@ -61218,9 +63703,9 @@ whose sequence_of_statements contains code_statements.]
      A code_statement is only allowed in the
      handled_sequence_of_statements (*note 11.2: S0265.) of a
      subprogram_body (*note 6.3: S0177.).  If a subprogram_body (*note
-     6.3: S0177.) contains any code_statement (*note 13.8: S0317.)s,
+     6.3: S0177.) contains any code_statement (*note 13.8: S0318.)s,
      then within this subprogram_body (*note 6.3: S0177.) the only
-     allowed form of statement is a code_statement (*note 13.8: S0317.)
+     allowed form of statement is a code_statement (*note 13.8: S0318.)
      (labeled or not), the only allowed declarative_item (*note 3.11:
      S0087.)s are use_clause (*note 8.4: S0196.)s, and no
      exception_handler (*note 11.2: S0266.) is allowed (comments and
@@ -61506,7 +63991,7 @@ The recommended level of support for unchecked 
conversions is:
 17/3
    * {AI05-0299-1AI05-0299-1} Unchecked conversions should be supported
      and should be reversible in the cases where this subclause defines
-     the result.  To enable meaningful use of unchecked conversion, a
+     the result. To enable meaningful use of unchecked conversion, a
      contiguous representation should be used for elementary subtypes,
      for statically constrained array subtypes whose component subtype
      is one of the subtypes described in this paragraph, and for record
@@ -61554,7 +64039,7 @@ Subsequent uses of abnormal objects can be erroneous.
 2
 A scalar object can have an invalid representation, which means that the
 object's representation does not represent any value of the object's
-subtype.  The primary cause of invalid representations is uninitialized
+subtype. The primary cause of invalid representations is uninitialized
 variables.
 
 3
@@ -61656,12 +64141,12 @@ object.
 If the representation of a scalar object does not represent a value of
 the object's subtype (perhaps because the object was not initialized),
 the object is said to have an invalid representation.  It is a bounded
-error to evaluate the value of such an object.  If the error is
-detected, either Constraint_Error or Program_Error is raised.
-Otherwise, execution continues using the invalid representation.  The
-rules of the language outside this subclause assume that all objects
-have valid representations.  The semantics of operations on invalid
-representations are as follows:
+error to evaluate the value of such an object. If the error is detected,
+either Constraint_Error or Program_Error is raised.  Otherwise,
+execution continues using the invalid representation.  The rules of the
+language outside this subclause assume that all objects have valid
+representations.  The semantics of operations on invalid representations
+are as follows:
 
 9.a
           Discussion: The AARM is more explicit about what happens when
@@ -61899,13 +64384,14 @@ like.
 For a prefix X that denotes a scalar object [(after any implicit
 dereference)], the following attribute is defined:
 
-3/3
+3/4
 X'Valid
-               {AI05-0153-3AI05-0153-3} Yields True if and only if the
-               object denoted by X is normal, has a valid
-               representation, and the predicate of the nominal subtype
-               of X evaluates to True.  The value of this attribute is
-               of the predefined type Boolean.
+               {AI05-0153-3AI05-0153-3} {AI12-0071-1AI12-0071-1} Yields
+               True if and only if the object denoted by X is normal,
+               has a valid representation, and then, if the preceding
+               conditions hold, the value of X also satisfies the
+               predicates of the nominal subtype of X. The value of this
+               attribute is of the predefined type Boolean.
 
 3.a
           Ramification: Having checked that X'Valid is True, it is safe
@@ -61942,11 +64428,26 @@ X'Valid
 11
         * use of an object whose Address has been specified.
 
-12
-     23  X'Valid is not considered to be a read of X; hence, it is not
-     an error to check the validity of invalid data.
+12/4
+     23  {AI12-0071-1AI12-0071-1} Determining whether X is normal and
+     has a valid representation as part of the evaluation of X'Valid is
+     not considered to include an evaluation of X; hence, it is not an
+     error to check the validity of an object that is invalid or
+     abnormal.  Determining whether X satisfies the predicates of its
+     nominal subtype may include an evaluation of X, but only after it
+     has been determined that X has a valid representation.
+
+13/4
+     {AI12-0071-1AI12-0071-1} If X is volatile, the evaluation of
+     X'Valid is considered a read of X.
+
+13.a/4
+          Reason: Since an implementation is not allowed to add, remove,
+          or reorder accesses to volatile objects, we have to define
+          X'Valid as a read so that it is implementable for most
+          subtypes as the value of the object is required.
 
-13/2
+14/2
      24  {AI95-00426-01AI95-00426-01} The Valid attribute may be used to
      check the result of calling an instance of Unchecked_Conversion (or
      any other operation that can return invalid values).  However, an
@@ -61954,13 +64455,13 @@ X'Valid
      are permitted to raise Constraint_Error or Program_Error if they
      detect the use of an invalid representation (see *note 13.9.1::).
 
-13.a
+14.a
           Ramification: If X is of an enumeration type with a
           representation clause, then X'Valid checks that the value of X
           when viewed as an integer is one of the specified internal
           codes.
 
-13.b
+14.b
           Reason: Valid is defined only for scalar objects because the
           implementation and description burden would be too high for
           other types.  For example, given a typical run-time model, it
@@ -61974,17 +64475,17 @@ X'Valid
           components.  Furthermore, such types should not contain access
           subcomponents.
 
-13.c/2
+14.c/2
           This paragraph was deleted.{AI95-00114-01AI95-00114-01}
 
                         _Extensions to Ada 83_
 
-13.d
+14.d
           X'Valid is new in Ada 95.
 
                      _Wording Changes from Ada 95_
 
-13.e/2
+14.e/2
           {AI95-00426-01AI95-00426-01} Added a note explaining that
           handlers for Constraint_Error and Program_Error are needed in
           the general case of testing for validity.  (An implementation
@@ -61993,11 +64494,20 @@ X'Valid
 
                     _Wording Changes from Ada 2005_
 
-13.f/3
+14.f/3
           {AI05-0153-3AI05-0153-3} The validity check now also includes
           a check of the predicate aspects (see *note 3.2.4::), if any,
           of the subtype of the object.
 
+                    _Wording Changes from Ada 2012_
+
+14.g/4
+          {AI12-0071-1AI12-0071-1} Corrigendum: Updated wording of the
+          attributes X'Valid to use the new term "satisfies the
+          predicates" (see *note 3.2.4::).  Also updated the notes to
+          make sense when evaluating predicates and testing validity of
+          volatile objects.
+
 
 File: aarm2012.info,  Node: 13.10,  Next: 13.11,  Prev: 13.9,  Up: 13
 
@@ -62021,7 +64531,7 @@ X'Unchecked_Access
                3.10.2::) apply also to X'Unchecked_Access, except that,
                for the purposes of accessibility rules and checks, it is
                as if X were declared immediately within a library
-               package.  
+               package. 
 
 3.a/3
           Ramification: {AI05-0005-1AI05-0005-1} We say "rules and
@@ -62222,7 +64732,7 @@ S'Storage_Size
 15
 Storage_Size or Storage_Pool may be specified for a nonderived
 access-to-object type via an attribute_definition_clause (*note 13.3:
-S0309.); the name in a Storage_Pool clause shall denote a variable.
+S0310.); the name in a Storage_Pool clause shall denote a variable.
 
 15.a/3
           Aspect Description for Storage_Pool: Pool of memory from which
@@ -62265,7 +64775,7 @@ are described in *note 13.11.4::.
 17
 If Storage_Pool is not specified for a type defined by an
 access_to_object_definition, then the implementation chooses a standard
-storage pool for it in an implementation-defined manner.  In this case,
+storage pool for it in an implementation-defined manner. In this case,
 the exception Storage_Error is raised by an allocator if there is not
 enough storage.  It is implementation defined whether or not the
 implementation provides user-accessible names for the standard pool
@@ -62295,13 +64805,20 @@ type(s).
           using a contiguous block of memory (although each allocation
           returns a pointer to a contiguous block of memory).
 
-18
-If Storage_Size is specified for an access type, then the Storage_Size
-of this pool is at least that requested, and the storage for the pool is
+18/4
+{AI12-0043-1AI12-0043-1} If Storage_Size is specified for an access type
+T, an implementation-defined pool P is used for the type.  The
+Storage_Size of P is at least that requested, and the storage for P is
 reclaimed when the master containing the declaration of the access type
-is left.  If the implementation cannot satisfy the request,
-Storage_Error is raised at the point of the attribute_definition_clause
-(*note 13.3: S0309.).  If neither Storage_Pool nor Storage_Size are
+is left. If the implementation cannot satisfy the request, Storage_Error
+is raised at the freezing point of type T. The storage pool P is used
+only for allocators returning type T or other access types specified to
+use T'Storage_Pool.  Storage_Error is raised by an allocator returning
+such a type if the storage space of P is exhausted (additional memory is
+not allocated).
+
+18.1/4
+{AI12-0043-1AI12-0043-1} If neither Storage_Pool nor Storage_Size are
 specified, then the meaning of Storage_Size is implementation defined.
 
 18.a/2
@@ -62434,7 +64951,7 @@ Allocate is propagated by the construct that contained 
the call.]
 
 21.6/3
 {AI05-0107-1AI05-0107-1} The number of calls to Allocate needed to
-implement an allocator for any particular type is unspecified.  The
+implement an allocator for any particular type is unspecified. The
 number of calls to Deallocate needed to implement an instance of
 Unchecked_Deallocation (see *note 13.11.2::) for any particular object
 is the same as the number of Allocate calls for that object.
@@ -62844,6 +65361,14 @@ use:
           Max_Alignment_For_Allocation.  This eases implementation in
           some cases.
 
+                    _Wording Changes from Ada 2012_
+
+43.m/4
+          {AI12-0043-1AI12-0043-1} Corrigendum: Tightened up the
+          description of the implementation-defined pool used when
+          Storage_Size is specified.  This is not intended to change any
+          implementation.
+
 * Menu:
 
 * 13.11.1 ::  Storage Allocation Attributes
@@ -62964,8 +65489,8 @@ The following language-defined generic library 
procedure exists:
 {AI05-0157-1AI05-0157-1} A call on an instance of Unchecked_Deallocation
 is illegal if the actual access type of the instance is a type for which
 the Storage_Size has been specified by a static expression with value
-zero or is defined by the language to be zero.  In addition to the
-places where Legality Rules normally apply (see *note 12.3::), this rule
+zero or is defined by the language to be zero. In addition to the places
+where Legality Rules normally apply (see *note 12.3::), this rule
 applies also in the private part of an instance of a generic unit.
 
 3.b/3
@@ -63009,10 +65534,11 @@ Procedure Free has the following effect:
           Ramification: {AI05-0107-1AI05-0107-1} Free calls only the
           specified Deallocate procedure to do deallocation.
 
-10/2
-{AI95-00416-01AI95-00416-01} After Free(X), the object designated by X,
-and any subcomponents (and coextensions) thereof, no longer exist; their
-storage can be reused for other purposes.
+10/4
+{AI95-00416-01AI95-00416-01} {AI12-0148-1AI12-0148-1} After the
+finalization step of Free(X), the object designated by X, and any
+subcomponents (and coextensions) thereof, no longer exist; their storage
+can be reused for other purposes.
 
                       _Bounded (Run-Time) Errors_
 
@@ -63049,6 +65575,66 @@ task) is not reclaimed prior to task termination.
 15.a
           Ramification: The storage might never be reclaimed.
 
+15.1/4
+{AI12-0148-1AI12-0148-1} An access value that designates a nonexistent
+object is called a dangling reference.
+
+15.b/4
+          Discussion: These can result from use of
+          Unchecked_Deallocation, Unchecked_Deallocate_Subpool, and
+          attribute Unchecked_Access.  Bad results from
+          Unchecked_Conversion and from stream-oriented attributes are
+          abnormal by *note 13.9.1::, which is stronger and thus takes
+          precedence.
+
+15.2/4
+{AI12-0148-1AI12-0148-1} [If a dangling reference is dereferenced
+(implicitly or explicitly), execution is erroneous (see below).]  If
+there is no explicit or implicit dereference, then it is a bounded error
+to evaluate an expression whose result is a dangling reference.  If the
+error is detected, either Constraint_Error or Program_Error is raised. 
+Otherwise, execution proceeds normally, but with the possibility that
+the access value designates some other existing object.
+
+15.c/4
+          Reason: If a dangling reference is compared with another
+          access value, a result of either True or False is allowed.  We
+          need to allow this so that simple implementations of access
+          values (for instance, as a bare address) can work if the
+          memory in question is reused.  (The formal definition of
+          access equality is that it returns True if both access values
+          designate the same object; that can never be True if one of
+          the values is a dangling reference, and the other is not, but
+          both values could refer to the same memory.)  Membership tests
+          that do not involve an implicit dereference generally do not
+          depend on the access value at all.
+
+15.d/4
+          We allow Constraint_Error to be raised here so that dangling
+          reference and null pointer checks can be combined into a
+          single check.  If different exceptions are required, then the
+          checks have to be made separately - but there's little
+          semantic difference (neither designate a usable object).
+
+15.e/4
+          Ramification: If a dangling reference is assigned into an
+          object, including being passed to a formal parameter, that
+          object also contains a dangling reference afterwards.
+
+15.f/4
+          Discussion: For equality and membership operations on
+          composite types, this applies to any parts that are access
+          types, as these operations are created based on the operations
+          of the components (which triggers the bounded error).  For
+          other operations on composite types, the bounded error is not
+          triggered.  For instance, an assignment of a composite object
+          with a subcomponent that is a dangling reference has to work
+          normally; no exception can be raised, but the target object
+          will have a subcomponent that is a dangling references, and a
+          (direct) use of that subcomponent is again a bounded error.
+          This is similar to the way that assignments of invalid
+          subcomponents are handled (see *note 13.9.1::).
+
                          _Erroneous Execution_
 
 16/3
@@ -63155,14 +65741,53 @@ been specified to be zero or is defined by the 
language to be zero.
           similarly to allocators for access types where allocators
           would be banned.
 
+                    _Inconsistencies With Ada 2012_
+
+19.e/4
+          {AI12-0148-1AI12-0148-1} Corrigendum: Defined a "dangling
+          reference", and specified that a dangling reference might
+          designate some other existing object.  This allows simple
+          implementations of access values and reuse of object memory
+          after deallocation.  In prior versions of Ada, "=" between a
+          dangling reference and an access to an existing object has to
+          return False, even if the existing object and the object
+          designated by the dangling reference are allocated in the same
+          memory.  A program that depended upon that could break with
+          this revised rule.  However, as a practical matter, almost all
+          Ada implementations use simple implementations of access types
+          that do not meet that requirement.  So such a program would
+          not work (consistently) on most Ada implementations; thus the
+          change shouldn't break any existing programs - it just aligns
+          the Standard with actual practice.
+
+19.f/4
+          {AI12-0148-1AI12-0148-1} A side effect of this change is to
+          allow an Ada implementation to detect dangling references in
+          more places.  This does not require any Ada implementation to
+          change, and if the implementation does change, it just means
+          that errors will be detected earlier.
+
+                    _Wording Changes from Ada 2012_
+
+19.g/4
+          {AI12-0148-1AI12-0148-1} Corrigendum: Clarified that
+          deallocated objects cease to exist after finalization but
+          before Deallocate is called.  This is necessary to prevent
+          erroneous execution from being triggered by the rules in *note
+          13.11:: in the time between the end of finalization and the
+          end of the call to the instance of Unchecked_Deallocation.
+
 
 File: aarm2012.info,  Node: 13.11.3,  Next: 13.11.4,  Prev: 13.11.2,  Up: 13.11
 
 13.11.3 Default Storage Pools
 -----------------------------
 
-1/3
-This paragraph was deleted.{AI05-0229-1AI05-0229-1}
+1/4
+{AI05-0229-1AI05-0229-1} {AI12-0003-1AI12-0003-1} [Pragma and aspect
+Default_Storage_Pool specify the storage pool that will be used in the
+absence of an explicit specification of a storage pool or storage size
+for an access type.]
 
                                _Syntax_
 
@@ -63174,9 +65799,9 @@ This paragraph was deleted.{AI05-0229-1AI05-0229-1}
      {AI05-0190-1AI05-0190-1} {AI05-0229-1AI05-0229-1}   pragma 
      Default_Storage_Pool (storage_pool_indicator);
 
-3.1/3
-     {AI05-0190-1AI05-0190-1} storage_pool_indicator ::= storage_pool_
-     name | null
+3.1/4
+     {AI05-0190-1AI05-0190-1} {AI12-0003-1AI12-0003-1}
+     storage_pool_indicator ::= storage_pool_name | null | Standard
 
 3.2/3
      {AI05-0190-1AI05-0190-1} A pragma Default_Storage_Pool is allowed
@@ -63196,19 +65821,50 @@ Root_Storage_Pool'Class.
 {AI05-0190-1AI05-0190-1} {AI05-0229-1AI05-0229-1} The storage_pool_name
 shall denote a variable.
 
-4.1/3
-{AI05-0190-1AI05-0190-1} If the pragma is used as a configuration
-pragma, the storage_pool_indicator shall be null, and it defines the
-default pool to be null within all applicable compilation units (see
+4.1/4
+{AI12-0003-1AI12-0003-1} The Standard storage_pool_indicator is an
+identifier specific to a pragma (see *note 2.8::) and does not denote
+any declaration.  If the storage_pool_indicator is Standard, then there
+shall not be a declaration with defining_identifier Standard that is
+immediately visible at the point of the pragma, other than package
+Standard itself.
+
+4.a.1/4
+          Reason: We considered having the Standard
+          storage_pool_indicator resolve to package Standard rather than
+          being an identifier specific to a pragma.  That would
+          eliminate the need for a special check.  But it would be
+          bizarre to have something that could resolve to either an
+          object or a (single) package, and resolving to package
+          Standard would imply that the standard pool is an object
+          declared in that package.  A storage pool object must be a
+          variable (see *note 13.11::), yet preelaborable packages
+          depend on package Standard, which would require implementers
+          to implement the standard storage pool with
+          Preelaborable_Initialization, which is an unnecessary
+          restriction.
+
+4.a.2/4
+          No declaration of Standard can ever be use-visible, as the
+          language-defined nonoverloadable definition of Standard will
+          hide any use-visible declarations.  Thus we need only concern
+          ourselves with eliminating any possible confusion with regard
+          to immediately visible declarations with the
+          defining_identifier Standard.
+
+4.2/4
+{AI05-0190-1AI05-0190-1} {AI12-0003-1AI12-0003-1} If the pragma is used
+as a configuration pragma, the storage_pool_indicator shall be either
+null or Standard, and it defines the default pool to be the given
+storage_pool_indicator within all applicable compilation units (see
 *note 10.1.5::), except within the immediate scope of another pragma
 Default_Storage_Pool.  Otherwise, [the pragma occurs immediately within
 a sequence of declarations, and] it defines the default pool within the
-immediate scope of the pragma to be either null or the pool denoted by
-the storage_pool_name, except within the immediate scope of a later
-pragma Default_Storage_Pool.  [Thus, an inner pragma overrides an outer
-one.]
+immediate scope of the pragma to be the given storage_pool_indicator,
+except within the immediate scope of a later pragma
+Default_Storage_Pool.  [Thus, an inner pragma overrides an outer one.]
 
-4.2/3
+4.3/4
 {AI05-0190-1AI05-0190-1} {AI05-0262-1AI05-0262-1} A pragma
 Default_Storage_Pool shall not be used as a configuration pragma that
 applies to a compilation unit that is within the immediate scope of
@@ -63235,21 +65891,42 @@ another pragma Default_Storage_Pool.
 
                           _Static Semantics_
 
-5/3
-{AI05-0190-1AI05-0190-1} {AI05-0229-1AI05-0229-1} The language-defined
-aspect Default_Storage_Pool may be specified for a generic instance; it
-defines the default pool for access types within an instance.  The
-expected type for the Default_Storage_Pool aspect is
-Root_Storage_Pool'Class.  The aspect_definition must be a name that
-denotes a variable.  This aspect overrides any Default_Storage_Pool
-pragma that might apply to the generic unit; if the aspect is not
-specified, the default pool of the instance is that defined for the
-generic unit.
+5/4
+{AI05-0190-1AI05-0190-1} {AI05-0229-1AI05-0229-1}
+{AI12-0003-1AI12-0003-1} The language-defined aspect
+Default_Storage_Pool may be specified for a generic instance; it defines
+the default pool for access types within an instance.  .
+
+5.1/4
+{AI12-0003-1AI12-0003-1} The Default_Storage_Pool aspect may be
+specified as Standard, which is an identifier specific to an aspect (see
+*note 13.1.1::) and defines the default pool to be Standard.  In this
+case, there shall not be a declaration with defining_identifier Standard
+that is immediately visible at the point of the aspect specification,
+other than package Standard itself.
+
+5.2/4
+{AI12-0003-1AI12-0003-1} Otherwise, the expected type for the
+Default_Storage_Pool aspect is Root_Storage_Pool'Class and the
+aspect_definition shall be a name that denotes a variable.  This aspect
+overrides any Default_Storage_Pool pragma that might apply to the
+generic unit; if the aspect is not specified, the default pool of the
+instance is that defined for the generic unit.
 
 5.a/3
           Aspect Description for Default_Storage_Pool: Default storage
           pool for a generic instance.
 
+5.3/4
+{AI12-0136-1AI12-0136-1} The effect of specifying the aspect
+Default_Storage_Pool on an instance of a language-defined generic unit
+is implementation-defined.
+
+5.a.1/4
+          Implementation defined: The effect of specifying aspect
+          Default_Storage_Pool on an instance of a language-defined
+          generic unit.
+
 6/3
 {AI05-0190-1AI05-0190-1} {AI05-0229-1AI05-0229-1} For nonderived access
 types declared in places where the default pool is defined by the pragma
@@ -63261,14 +65938,15 @@ follows, unless Storage_Pool or Storage_Size is 
specified for the type:
      Storage_Size attribute is defined by the language to be zero.
      [Therefore, an allocator for such a type is illegal.]
 
-6.2/3
-   * {AI05-0190-1AI05-0190-1} If the default pool is nonnull, the
-     Storage_Pool attribute is that pool.
+6.2/4
+   * {AI05-0190-1AI05-0190-1} {AI12-0003-1AI12-0003-1} If the default
+     pool is neither null nor Standard, the Storage_Pool attribute is
+     that pool.
 
-6.3/3
-{AI05-0190-1AI05-0190-1} [Otherwise, there is no default pool; the
-standard storage pool is used for the type as described in *note
-13.11::.]
+6.3/4
+{AI05-0190-1AI05-0190-1} {AI12-0003-1AI12-0003-1} Otherwise (including
+when the default pool is specified as Standard), the standard storage
+pool is used for the type as described in *note 13.11::.
 
 6.a/3
           Ramification: {AI05-0190-1AI05-0190-1}
@@ -63316,7 +65994,7 @@ This paragraph was deleted.{AI05-0229-1AI05-0229-1}
 {AI05-0190-1AI05-0190-1} {AI05-0229-1AI05-0229-1} An object created by
 an allocator that is passed as the actual parameter to an access
 parameter may be allocated on the stack, and automatically reclaimed,
-regardless of the default pool..
+regardless of the default pool.
 
 8.a/3
           Discussion: {AI05-0190-1AI05-0190-1} This matches the required
@@ -63354,9 +66032,9 @@ regardless of the default pool..
 
                        _Extensions to Ada 2005_
 
-9.c/3
-          {AI05-0190-1AI05-0190-1} The pragma Default_Storage_Pool is
-          new.
+9.c/4
+          {AI05-0190-1AI05-0190-1} {AI12-0005-1AI12-0005-1} The pragma
+          Default_Storage_Pool and aspect Default_Storage_Pool are new.
 
                     _Wording Changes from Ada 2005_
 
@@ -63372,6 +66050,21 @@ regardless of the default pool..
           that garbage collection of such objects would be ineffective
           in the standard mode anyway.
 
+                       _Extensions to Ada 2012_
+
+9.e/4
+          {AI05-0003-1AI05-0003-1} Corrigendum: The
+          storage_pool_indicator Standard is new.
+
+                    _Wording Changes from Ada 2012_
+
+9.f/4
+          {AI12-0136-1AI12-0136-1} Corrigendum: We now explicitly say
+          that the behavior of language-defined generic units when given
+          the Default_Storage_Pool aspect is implementation-defined.
+          Portable code cannot rely on such a package using a particular
+          pool implementation.
+
 
 File: aarm2012.info,  Node: 13.11.4,  Next: 13.11.5,  Prev: 13.11.3,  Up: 13.11
 
@@ -63490,15 +66183,17 @@ subpool.]
           Proof: We know that subpool handles designate subpool objects
           because the declaration of Subpool_Handle says so.
 
-20/3
-{AI05-0111-3AI05-0111-3} Each subpool belongs to a single storage pool
-[(which will always be a pool that supports subpools)].  An access to
-the pool that a subpool belongs to can be obtained by calling
-Pool_of_Subpool with the subpool handle.  Set_Pool_of_Subpool causes the
-subpool of the subpool handle to belong to the given pool[; this is
-intended to be called from subpool constructors like Create_Subpool.]
-Set_Pool_of_Subpool propagates Program_Error if the subpool already
-belongs to a pool.
+20/4
+{AI05-0111-3AI05-0111-3} {AI05-0145-1AI05-0145-1} Each subpool belongs
+to a single storage pool [(which will always be a pool that supports
+subpools)].  An access to the pool that a subpool belongs to can be
+obtained by calling Pool_of_Subpool with the subpool handle.
+Set_Pool_of_Subpool causes the subpool of the subpool handle to belong
+to the given pool[; this is intended to be called from subpool
+constructors like Create_Subpool.]  Set_Pool_of_Subpool propagates
+Program_Error if the subpool already belongs to a pool.  If
+Set_Pool_of_Subpool has not yet been called for a subpool,
+Pool_of_Subpool returns null.
 
 20.a/3
           Discussion: Pool_of_Subpool and Set_Pool_of_Subpool are
@@ -63543,9 +66238,9 @@ of the storage pool object.  If the specified storage 
pool object is a
 storage pool that supports subpools, then the name that denotes the
 object shall not denote part of a formal parameter, nor shall it denote
 part of a dereference of a value of a non-library-level general access
-type.  In addition to the places where Legality Rules normally apply
-(see *note 12.3::), these rules also apply in the private part of an
-instance of a generic unit.
+type. In addition to the places where Legality Rules normally apply (see
+*note 12.3::), these rules also apply in the private part of an instance
+of a generic unit.
 
                           _Dynamic Semantics_
 
@@ -63611,6 +66306,14 @@ Program_Error if the allocated object has task parts.
 {AI05-0111-3AI05-0111-3} Unless overridden, Default_Subpool_for_Pool
 propagates Program_Error.
 
+                         _Erroneous Execution_
+
+31.1/4
+{AI12-0142-1AI12-0142-1} If Allocate_From_Subpool does not meet one or
+more of the requirements on the Allocate procedure as given in the
+Erroneous Execution rules of *note 13.11::, then the program execution
+is erroneous.
+
                      _Implementation Permissions_
 
 32/3
@@ -63683,6 +66386,24 @@ overridden.]
           {AI05-0111-3AI05-0111-3} {AI05-0252-1AI05-0252-1} Subpools and
           the package System.Storage_Pools.Subpools are new.
 
+                    _Wording Changes from Ada 2012_
+
+35.b/4
+          {AI12-0142-1AI12-0142-1} Corrigendum: Clarified that an
+          incorrect implementation of Allocate_From_Subpool causes
+          execution to become erroneous.  The wording already said that
+          the requirements of Allocate apply to Allocate_From_Subpool,
+          so we're just confirming the consequences of violating those
+          requirements also apply.
+
+35.c/4
+          {AI12-0145-1AI12-0145-1} Corrigendum: Clarified that
+          Pool_of_Subpool returns null if Set_Pool_of_Subpool has not
+          been called.  As that can be inferred from the definition, and
+          all known existing implementations return null in this case,
+          we document this as a wording change rather than a possible
+          inconsistency.
+
 
 File: aarm2012.info,  Node: 13.11.5,  Next: 13.11.6,  Prev: 13.11.4,  Up: 13.11
 
@@ -63720,6 +66441,10 @@ effects:
    * Any of the objects allocated from the subpool that still exist are
      finalized in an arbitrary order;
 
+7.1/4
+   * {AI12-0148-1AI12-0148-1} All of the objects allocated from the
+     subpool cease to exist;
+
 8/3
    * The following [dispatching] call is then made:
 
@@ -63765,6 +66490,17 @@ belong to that pool that have not yet been finalized.
 10.f/3
           {AI05-0111-3AI05-0111-3} Unchecked_Deallocate_Subpool is new.
 
+                    _Wording Changes from Ada 2012_
+
+10.g/4
+          {AI12-0148-1AI12-0148-1} Corrigendum: Added missing wording to
+          state that the objects cease to exist after the completion of
+          finalization.  This is formally an inconsistency (it would be
+          possible to depend on the fact that objects finalized by
+          Unchecked_Deallocate_Subpool still exist), but that violates
+          every sane expectation for a procedure called "Deallocate"
+          something.
+
 
 File: aarm2012.info,  Node: 13.11.6,  Prev: 13.11.5,  Up: 13.11
 
@@ -63819,10 +66555,10 @@ implementation of the classic Mark/Release pool using 
subpools:
         subtype Subpool_Indexes is Positive range 1 .. 10;
         type Subpool_Array is array (Subpool_Indexes) of aliased MR_Subpool;
 
-11/3
-     {AI05-0298-1AI05-0298-1}    type Mark_Release_Pool_Type (Pool_Size : 
Storage_Count) is new
+11/4
+     {AI05-0298-1AI05-0298-1} {AI12-0134-1AI12-0134-1}    type 
Mark_Release_Pool_Type (Pool_Size : Storage_Count) is new
            Subpools.Root_Storage_Pool_With_Subpools with record
-           Storage         : Storage_Array (0 .. Pool_Size-1);
+           Storage         : Storage_Array (0 .. Pool_Size);
            Next_Allocation : Storage_Count := 0;
            Markers         : Subpool_Array;
            Current_Pool    : Subpool_Indexes := 1;
@@ -63938,7 +66674,11 @@ implementation of the classic Mark/Release pool using 
subpools:
               raise Program_Error; -- Only the last marked subpool can be used 
for allocations.
            end if;
 
-28/3
+28/4
+     {AI12-0080-1AI12-0080-1}       -- Check for the maximum supported 
alignment, which is the alignment of the storage area:
+           if Alignment > Pool.Storage'Alignment then
+              raise Program_Error;
+           end if;
            -- Correct the alignment if necessary:
            Pool.Next_Allocation := Pool.Next_Allocation +
               ((-Pool.Next_Allocation) mod Alignment);
@@ -65109,7 +67849,7 @@ S'Class'Input
 implementation of Read and Input for a composite type, for each scalar
 component that is a discriminant or that has an implicit initial value,
 a check is made that the value returned by Read for the component
-belongs to its subtype.  Constraint_Error is raised if this check fails.
+belongs to its subtype. Constraint_Error is raised if this check fails.
 For other scalar components, no check is made.  For each component that
 is of an access type, if the implementation can detect that the value
 returned by Read for the component is not a value of its subtype,
@@ -65154,24 +67894,64 @@ implementation of Read and Input for a type, 
End_Error is raised if the
 end of the stream is reached before the reading of a value of the type
 is completed.
 
-38/3
+38/4
 {8652/00408652/0040} {AI95-00108-01AI95-00108-01}
 {AI95-00195-01AI95-00195-01} {AI95-00251-01AI95-00251-01}
-{AI05-0039-1AI05-0039-1} The stream-oriented attributes may be specified
-for any type via an attribute_definition_clause.  The subprogram name
-given in such a clause shall statically denote a subprogram that is not
-an abstract subprogram.  Furthermore, if a stream-oriented attribute is
-specified for an interface type by an attribute_definition_clause, the
-subprogram name given in the clause shall statically denote a null
-procedure.  
-
-38.a/2
-          This paragraph was deleted.{AI95-00195-01AI95-00195-01}
+{AI05-0039-1AI05-0039-1} {AI12-0106-1AI12-0106-1}
+{AI12-0121-1AI12-0121-1} The stream-oriented attributes may be specified
+for any type via an attribute_definition_clause.  [Alternatively, each
+of the specific stream-oriented attributes may be specified using an
+aspect_specification on any type_declaration, with the aspect name being
+the corresponding attribute name.]  Each of the class-wide
+stream-oriented attributes may be specified using an
+aspect_specification for a tagged type T using the name of the
+stream-oriented attribute followed by 'Class; such class-wide aspects do
+not apply to other descendants of T. 
+
+38.a/4
+          Reason: {AI95-00195-01AI95-00195-01} {AI12-0106-1AI12-0106-1}
+          We need the last sentence to override the blanket rule given
+          in *note 13.1.1:: that aspect'Class applies to the type and
+          all descendants.
 
 38.a.1/2
           This paragraph was deleted.{8652/00408652/0040}
           {AI95-00108-01AI95-00108-01} {AI95-00195-01AI95-00195-01}
 
+38.a.2/4
+          Proof: {AI12-0121-1AI12-0121-1} *note 13.1.1:: says that all
+          operational attributes can be specified with an
+          aspect_specification.
+
+38.a.3/4
+          Aspect Description for Read'Class: Procedure to read a value
+          from a stream for the class-wide type associated with a given
+          type.
+
+38.a.4/4
+          Aspect Description for Write'Class: Procedure to write a value
+          to a stream for a the class-wide type associated with a given
+          type.
+
+38.a.5/4
+          Aspect Description for Input'Class: Function to read a value
+          from a stream for a the class-wide type associated with a
+          given type, including any bounds and discriminants.
+
+38.a.6/4
+          Aspect Description for Output'Class: Procedure to write a
+          value to a stream for a the class-wide type associated with a
+          given type, including any bounds and discriminants.
+
+38.1/4
+{AI12-0121-1AI12-0121-1} The subprogram name given in such an
+attribute_definition_clause (*note 13.3: S0310.) or aspect_specification
+(*note 13.1.1: S0307.) shall statically denote a subprogram that is not
+an abstract subprogram.  Furthermore, if a specific stream-oriented
+attribute is specified for an interface type, the subprogram name given
+in the attribute_definition_clause or aspect_specification shall
+statically denote a null procedure.
+
 38.b/2
           Discussion: {AI95-00251-01AI95-00251-01} Stream attributes
           (other than Input) are always null procedures for interface
@@ -65318,11 +68098,14 @@ following conditions is true:
           use default class-wide attributes with limited types, a
           significant limitation.
 
-49/2
-{AI95-00195-01AI95-00195-01} An attribute_reference for one of the
-stream-oriented attributes is illegal unless the attribute is available
-at the place of the attribute_reference.  Furthermore, an
-attribute_reference for T'Input is illegal if T is an abstract type.
+49/4
+{AI95-00195-01AI95-00195-01} {AI12-0030-1AI12-0030-1} An
+attribute_reference for one of the stream-oriented attributes is illegal
+unless the attribute is available at the place of the
+attribute_reference.  Furthermore, an attribute_reference for T'Input is
+illegal if T is an abstract type.  In addition to the places where
+Legality Rules normally apply (see *note 12.3::), these rules also apply
+in the private part of an instance of a generic unit.
 
 49.a/2
           Discussion: Stream attributes always exist.  It is illegal to
@@ -65341,6 +68124,35 @@ attribute_reference for T'Input is illegal if T is an 
abstract type.
           would have to be abstract, and we do not allow specifying an
           attribute with an abstract subprogram.
 
+49.c/4
+          To be honest: {AI12-0030-1AI12-0030-1} "These rules apply"
+          refers to just this paragraph and not to the rest of the rules
+          in this section.  This rule probably should have been a
+          Legality Rule, but the word "illegal" should key the reader
+          that this is a Legality Rule, no matter under what text
+          heading it occurs.
+
+49.1/4
+{AI12-0030-1AI12-0030-1} Unless inherited from a parent type, if any,
+for an untagged type having a task, protected, or explicitly limited
+record part, the default implementation of each of the Read, Write,
+Input, and Output attributes raises Program_Error and performs no other
+action.
+
+49.d/4
+          Discussion: {AI12-0030-1AI12-0030-1} It might seem that there
+          is no need to specify the behavior of the default
+          implementation of a streaming attribute of, for example, a
+          task type because there is no way that it can be invoked.  It
+          is possible, however, to construct an example where such a
+          stream attribute can be invoked.  This involves using a formal
+          untagged limited derived type for which some streaming
+          attribute is available (because it was explicitly specified
+          for the ancestor type) and a corresponding actual type for
+          which the attribute is unspecified (because the derivation
+          occurred before the aspect was specified for the ancestor type
+          and the specification was therefore not inherited).
+
 50/3
 {AI95-00195-01AI95-00195-01} {AI05-0192-1AI05-0192-1} In the
 parameter_and_result_profiles for the default implementations of the
@@ -65707,6 +68519,31 @@ Example of user-defined Write attribute:
           Stream_Size has no effect on and is not effected by
           user-defined stream attributes.
 
+                       _Extensions to Ada 2012_
+
+60.cc/4
+          {AI12-0106-1AI12-0106-1} Corrigendum: Defined how to specify a
+          class-wide stream-oriented attribute using an
+          aspect_specification.  It was always intended that this was
+          possible, but the method was not clear, as a class-wide type
+          never has an explicit declaration.
+
+                    _Wording Changes from Ada 2012_
+
+60.dd/4
+          {AI12-0030-1AI12-0030-1} Corrigendum: Defined the runtime
+          effect of stream attributes for untagged limited types, as
+          there is a weird corner case where they can be called.  We
+          don't specify this as an inconsistency, as it doesn't make
+          semantic sense to stream a task, and nothing useful could have
+          been done with that, so it should not exist in any programs.
+
+60.ee/4
+          {AI12-0106-1AI12-0106-1} Corrigendum: Clarified that the same
+          Legality Rules apply when a stream-oriented attribute is
+          specified via an aspect_specification as applied when it is
+          specified via an attribute_definition_clause.
+
 
 File: aarm2012.info,  Node: 13.14,  Prev: 13.13,  Up: 13
 
@@ -65925,15 +68762,16 @@ freezing of its profile in some contexts, as 
described below.  At the
 place where the profile of a callable entity becomes frozen, the entity
 itself becomes frozen.
 
-3/3
+3/4
 {8652/00148652/0014} {AI05-0017-1AI05-0017-1} {AI05-0019-1AI05-0019-1}
-The end of a declarative_part, protected_body, or a declaration of a
-library package or generic library package, causes freezing of each
-entity and profile declared within it, except for incomplete types.  A
-noninstance body other than a renames-as-body causes freezing of each
-entity and profile declared before it within the same declarative_part
-that is not an incomplete type; it only causes freezing of an incomplete
-type if the body is within the immediate scope of the incomplete type.
+{AI12-0103-1AI12-0103-1} The end of a declarative_part, protected_body,
+or a declaration of a library package or generic library package, causes
+freezing of each entity and profile declared within it, except for
+incomplete types. A proper_body, body_stub, or entry_body causes
+freezing of each entity and profile declared before it within the same
+declarative_part that is not an incomplete type; it only causes freezing
+of an incomplete type if the body is within the immediate scope of the
+incomplete type.
 
 3.a
           Discussion: This is worded carefully to handle nested packages
@@ -65980,20 +68818,28 @@ type if the body is within the immediate scope of the 
incomplete type.
           since some compilers look at bodies after looking at the
           containing declarative_part.
 
-3.f/3
-          {AI05-0177-1AI05-0177-1} Note that "body" includes
+3.f/4
+          {AI05-0177-1AI05-0177-1} {AI12-0103-1AI12-0103-1} Note that
           null_procedure_declarations and
-          expression_function_declarations when those are used as
-          completions, as well as entry_bodys (see *note 3.11.1::).
-          These all cause freezing, along with proper_bodys and
-          body_stubs.
+          expression_function_declarations (even when those are used as
+          completions), as well as generic_instantiations and
+          renames-as-bodies do not necessarily cause freezing; each have
+          their own specific rules.
+
+3.g/4
+          Ramification: {AI12-0103-1AI12-0103-1} Note that the rule
+          about proper bodies being freezing only applies in
+          declarative_parts.  All of the kinds of bodies (see *note
+          3.11.1:: - keep in mind the difference from bodys) that are
+          allowed in a package specification have their own freezing
+          rules, so they don't need to be covered by the above rule.
 
 4/1
 {8652/00468652/0046} {AI95-00106-01AI95-00106-01} A construct that
 (explicitly or implicitly) references an entity can cause the freezing
-of the entity, as defined by subsequent paragraphs.  At the place where
-a construct causes freezing, each name, expression,
-implicit_dereference[, or range] within the construct causes freezing:
+of the entity, as defined by subsequent paragraphs. At the place where a
+construct causes freezing, each name, expression, implicit_dereference[,
+or range] within the construct causes freezing:
 
 4.a
           Ramification: Note that in the sense of this paragraph, a
@@ -66015,6 +68861,25 @@ implicit_dereference[, or range] within the construct 
causes freezing:
           may denote an incomplete or private type which is not
           completely defined at the point of the generic_instantiation.
 
+5.1/4
+   * {AI12-0103-1AI12-0103-1} {AI12-0157-1AI12-0157-1} At the occurrence
+     of an expression_function_declaration that is a completion, the
+     return expression of the expression function causes freezing.
+
+5.b/4
+          Reason: {AI12-0103-1AI12-0103-1} This rule prevents calls
+          through access values to an expression that might have
+          unfrozen parts.  Typically, elaboration checks and other
+          freezing rules prevent this, but in this case the completion
+          is elaborated and since this is not a body it does not by
+          itself freeze anything that precedes it.
+
+5.2/4
+   * {AI12-0132-1AI12-0132-1} {AI12-0157-1AI12-0157-1} At the occurrence
+     of a renames-as-body whose callable_entity_name denotes an
+     expression function, the return expression of the expression
+     function causes freezing.
+
 6
    * The occurrence of an object_declaration that has no corresponding
      completion causes freezing.
@@ -66066,16 +68931,17 @@ implicit_dereference[, or range] within the construct 
causes freezing:
      expressions within an aspect_specification also cause freezing at
      the end of the immediately enclosing declaration list.
 
-8/3
+8/4
 {8652/00468652/0046} {AI95-00106-01AI95-00106-01}
-{AI05-0177-1AI05-0177-1} {AI05-0183-1AI05-0183-1} A static expression
-(other than within an aspect_specification) causes freezing where it
-occurs.  An object name or nonstatic expression causes freezing where it
-occurs, unless the name or expression is part of a default_expression, a
-default_name, the expression of an expression function, an
-aspect_specification, or a per-object expression of a component's
-constraint, in which case, the freezing occurs later as part of another
-construct or at the freezing point of an associated entity.
+{AI05-0177-1AI05-0177-1} {AI05-0183-1AI05-0183-1}
+{AI05-0157-1AI05-0157-1} A static expression (other than within an
+aspect_specification) causes freezing where it occurs. An object name or
+nonstatic expression causes freezing where it occurs, unless the name or
+expression is part of a default_expression, a default_name, the return
+expression of an expression function, an aspect_specification, or a
+per-object expression of a component's constraint, in which case, the
+freezing occurs later as part of another construct or at the freezing
+point of an associated entity.
 
 8.1/3
 {8652/00468652/0046} {AI95-00106-01AI95-00106-01}
@@ -66097,7 +68963,7 @@ a construct causes freezing:
      expression is frozen, unless the expression is an enumeration
      literal used as a discrete_choice of the array_aggregate (*note
      4.3.3: S0113.) of an enumeration_representation_clause (*note 13.4:
-     S0310.).
+     S0311.).
 
 10.a
           Reason: We considered making enumeration literals never cause
@@ -66137,13 +69003,14 @@ a construct causes freezing:
           frozen.  In Ada 83, on the other hand, there is no occurrence
           of the name T, hence no forcing occurrence of T.
 
-10.1/3
-   * {AI05-0019-1AI05-0019-1} {AI05-0177-1AI05-0177-1} At the place
-     where a function call causes freezing, the profile of the function
-     is frozen.  Furthermore, if a parameter of the call is defaulted,
-     the default_expression for that parameter causes freezing.  If the
-     function call is to an expression function, the expression of the
-     expression function causes freezing.
+10.1/4
+   * {AI05-0019-1AI05-0019-1} {AI05-0177-1AI05-0177-1}
+     {AI12-0157-1AI12-0157-1} At the place where a function call causes
+     freezing, the profile of the function is frozen.  Furthermore, if a
+     parameter of the call is defaulted, the default_expression for that
+     parameter causes freezing.  If the function call is to an
+     expression function, the return expression of the expression
+     function causes freezing.
 
 10.e/3
           Reason: {AI05-0019-1AI05-0019-1} This is the important rule
@@ -66160,33 +69027,35 @@ a construct causes freezing:
           of a declarative part freezes everything in the declarative
           part.
 
-10.g/3
-          Ramification: {AI05-0177-1AI05-0177-1} Freezing of the
-          expression of an expression function only needs to be
-          considered when the expression function is in the same
-          compilation unit and there are no intervening bodies; the end
+10.g/4
+          Ramification: {AI05-0177-1AI05-0177-1}
+          {AI12-0103-1AI12-0103-1} {AI12-0157-1AI12-0157-1} Freezing of
+          the return expression of an expression function only needs to
+          be considered when the expression function is in the same
+          compilation unit and there are no intervening bodys; the end
           of a declarative_part or library package freezes everything in
           it, and a body freezes everything declared before it.
 
-10.2/3
+10.2/4
    * {AI05-0019-1AI05-0019-1} {AI05-0177-1AI05-0177-1}
-     {AI05-0296-1AI05-0296-1} At the place where a generic_instantiation
-     causes freezing of a callable entity, the profile of that entity is
-     frozen unless the formal subprogram corresponding to the callable
-     entity has a parameter or result of a formal untagged incomplete
-     type; if the callable entity is an expression function, the
-     expression of the expression function causes freezing.
+     {AI05-0296-1AI05-0296-1} {AI12-0157-1AI12-0157-1} At the place
+     where a generic_instantiation causes freezing of a callable entity,
+     the profile of that entity is frozen unless the formal subprogram
+     corresponding to the callable entity has a parameter or result of a
+     formal untagged incomplete type; if the callable entity is an
+     expression function, the return expression of the expression
+     function causes freezing.
 
 10.h/3
           Reason: Elaboration of the generic might call the actual for
           one of its formal subprograms, so we need to know the profile
           and (for an expression function) expression.
 
-10.3/3
-   * {AI05-0177-1AI05-0177-1} At the place where a use of the Access or
-     Unchecked_Access attribute whose prefix denotes an expression
-     function causes freezing, the expression of the expression function
-     causes freezing.
+10.3/4
+   * {AI05-0177-1AI05-0177-1} {AI12-0157-1AI12-0157-1} At the place
+     where a use of the Access or Unchecked_Access attribute whose
+     prefix denotes an expression function causes freezing, the return
+     expression of the expression function causes freezing.
 
 10.i/3
           Reason: This is needed to avoid calls to unfrozen expressions.
@@ -66202,8 +69071,8 @@ a construct causes freezing:
                   function Foo (A : in Natural) return Natural is
                      (A + Flub'Size); -- The expression is not frozen here.
 
-10.m/3
-                  type Bar is access function Foo (A : in Natural) return 
Natural;
+10.m/4
+               {AI12-0005-1AI12-0005-1}    type Bar is access function (A : in 
Natural) return Natural;
 
 10.n/3
                   P : Bar := Foo'Access; -- (A)
@@ -66295,11 +69164,11 @@ a construct causes freezing:
           This paragraph was deleted.
 
 15
-   * At the place where a subtype is frozen, its type is frozen.  At the
+   * At the place where a subtype is frozen, its type is frozen. At the
      place where a type is frozen, any expressions or names within the
      full type definition cause freezing; the first subtype, and any
      component subtypes, index subtypes, and parent subtype of the type
-     are frozen as well.  For a specific tagged type, the corresponding
+     are frozen as well. For a specific tagged type, the corresponding
      class-wide type is frozen as well.  For a class-wide type, the
      corresponding specific type is frozen as well.
 
@@ -66401,7 +69270,7 @@ appear before the entity is frozen (see *note 13.1::).
           wording.  The wording of this rule is carefully written to
           work properly for type-related representation items.  For
           example, an enumeration_representation_clause (*note 13.4:
-          S0310.) is illegal after the type is frozen, even though the
+          S0311.) is illegal after the type is frozen, even though the
           _clause refers to the first subtype.
 
 19.a.1/2
@@ -66459,7 +69328,7 @@ appear before the entity is frozen (see *note 13.1::).
 19.i
           Implementation Note: An implementation may choose to generate
           code for default_expressions and default_names in line at the
-          place of use.  Alternatively, an implementation may choose to
+          place of use. Alternatively, an implementation may choose to
           generate thunks (subprograms implicitly generated by the
           compiler) for evaluation of defaults.  Thunk generation
           cannot, in general, be done at the place of the declaration
@@ -66677,6 +69546,17 @@ T is created at the point where T is frozen.
           {AI05-0213-1AI05-0213-1} Added freezing rules for formal
           incomplete types; the corresponding actual is not frozen.
 
+                    _Wording Changes from Ada 2012_
+
+20.y/4
+          {AI12-0103-1AI12-0103-1} {AI12-0132-1AI12-0132-1} Corrigendum:
+          Clarified when and what an expression_function_declaration
+          that is a completion or that is the target of a
+          renames-as-body freezes.  This is formally an incompatibility,
+          but as all known implementations freeze expression functions
+          more aggressively than allowed by either the old or new
+          wording, practically this will be an extension.
+
 
 File: aarm2012.info,  Node: Annex A,  Next: Annex B,  Prev: 13,  Up: Top
 
@@ -66738,9 +69618,8 @@ Ada, Interfaces, and System; other library units are 
children of these:]
               Indefinite_Multiway_Trees -- *note A.18.17::
               Indefinite_Ordered_Maps -- *note A.18.14::
               Indefinite_Ordered_Sets -- *note A.18.16::
-              Indefinite_Vectors -- *note A.18.11::
-
-     Standard (...continued)
+              Indefinite_Vectors -- *note
+     A.18.11::Standard (...continued)
         Ada (...continued)
            Containers (...continued)
               Multiway_Trees -- *note A.18.10::
@@ -66781,7 +69660,6 @@ Ada, Interfaces, and System; other library units are 
children of these:]
            IO_Exceptions -- *note A.13::
            Iterator_Interfaces -- *note 5.5.1::
            Locales -- *note A.19::
-
      Standard (...continued)
         Ada (...continued)
            Numerics -- *note A.5::
@@ -66831,7 +69709,6 @@ Ada, Interfaces, and System; other library units are 
children of these:]
                  Strings -- *note A.4.11::
                  Wide_Strings -- *note A.4.11::
                  Wide_Wide_Strings -- *note A.4.11::
-
      Standard (...continued)
         Ada (...continued)
            Strings (...continued)
@@ -66883,7 +69760,6 @@ Ada, Interfaces, and System; other library units are 
children of these:]
            Synchronous_Barriers -- *note D.10.1::
            Synchronous_Task_Control -- *note D.10::
               EDF -- *note D.10::
-
      Standard (...continued)
         Ada (...continued)
            Tags -- *note 3.9::
@@ -66948,18 +69824,32 @@ Ada, Interfaces, and System; other library units are 
children of these:]
 
                      _Implementation Requirements_
 
-3/2
-{AI95-00434-01AI95-00434-01} The implementation shall ensure that each
+3/4
+{AI95-00434-01AI95-00434-01} {AI12-0052-1AI12-0052-1}
+{AI12-0114-1AI12-0114-1} The implementation shall ensure that each
 language-defined subprogram is reentrant in the sense that concurrent
-calls on the same subprogram perform as specified, so long as all
-parameters that could be passed by reference denote nonoverlapping
-objects.
+calls on any language-defined subprogram perform as specified, so long
+as all objects that are denoted by parameters that could be passed by
+reference or designated by parameters of an access type are
+nonoverlapping.
+
+3.a.1/4
+          Ramification: {AI12-0052-1AI12-0052-1}
+          {AI12-0114-1AI12-0114-1} So long as the parameters are
+          disjoint, concurrent calls on the same language-defined
+          subprogram, and concurrent calls on two different
+          language-defined subprograms are required to work.  But
+          concurrent calls operating on overlapping objects (be they of
+          the same or different language-defined subprograms) are not
+          required to work (being an erroneous use of shared variables)
+          unless both subprograms are required to pass the associated
+          parameter by-copy.
 
 3.a
-          Ramification: For example, simultaneous calls to Text_IO.Put
-          will work properly, so long as they are going to two different
-          files.  On the other hand, simultaneous output to the same
-          file constitutes erroneous use of shared variables.
+          For example, simultaneous calls to Text_IO.Put will work
+          properly, so long as they are going to two different files.
+          On the other hand, simultaneous output to the same file
+          constitutes erroneous use of shared variables.
 
 3.b
           To be honest: Here, "language defined subprogram" means a
@@ -66969,12 +69859,30 @@ objects.
           a subprogram declared in the visible part of an instance of a
           language defined generic library package.
 
-3.c
-          Ramification: The rule implies that any data local to the
-          private part or body of the package has to be somehow
-          protected against simultaneous access.
+3.b.1/4
+          Ramification: {AI12-0052-1AI12-0052-1} This rule applies to
+          all language-defined subprograms, including those defined in
+          packages that manage some global state (like environment
+          variables or the current directory).  Unless specified above,
+          such subprograms need to work when the explicit parameters are
+          not overlapping; in particular, the existence of the global
+          state is not considered.
+
+3.c/4
+          {AI12-0052-1AI12-0052-1} The rule implies that any data local
+          to the private part or body of the package (including global
+          state as described above) has to be somehow protected against
+          simultaneous access.
+
+3.1/4
+{AI12-0052-1AI12-0052-1} {AI12-0159-1AI12-0159-1} For the purpose of
+determining whether concurrent calls on text input-output subprograms
+are required to perform as specified above, when calling a subprogram
+within Text_IO or its children that implicitly operates on one of the
+default input-output files, the subprogram is considered to have a
+parameter of Current_Input or Current_Output (as appropriate).
 
-3.1/3
+3.2/3
 {AI05-0048-1AI05-0048-1} If a descendant of a language-defined tagged
 type is declared, the implementation shall ensure that each inherited
 language-defined subprogram behaves as described in this International
@@ -67049,6 +69957,19 @@ language-defined library units (other than Standard).
           {AI05-0166-1AI05-0166-1} {AI05-0168-1AI05-0168-1} Added
           various new units to the list of predefined units.
 
+                    _Wording Changes from Ada 2012_
+
+4.h.1/4
+          {AI12-0052-1AI12-0052-1} {AI12-0114-1AI12-0114-1}
+          {AI12-0159-1AI12-0159-1} Corrigendum: The rules requiring
+          concurrent access of language-defined subprograms were
+          expanded to include implicit Text_IO objects, overlapping
+          objects designated by parameters of an access type, and
+          simultaneous calls on different language-defined subprograms.
+          While this might change behavior of some programs, it would do
+          so by eliminating erroneous execution, so we don't consider
+          this an inconsistency.
+
 * Menu:
 
 * A.1 ::      The Package Standard
@@ -67080,7 +70001,7 @@ A.1 The Package Standard
 1/3
 {AI05-0299-1AI05-0299-1} This subclause outlines the specification of
 the package Standard containing all predefined identifiers in the
-language.  The corresponding package body is not specified by the
+language. The corresponding package body is not specified by the
 language.
 
 2
@@ -71617,7 +74538,7 @@ Strings.Wide_Fixed.Wide_Equal_Case_Insensitive,
 Strings.Wide_Bounded.Wide_Equal_Case_Insensitive, and
 Strings.Wide_Unbounded.Wide_Equal_Case_Insensitive.  They provide the
 same string-handling operations as the corresponding packages and
-functions for strings of Character elements.  
+functions for strings of Character elements. 
 
                           _Static Semantics_
 
@@ -71933,7 +74854,7 @@ 
Strings.Wide_Wide_Fixed.Wide_Wide_Equal_Case_Insensitive,
 Strings.Wide_Wide_Bounded.Wide_Wide_Equal_Case_Insensitive, and
 Strings.Wide_Wide_Unbounded.Wide_Wide_Equal_Case_Insensitive.  They
 provide the same string-handling operations as the corresponding
-packages and functions for strings of Character elements.  
+packages and functions for strings of Character elements. 
 
                           _Static Semantics_
 
@@ -72766,13 +75687,23 @@ causes Encoding_Error to be propagated.
 {AI05-0137-2AI05-0137-2} The exception Encoding_Error is also propagated
 in the following situations:
 
-54/3
-   * By a Decode function when a UTF encoded string contains an invalid
-     encoding sequence.
+54/4
+   * {AI12-0088-1AI12-0088-1} By a Convert or Decode function when a UTF
+     encoded string contains an invalid encoding sequence.
 
-55/3
-   * By a Decode function when the expected encoding is UTF-16BE or
-     UTF-16LE and the input string has an odd length.
+54.a/4
+          To be honest: {AI12-0088-1AI12-0088-1} An overlong encoding is
+          not invalid for the purposes of this check, and this does not
+          depend on the character set version in use.  Some recent
+          character set standards declare overlong encodings to be
+          invalid; it would be unnecessary and unfriendly to users for
+          Convert or Decode to raise an exception for an overlong
+          encoding.
+
+55/4
+   * {AI12-0088-1AI12-0088-1} By a Convert or Decode function when the
+     expected encoding is UTF-16BE or UTF-16LE and the input string has
+     an odd length.
 
 56/3
    * {AI05-0262-1AI05-0262-1} By a Decode function yielding a String
@@ -73018,6 +75949,13 @@ schemes, another similar child of Ada.Strings should 
be defined.
           Strings.UTF_Encoding.Wide_Strings, and
           Strings.UTF_Encoding.Wide_Wide_Strings are new.
 
+                    _Wording Changes from Ada 2012_
+
+108.b/4
+          {AI12-0088-1AI12-0088-1} Corrigendum: Fixed the omission that
+          Convert routines make the same checks on input as Decode
+          routines.
+
 
 File: aarm2012.info,  Node: A.5,  Next: A.6,  Prev: A.4,  Up: Annex A
 
@@ -73661,8 +76599,8 @@ declaration:
 An object of the limited private type Generator is associated with a
 sequence of random numbers.  Each generator has a hidden (internal)
 state, which the operations on generators use to determine the position
-in the associated sequence.  All generators are implicitly initialized
-to an unspecified state that does not vary from one program execution to
+in the associated sequence. All generators are implicitly initialized to
+an unspecified state that does not vary from one program execution to
 another; they may also be explicitly initialized, or reinitialized, to a
 time-dependent state, to a previously saved state, or to a state
 uniquely denoted by an integer value.
@@ -73727,7 +76665,7 @@ generators and states are defined below.
           Sets the state of the specified generator to one that is an
           unspecified function of the value of the parameter Initiator
           (or to a time-dependent state, if only a generator parameter
-          is specified).  The latter form of the procedure is known as
+          is specified). The latter form of the procedure is known as
           the time-dependent Reset procedure.
 
 34.a
@@ -74135,8 +77073,8 @@ S'Denorm
 
 10
 The values described by the formula in the definition of S'Denorm are
-called denormalized numbers.  A nonzero machine number that is not a
-denormalized number is a normalized number.  A normalized number x of a
+called denormalized numbers. A nonzero machine number that is not a
+denormalized number is a normalized number. A normalized number x of a
 given type T is said to be represented in canonical form when it is
 expressed in the canonical form (for the type T) with a mantissa having
 T'Machine_Mantissa digits; the resulting form is the canonical-form
@@ -74283,8 +77221,8 @@ S'Compose
                a machine number of the type T, or if |v| >=
                T'Model_Small, the function yields v; otherwise, it
                yields either one of the machine numbers of the type T
-               adjacent to v.  Constraint_Error is optionally raised if
-               v is outside the base range of S. A zero result has the
+               adjacent to v. Constraint_Error is optionally raised if v
+               is outside the base range of S. A zero result has the
                sign of Fraction when S'Signed_Zeros is True.
 
 26.a
@@ -74313,8 +77251,8 @@ S'Scaling
                is a machine number of the type T, or if |v| >=
                T'Model_Small, the function yields v; otherwise, it
                yields either one of the machine numbers of the type T
-               adjacent to v.  Constraint_Error is optionally raised if
-               v is outside the base range of S. A zero result has the
+               adjacent to v. Constraint_Error is optionally raised if v
+               is outside the base range of S. A zero result has the
                sign of X when S'Signed_Zeros is True.
 
 29.a
@@ -74443,7 +77381,7 @@ S'Remainder
                the integer nearest to the exact value of X/Y; if |n -
                X/Y| = 1/2, then n is chosen to be even.  If v is a
                machine number of the type T, the function yields v;
-               otherwise, it yields zero.  Constraint_Error is raised if
+               otherwise, it yields zero. Constraint_Error is raised if
                Y is zero.  A zero result has the sign of X when
                S'Signed_Zeros is True.
 
@@ -74469,7 +77407,7 @@ S'Adjacent
 50
                If Towards = X, the function yields X; otherwise, it
                yields the machine number of the type T adjacent to X in
-               the direction of Towards, if that machine number exists.  
+               the direction of Towards, if that machine number exists. 
                If the result would be outside the base range of S,
                Constraint_Error is raised.  When T'Signed_Zeros is True,
                a zero result has the sign of X. When Towards is zero,
@@ -74493,7 +77431,7 @@ S'Copy_Sign
 53
                If the value of Value is nonzero, the function yields a
                result whose magnitude is that of Value and whose sign is
-               that of Sign; otherwise, it yields the value zero.  
+               that of Sign; otherwise, it yields the value zero. 
                Constraint_Error is optionally raised if the result is
                outside the base range of S. A zero result has the sign
                of Sign when S'Signed_Zeros is True.
@@ -74915,8 +77853,8 @@ file is said to be closed.
 6
 The language does not define what happens to external files after the
 completion of the main program and all the library tasks (in particular,
-if corresponding files have not been closed).  The effect of
-input-output for access types is unspecified.
+if corresponding files have not been closed). The effect of input-output
+for access types is unspecified.
 
 7
 An open file has a current mode, which is a value of one of the
@@ -74953,7 +77891,7 @@ concerning text input-output are described in subclause 
*note A.10.2::.
 execution of an input-output subprogram are defined in the package
 IO_Exceptions; the situations in which they can be propagated are
 described following the description of the subprogram (and in subclause
-*note A.13::).  The exceptions Storage_Error and Program_Error may be
+*note A.13::). The exceptions Storage_Error and Program_Error may be
 propagated.  (Program_Error can only be propagated due to errors made by
 the caller of the subprogram.)  Finally, exceptions can be propagated in
 certain implementation-defined situations.
@@ -75121,6 +78059,9 @@ The generic library package Sequential_IO has the 
following declaration:
 10
         function Is_Open(File : in File_Type) return Boolean;
 
+10.1/4
+     {AI12-0130-1AI12-0130-1}    procedure Flush (File : in File_Type);
+
 11
         -- Input and output operations
 
@@ -75178,6 +78119,17 @@ The generic library package Sequential_IO has the 
following declaration:
           may have a controlled part in File_Type, and thus would be
           illegal.
 
+                   _Incompatibilities With Ada 2012_
+
+17.c/4
+          {AI12-0130-1AI12-0130-1} Corrigendum: The Flush procedure is
+          newly added to Ada.Sequential_IO. If an instance of
+          Ada.Sequential_IO is referenced in a use_clause, and a
+          procedure Flush is defined in some other package that is also
+          referenced in a use_clause, the user-defined Flush may no
+          longer be use-visible, resulting in errors.  This should be
+          rare and is easily fixed if it does occur.
+
 
 File: aarm2012.info,  Node: A.8.2,  Next: A.8.3,  Prev: A.8.1,  Up: A.8
 
@@ -75209,6 +78161,10 @@ additional effects described in subclause *note 
A.10.2::.
           Inout_File for direct input-output.  For direct access, the
           size of the created file is implementation defined.
 
+3.a/4
+          Ramification: {AI12-0005-1AI12-0005-1} For a direct file, the
+          initial value of current index is 1 (see *note A.8::).
+
 4
           A null string for Name specifies an external file that is not
           accessible after the completion of the main program (a
@@ -75237,6 +78193,10 @@ additional effects described in subclause *note 
A.10.2::.
           the given file to the given mode.  The given file is left
           open.
 
+7.a/4
+          Ramification: {AI12-0005-1AI12-0005-1} For a direct file, the
+          initial value of current index is 1 (see *note A.8::).
+
 8
           The exception Status_Error is propagated if the given file is
           already open.  The exception Name_Error is propagated if the
@@ -75367,6 +78327,21 @@ additional effects described in subclause *note 
A.10.2::.
           (that is, if it is associated with an external file);
           otherwise, returns False.
 
+28.1/4
+     {AI12-0130-1AI12-0130-1} procedure Flush(File : in File_Type);
+
+28.2/4
+          The Flush procedure synchronizes the external file with the
+          internal file (by flushing any internal buffers) without
+          closing the file.  For a direct file, the current index is
+          unchanged; for a stream file (see *note A.12.1::), the current
+          position is unchanged.
+
+28.3/4
+          The exception Status_Error is propagated if the file is not
+          open.  The exception Mode_Error is propagated if the mode of
+          the file is In_File.
+
                      _Implementation Permissions_
 
 29
@@ -75393,6 +78368,12 @@ restriction should be documented.
           {AI95-00283-01AI95-00283-01} Added text to specify the default
           mode for a stream file.
 
+                    _Wording Changes from Ada 2012_
+
+29.d/4
+          {AI12-0130-1AI12-0130-1} Procedure Flush is now defined here,
+          so it can be used for all of the I/O packages.
+
 
 File: aarm2012.info,  Node: A.8.3,  Next: A.8.4,  Prev: A.8.2,  Up: A.8
 
@@ -75528,6 +78509,9 @@ The generic library package Direct_IO has the following 
declaration:
 10
         function Is_Open(File : in File_Type) return Boolean;
 
+10.1/4
+     {AI12-0130-1AI12-0130-1}    procedure Flush (File : in File_Type);
+
 11
         -- Input and output operations
 
@@ -75594,6 +78578,17 @@ The generic library package Direct_IO has the 
following declaration:
           code is not portable, as another Ada compiler may have a
           controlled part in File_Type, and thus would be illegal.
 
+                   _Incompatibilities With Ada 2012_
+
+20.b/4
+          {AI12-0130-1AI12-0130-1} Corrigendum: The Flush procedure is
+          newly added to Ada.Direct_IO. If an instance of Ada.Direct_IO
+          is referenced in a use_clause, and a procedure Flush is
+          defined in some other package that is also referenced in a
+          use_clause, the user-defined Flush may no longer be
+          use-visible, resulting in errors.  This should be rare and is
+          easily fixed if it does occur.
+
 
 File: aarm2012.info,  Node: A.8.5,  Prev: A.8.4,  Up: A.8
 
@@ -75879,7 +78874,7 @@ characters.  Whether they are characters (and if so 
which ones) in any
 particular implementation need not concern a user who neither explicitly
 outputs nor explicitly inputs control characters.  The effect of input
 (Get) or output (Put) of control characters (other than horizontal
-tabulation) is not specified by the language.  
+tabulation) is not specified by the language. 
 
 9
 The characters of a line are numbered, starting from one; the number of
@@ -76617,10 +79612,24 @@ program execution are implementation defined.
      {8652/00518652/0051} {AI95-00057-01AI95-00057-01} procedure Flush (File : 
in File_Type);
      procedure Flush;
 
-21
-          The effect of Flush is the same as the corresponding
-          subprogram in Streams.Stream_IO (see *note A.12.1::).  If File
-          is not explicitly specified, Current_Output is used.
+21/4
+          {AI12-0130-1AI12-0130-1} [The effect of Flush is the same as
+          the corresponding subprogram in Sequential_IO (see *note
+          A.8.2::).]  If File is not explicitly specified,
+          Current_Output is used.
+
+21.a/4
+          Discussion: {AI12-0052-1AI12-0052-1} For the purpose of
+          determining whether concurrent calls on text input-output
+          subprograms are required to perform as specified, subprograms
+          that implicitly operate on one of the default input-output
+          files are considered to have a parameter of Current_Input or
+          Current_Output (as appropriate).  The result of Current_Output
+          is considered to be overlapping with the file given to the
+          latest call of Set_Output (or Standard_Output if Set_Output
+          hasn't been called); a corresponding consideration applies to
+          the result of Current_Input.  See the introduction of *note
+          Annex A:: for details.
 
                          _Erroneous Execution_
 
@@ -76668,6 +79677,13 @@ This paragraph was deleted.{8652/00538652/0053}
           Clarified that execution is erroneous only when a closed
           default file is accessed.
 
+                    _Wording Changes from Ada 2012_
+
+25.d/4
+          {AI12-0130-1AI12-0130-1} Corrigendum: Moved the definition of
+          Flush to *note A.8.2::, as all input-output packages now have
+          it.
+
 
 File: aarm2012.info,  Node: A.10.4,  Next: A.10.5,  Prev: A.10.3,  Up: A.10
 
@@ -77213,7 +80229,7 @@ For an item of type Character the following procedures 
are provided:
           propagated if the mode of the file is not In_File.  Sets
           End_Of_Line to True if at end of line, including if at end of
           page or at end of file; in each of these cases the value of
-          Item is not specified.  Otherwise, End_Of_Line is set to False
+          Item is not specified. Otherwise, End_Of_Line is set to False
           and Item is set to the next character (without consuming it)
           from the file.
 
@@ -77244,7 +80260,7 @@ For an item of type Character the following procedures 
are provided:
           input file, then the character is read; Available is True and
           Item contains the value of this character.  If a character is
           not available, then Available is False and the value of Item
-          is not specified.  Status_Error is propagated if the file is
+          is not specified. Status_Error is propagated if the file is
           not open.  Mode_Error is propagated if the mode of the file is
           not In_File.  End_Error is propagated if at the end of the
           file.  The current column, line and page numbers for the file
@@ -77316,7 +80332,7 @@ subprograms are provided:
           Reading stops if the end of the string is met.  Reading also
           stops if the end of the line is met before meeting the end of
           the string; in this case Skip_Line is (in effect) called with
-          a spacing of 1.  The values of characters not assigned are not
+          a spacing of 1. The values of characters not assigned are not
           specified.
 
 20
@@ -78268,9 +81284,9 @@ specification of package Wide_Wide_Text_IO is the same 
as that for
 Text_IO, except that in each Get, Look_Ahead, Get_Immediate, Get_Line,
 Put, and Put_Line subprogram, any occurrence of Character is replaced by
 Wide_Wide_Character, and any occurrence of String is replaced by
-Wide_Wide_String.  Nongeneric equivalents of
-Wide_Wide_Text_IO.Integer_IO and Wide_Wide_Text_IO.Float_IO are provided
-(as for Text_IO) for each predefined numeric type, with names such as
+Wide_Wide_String. Nongeneric equivalents of Wide_Wide_Text_IO.Integer_IO
+and Wide_Wide_Text_IO.Float_IO are provided (as for Text_IO) for each
+predefined numeric type, with names such as
 Ada.Integer_Wide_Wide_Text_IO, Ada.Long_Integer_Wide_Wide_Text_IO,
 Ada.Float_Wide_Wide_Text_IO, Ada.Long_Float_Wide_Wide_Text_IO.
 
@@ -78401,8 +81417,9 @@ The library package Streams.Stream_IO has the following 
declaration:
 4
          type Stream_Access is access all Root_Stream_Type'Class;
 
-5
-         type File_Type is limited private;
+5/4
+     {AI12-0102-1AI12-0102-1}     type File_Type is limited private;
+         pragma Preelaborable_Initialization(File_Type);
 
 6
          type File_Mode is (In_File, Out_File, Append_File);
@@ -78469,7 +81486,7 @@ The library package Streams.Stream_IO has the following 
declaration:
 
 19
          procedure Write (File : in File_Type;
-                                Item : in Stream_Element_Array);
+                          Item : in Stream_Element_Array);
 
 20/1
      This paragraph was deleted.
@@ -78509,10 +81526,11 @@ The library package Streams.Stream_IO has the 
following declaration:
 {AI95-00360-01AI95-00360-01} The type File_Type needs finalization (see
 *note 7.6::).
 
-28/2
-{AI95-00283-01AI95-00283-01} The subprograms given in subclause *note
-A.8.2:: for the control of external files (Create, Open, Close, Delete,
-Reset, Mode, Name, Form, and Is_Open) are available for stream files.
+28/4
+{AI95-00283-01AI95-00283-01} {AI12-0130-1AI12-0130-1} The subprograms
+given in subclause *note A.8.2:: for the control of external files
+(Create, Open, Close, Delete, Reset, Mode, Name, Form, Is_Open, and
+Flush) are available for stream files.
 
 28.1/2
 {AI95-00283-01AI95-00283-01} The End_Of_File function:
@@ -78536,11 +81554,9 @@ Reset, Mode, Name, Form, and Is_Open) are available 
for stream files.
 file.  If the new mode is Append_File, the file is positioned to its
 end; otherwise, the position in the file is unchanged.
 
-28.6/1
-{8652/00558652/0055} {AI95-00026-01AI95-00026-01} The Flush procedure
-synchronizes the external file with the internal file (by flushing any
-internal buffers) without closing the file or changing the position.
-Mode_Error is propagated if the mode of the file is In_File.
+28.6/4
+This paragraph was deleted.{8652/00558652/0055}
+{AI95-00026-01AI95-00026-01} {AI12-0130-1AI12-0130-1}
 
 29/1
 {8652/00568652/0056} {AI95-00001-01AI95-00001-01} The Stream function
@@ -78709,9 +81725,25 @@ again after it had been closed.
 36.g/3
           {AI05-0283-1AI05-0283-1} Package Ada.Streams.Stream_IO is now
           preelaborated, allowing it to be used in more contexts
-          (including in distributed systems).  Note that is not a remote
-          types package; File_Type objects cannot be passed between
-          partitions.
+          (including in distributed systems).  Note that it is not a
+          remote types package; File_Type objects cannot be passed
+          between partitions.
+
+                       _Extensions to Ada 2012_
+
+36.h/4
+          {AI12-0102-1AI12-0102-1} Corrigendum: Type
+          Ada.Streams.Stream_IO.File_Type now has preelaborable
+          initialization.  This allows declaring library-level file
+          objects in preelaborable packages (an oversight from the
+          change above).
+
+                    _Wording Changes from Ada 2012_
+
+36.i/4
+          {AI12-0130-1AI12-0130-1} Corrigendum: The definition of the
+          Flush procedure was moved to *note A.8.2::, so that it could
+          be shared by all of the I/O packages.
 
 
 File: aarm2012.info,  Node: A.12.2,  Next: A.12.3,  Prev: A.12.1,  Up: A.12
@@ -78961,7 +81993,7 @@ subtype.
 cannot be interpreted as a value of the required subtype, but this is
 not detected and Data_Error is not propagated, then the resulting value
 can be abnormal, and subsequent references to the value can lead to
-erroneous execution, as explained in *note 13.9.1::.  ]
+erroneous execution, as explained in *note 13.9.1::. ]
 
 
 File: aarm2012.info,  Node: A.14,  Next: A.15,  Prev: A.13,  Up: Annex A
@@ -79071,7 +82103,7 @@ The library package Ada.Command_Line has the following 
declaration:
           If the external execution environment supports passing
           arguments to a program, then Argument returns an
           implementation-defined value corresponding to the argument at
-          relative position Number.  If Number is outside the range
+          relative position Number. If Number is outside the range
           1..Argument_Count, then Constraint_Error is propagated.
 
 14.a
@@ -79331,7 +82363,7 @@ directories, special files, or ordinary files.  A 
directory is an
 external file that is a container for files on the target system.  A
 special file is an external file that cannot be created or read by a
 predefined Ada input-output package.  External files that are not
-special files or directories are called ordinary files.  
+special files or directories are called ordinary files. 
 
 45.a/2
           Ramification: A directory is an external file, although it may
@@ -79350,7 +82382,7 @@ special files or directories are called ordinary files.
 {AI95-00248-01AI95-00248-01} A file name is a string identifying an
 external file.  Similarly, a directory name is a string identifying a
 directory.  The interpretation of file names and directory names is
-implementation-defined.  
+implementation-defined. 
 
 46.a/2
           Implementation defined: The interpretation of file names and
@@ -79366,7 +82398,7 @@ contain the item.  The simple name of an external file 
is the name of
 the item, not including any containing directory names.  Unless
 otherwise specified, a file name or directory name parameter in a call
 to a predefined Ada input-output subprogram can be a full name, a simple
-name, or any other form of name supported by the implementation.  
+name, or any other form of name supported by the implementation. 
 
 47.a/2
           Discussion: The full name on Unix is a complete path to the
@@ -79386,7 +82418,7 @@ name, or any other form of name supported by the 
implementation.
 48/2
 {AI95-00248-01AI95-00248-01} The default directory is the directory that
 is used if a directory or file name is not a full name (that is, when
-the name does not fully identify all of the containing directories).  
+the name does not fully identify all of the containing directories). 
 
 48.a/2
           Discussion: The default directory is the one maintained by the
@@ -79397,7 +82429,7 @@ the name does not fully identify all of the containing 
directories).
 49/2
 {AI95-00248-01AI95-00248-01} A directory entry is a single item in a
 directory, identifying a single external file (including directories and
-special files).  
+special files). 
 
 50/2
 {AI95-00248-01AI95-00248-01} For each function that returns a string,
@@ -80875,7 +83907,7 @@ containers are provided.  Each container includes a 
cursor type.  A
 cursor is a reference to an element within a container.  Many operations
 on cursors are common to all of the containers.  A cursor referencing an
 element in a container is considered to be overlapping with the
-container object itself.  
+container object itself. 
 
 2.a/2
           Reason: The last sentence is intended to clarify that
@@ -81099,19 +84131,87 @@ if x < y for any values x and y, then for all other 
values z, (x < z) or
           increase their support costs by fielding implementations that
           are unstable if given buggy hash functions, et al.
 
+                          _Static Semantics_
+
+6/4
+{AI12-0035-1AI12-0035-1} Certain subprograms declared within instances
+of some of the generic packages presented in this clause are said to
+perform indefinite insertion.  These subprograms are those corresponding
+(in the sense of the copying described in subclause *note 12.3::) to
+subprograms that have formal parameters of a generic formal indefinite
+type and that are identified as performing indefinite insertion in the
+subclause defining the generic package.
+
+7/4
+{AI12-0035-1AI12-0035-1} If a subprogram performs indefinite insertion,
+then certain run-time checks are performed as part of a call to the
+subprogram; if any of these checks fail, then the resulting exception is
+propagated to the caller and the container is not modified by the call.
+These checks are performed for each parameter corresponding (in the
+sense of the copying described in *note 12.3::) to a parameter in the
+corresponding generic whose type is a generic formal indefinite type.
+The checks performed for a given parameter are those checks explicitly
+specified in subclause *note 4.8:: that would be performed as part of
+the evaluation of an initialized allocator whose access type is declared
+immediately within the instance, where:
+
+8/4
+   * the value of the qualified_expression is that of the parameter; and
+
+9/4
+   * the designated subtype of the access type is the subtype of the
+     parameter; and
+
+10/4
+   * finalization of the collection of the access type has started if
+     and only if the finalization of the instance has started.
+
+10.a/4
+          Discussion: The phrase "explicitly specified" means those
+          checks for which subclause *note 4.8:: includes the phrase
+          "<some exception> is raised if ...".  It does not refer, for
+          example, to any checks performed as part of any subtype
+          conversion.  In particular, this wording includes the checks
+          described in subclause *note 4.8:: to be performed in the case
+          of a class-wide designated type, and of a designated subtype
+          that has access discriminant parts.  These checks are needed
+          to prevent containers from outliving their contained
+          (Element_Type or Key_Type) values.
+
+10.b/4
+          Implementation Note: These rules have a dual purpose.  Mainly,
+          we are requiring checks needed to prevent dangling references.
+          As a side effect, we are also allowing checks needed to permit
+          an implementation of a container generic to make use of access
+          types in a straightforward way.  As an example of the second
+          purpose, suppose that an implementation does declare such an
+          access type and suppose further that the finalization of the
+          collection of the access type has started.  These rules allow
+          Program_Error to be propagated in this case (as specified in
+          *note 4.8::); this is necessary to allow an all-Ada
+          implementation of these packages.
+
                         _Extensions to Ada 95_
 
-5.w/3
+10.c/3
           {AI95-00302-03AI95-00302-03} {AI05-0299-1AI05-0299-1} This
           subclause is new.  It just provides an introduction to the
           following subclauses.
 
                     _Wording Changes from Ada 2005_
 
-5.x/3
+10.d/3
           {AI05-0044-1AI05-0044-1} Correction: Added a definition of
           strict weak ordering.
 
+                    _Wording Changes from Ada 2012_
+
+10.e/4
+          {AI05-0035-1AI05-0035-1} Corrigendum: Added a definition of
+          "performs indefinite insertion".  This is used in other
+          subclauses and any resulting inconsistencies are documented
+          there.
+
 * Menu:
 
 * A.18.1 ::   The Package Containers
@@ -81238,7 +84338,7 @@ types Vector and Cursor, and a set of operations for 
each type.  A
 vector container allows insertion and deletion at any position, but it
 is specifically optimized for insertion and deletion at the high end
 (the end with the higher index) of the container.  A vector container
-also provides random access to its elements.  
+also provides random access to its elements. 
 
 2/2
 A vector container behaves conceptually as an array that expands as
@@ -81837,15 +84937,16 @@ elements of a vector object V if:
           simple modification of (part of) an element is not a problem,
           so Update_Element does not cause a problem.
 
-97.1/3
-{AI05-0265-1AI05-0265-1} When tampering with cursors is prohibited for a
-particular vector object V, Program_Error is propagated by a call of any
-language-defined subprogram that is defined to tamper with the cursors
-of V, leaving V unmodified.  Similarly, when tampering with elements is
-prohibited for a particular vector object V, Program_Error is propagated
-by a call of any language-defined subprogram that is defined to tamper
-with the elements of V [(or tamper with the cursors of V)], leaving V
-unmodified.
+97.1/4
+{AI05-0265-1AI05-0265-1} {AI12-0110-1AI12-0110-1} When tampering with
+cursors is prohibited for a particular vector object V, Program_Error is
+propagated by a call of any language-defined subprogram that is defined
+to tamper with the cursors of V, leaving V unmodified.  Similarly, when
+tampering with elements is prohibited for a particular vector object V,
+Program_Error is propagated by a call of any language-defined subprogram
+that is defined to tamper with the elements of V [(or tamper with the
+cursors of V)], leaving V unmodified.  These checks are made before any
+other defined behavior of the body of the language-defined subprogram.
 
 97.b/3
           Proof: Tampering with elements includes tampering with
@@ -82538,10 +85639,9 @@ unmodified.
           default initializes the elements it inserts, which can be more
           expensive for some element types.
 
-168/2
-     procedure Prepend (Container : in out Vector;
-                        New_Item  : in     Vector;
-                        Count     : in     Count_Type := 1);
+168/4
+     {AI12-0080-1AI12-0080-1} procedure Prepend (Container : in out Vector;
+                        New_Item  : in     Vector);
 
 169/2
           {AI95-00302-03AI95-00302-03} Equivalent to Insert (Container,
@@ -83439,6 +86539,13 @@ vector unless specified by the operation.
           prohibits tampering in order to more clearly define where the
           check is made and the exception raised.
 
+                    _Wording Changes from Ada 2012_
+
+264.l/4
+          {AI12-0110-1AI12-0110-1} Corrigendum: Clarified that tampering
+          checks precede all other checks made by a subprogram (but come
+          after those associated with the call).
+
 
 File: aarm2012.info,  Node: A.18.3,  Next: A.18.4,  Prev: A.18.2,  Up: A.18
 
@@ -83449,7 +86556,7 @@ A.18.3 The Generic Package 
Containers.Doubly_Linked_Lists
 {AI95-00302-03AI95-00302-03} The language-defined generic package
 Containers.Doubly_Linked_Lists provides private types List and Cursor,
 and a set of operations for each type.  A list container is optimized
-for insertion and deletion at any position.  
+for insertion and deletion at any position. 
 
 2/2
 {AI95-00302-03AI95-00302-03} A doubly-linked list container object
@@ -83864,15 +86971,16 @@ elements of a list object L if:
           simple modification of (part of) an element is not a problem,
           so Update_Element does not cause a problem.
 
-69.1/3
-{AI05-0265-1AI05-0265-1} When tampering with cursors is prohibited for a
-particular list object L, Program_Error is propagated by a call of any
-language-defined subprogram that is defined to tamper with the cursors
-of L, leaving L unmodified.  Similarly, when tampering with elements is
-prohibited for a particular list object L, Program_Error is propagated
-by a call of any language-defined subprogram that is defined to tamper
-with the elements of L [(or tamper with the cursors of L)], leaving L
-unmodified.
+69.1/4
+{AI05-0265-1AI05-0265-1} {AI12-0110-1AI12-0110-1} When tampering with
+cursors is prohibited for a particular list object L, Program_Error is
+propagated by a call of any language-defined subprogram that is defined
+to tamper with the cursors of L, leaving L unmodified.  Similarly, when
+tampering with elements is prohibited for a particular list object L,
+Program_Error is propagated by a call of any language-defined subprogram
+that is defined to tamper with the elements of L [(or tamper with the
+cursors of L)], leaving L unmodified.  These checks are made before any
+other defined behavior of the body of the language-defined subprogram.
 
 69.b/3
           Proof: Tampering with elements includes tampering with
@@ -84684,7 +87792,7 @@ following have occurred since it was created:
 unspecified if it is called with an invalid cursor parameter.  Execution
 is erroneous if any other subprogram declared in
 Containers.Doubly_Linked_Lists is called with an invalid cursor
-parameter.  
+parameter. 
 
 157.a/2
           Discussion: The list above is intended to be exhaustive.  In
@@ -84896,6 +88004,13 @@ list unless specified by the operation.
           prohibits tampering in order to more clearly define where the
           check is made and the exception raised.
 
+                    _Wording Changes from Ada 2012_
+
+164.m/4
+          {AI12-0110-1AI12-0110-1} Corrigendum: Clarified that tampering
+          checks precede all other checks made by a subprogram (but come
+          after those associated with the call).
+
 
 File: aarm2012.info,  Node: A.18.4,  Next: A.18.5,  Prev: A.18.3,  Up: A.18
 
@@ -85028,15 +88143,16 @@ elements of a map object M if:
           simple modification of (part of) an element is not a problem,
           so Update_Element does not cause a problem.
 
-15.1/3
-{AI05-0265-1AI05-0265-1} When tampering with cursors is prohibited for a
-particular map object M, Program_Error is propagated by a call of any
-language-defined subprogram that is defined to tamper with the cursors
-of M, leaving M unmodified.  Similarly, when tampering with elements is
-prohibited for a particular map object M, Program_Error is propagated by
-a call of any language-defined subprogram that is defined to tamper with
-the elements of M [(or tamper with the cursors of M)], leaving M
-unmodified.
+15.1/4
+{AI05-0265-1AI05-0265-1} {AI12-0110-1AI12-0110-1} When tampering with
+cursors is prohibited for a particular map object M, Program_Error is
+propagated by a call of any language-defined subprogram that is defined
+to tamper with the cursors of M, leaving M unmodified.  Similarly, when
+tampering with elements is prohibited for a particular map object M,
+Program_Error is propagated by a call of any language-defined subprogram
+that is defined to tamper with the elements of M [(or tamper with the
+cursors of M)], leaving M unmodified.  These checks are made before any
+other defined behavior of the body of the language-defined subprogram.
 
 15.b/3
           Proof: Tampering with elements includes tampering with
@@ -85765,6 +88881,13 @@ map unless specified by the operation.
           prohibits tampering in order to more clearly define where the
           check is made and the exception raised.
 
+                    _Wording Changes from Ada 2012_
+
+84.k/4
+          {AI12-0110-1AI12-0110-1} Corrigendum: Clarified that tampering
+          checks precede all other checks made by a subprogram (but come
+          after those associated with the call).
+
 
 File: aarm2012.info,  Node: A.18.5,  Next: A.18.6,  Prev: A.18.4,  Up: A.18
 
@@ -87007,7 +90130,7 @@ Containers.Hashed_Sets and Containers.Ordered_Sets 
provide private types
 Set and Cursor, and a set of operations for each type.  A set container
 allows elements of an arbitrary type to be stored without duplication.
 A hashed set uses a hash function to organize elements, while an ordered
-set orders its element per a specified relation.  
+set orders its element per a specified relation. 
 
 2/3
 {AI95-00302-03AI95-00302-03} {AI05-0299-1AI05-0299-1} This subclause
@@ -87131,15 +90254,16 @@ elements of a set object S if:
           leave both terms so that the rules for routines like Iterate
           and Query_Element are consistent across all containers.
 
-14.1/3
-{AI05-0265-1AI05-0265-1} When tampering with cursors is prohibited for a
-particular set object S, Program_Error is propagated by a call of any
-language-defined subprogram that is defined to tamper with the cursors
-of S, leaving S unmodified.  Similarly, when tampering with elements is
-prohibited for a particular set object S, Program_Error is propagated by
-a call of any language-defined subprogram that is defined to tamper with
-the elements of S [(or tamper with the cursors of S)], leaving S
-unmodified.
+14.1/4
+{AI05-0265-1AI05-0265-1} {AI12-0110-1AI12-0110-1} When tampering with
+cursors is prohibited for a particular set object S, Program_Error is
+propagated by a call of any language-defined subprogram that is defined
+to tamper with the cursors of S, leaving S unmodified.  Similarly, when
+tampering with elements is prohibited for a particular set object S,
+Program_Error is propagated by a call of any language-defined subprogram
+that is defined to tamper with the elements of S [(or tamper with the
+cursors of S)], leaving S unmodified.  These checks are made before any
+other defined behavior of the body of the language-defined subprogram.
 
 14.c/3
           Proof: Tampering with elements includes tampering with
@@ -88012,6 +91136,13 @@ set unless specified by the operation.
           prohibits tampering in order to more clearly define where the
           check is made and the exception raised.
 
+                    _Wording Changes from Ada 2012_
+
+105.k/4
+          {AI12-0110-1AI12-0110-1} Corrigendum: Clarified that tampering
+          checks precede all other checks made by a subprogram (but come
+          after those associated with the call).
+
 
 File: aarm2012.info,  Node: A.18.8,  Next: A.18.9,  Prev: A.18.7,  Up: A.18
 
@@ -89268,22 +92399,25 @@ well-suited to represent nested structures.
           block on which to construct more complex and more specialized
           tree containers.
 
-2/3
-{AI05-0136-1AI05-0136-1} A multiway tree container object manages a tree
-of internal nodes, each of which contains an element and pointers to the
-parent, first child, last child, next (successor) sibling, and previous
-(predecessor) sibling internal nodes.  A cursor designates a particular
-node within a tree (and by extension the element contained in that node,
-if any).  A cursor keeps designating the same node (and element) as long
-as the node is part of the container, even if the node is moved within
-the container.
-
-3/3
-{AI05-0136-1AI05-0136-1} {AI05-0269-1AI05-0269-1} A subtree is a
-particular node (which roots the subtree) and all of its child nodes
-(including all of the children of the child nodes, recursively).   There
-is a special node, the root, which is always present and has neither an
-associated element value nor any parent node.  The root node provides a
+2/4
+{AI05-0136-1AI05-0136-1} {AI12-0078-1AI12-0078-1}
+{AI12-0159-1AI12-0159-1} A multiway tree container object manages a tree
+of nodes, consisting of a root node and a set of internal nodes; each
+internal node contains an element and pointers to the parent, first
+child, last child, next (successor) sibling, and previous (predecessor)
+sibling internal nodes.  A cursor designates a particular node within a
+tree (and by extension the element contained in that node, if any).  A
+cursor keeps designating the same node (and element) as long as the node
+is part of the container, even if the node is moved within the
+container.
+
+3/4
+{AI05-0136-1AI05-0136-1} {AI05-0269-1AI05-0269-1}
+{AI12-0078-1AI12-0078-1} A subtree is a particular node (which roots the
+subtree) and all of its child nodes (including all of the children of
+the child nodes, recursively). The root node is always present and has
+neither an associated element value nor any parent node; it has pointers
+to its first child and its last child, if any.  The root node provides a
 place to add nodes to an otherwise empty tree and represents the base of
 the tree.
 
@@ -89446,12 +92580,12 @@ Containers.Multiway_Trees has the following 
declaration:
            return Cursor;
 
 39/3
-        function Find_In_Subtree (Position : Cursor;
+     {AI05-0136-1AI05-0136-1} {AI05-0248-1AI05-0248-1}    function 
Find_In_Subtree (Position : Cursor;
                                   Item     : Element_Type)
            return Cursor;
 
 40/3
-        function Ancestor_Find (Position : Cursor;
+     {AI05-0136-1AI05-0136-1} {AI05-0248-1AI05-0248-1}    function 
Ancestor_Find (Position : Cursor;
                                 Item     : Element_Type)
            return Cursor;
 
@@ -89581,12 +92715,12 @@ Containers.Multiway_Trees has the following 
declaration:
         procedure Previous_Sibling (Position : in out Cursor);
 
 68/3
-        procedure Iterate_Children
+     {AI05-0136-1AI05-0136-1} {AI05-0248-1AI05-0248-1}    procedure 
Iterate_Children
           (Parent  : in Cursor;
            Process : not null access procedure (Position : in Cursor));
 
 69/3
-        procedure Reverse_Iterate_Children
+     {AI05-0136-1AI05-0136-1} {AI05-0248-1AI05-0248-1}    procedure 
Reverse_Iterate_Children
           (Parent  : in Cursor;
            Process : not null access procedure (Position : in Cursor));
 
@@ -89726,15 +92860,16 @@ a tree object T if:
           as part of the operation, and finalization of an object is
           already defined as tampering with the element.
 
-90/3
-{AI05-0265-1AI05-0265-1} When tampering with cursors is prohibited for a
-particular tree object T, Program_Error is propagated by a call of any
-language-defined subprogram that is defined to tamper with the cursors
-of T, leaving T unmodified.  Similarly, when tampering with elements is
-prohibited for a particular tree object T, Program_Error is propagated
-by a call of any language-defined subprogram that is defined to tamper
-with the elements of T [(or tamper with the cursors of T)], leaving T
-unmodified.
+90/4
+{AI05-0265-1AI05-0265-1} {AI12-0110-1AI12-0110-1} When tampering with
+cursors is prohibited for a particular tree object T, Program_Error is
+propagated by a call of any language-defined subprogram that is defined
+to tamper with the cursors of T, leaving T unmodified.  Similarly, when
+tampering with elements is prohibited for a particular tree object T,
+Program_Error is propagated by a call of any language-defined subprogram
+that is defined to tamper with the elements of T [(or tamper with the
+cursors of T)], leaving T unmodified.  These checks are made before any
+other defined behavior of the body of the language-defined subprogram.
 
 90.a/3
           Proof: Tampering with elements includes tampering with
@@ -90235,13 +93370,14 @@ unmodified.
        (Container : in Tree;
         Process   : not null access procedure (Position : in Cursor));
 
-153/3
-          {AI05-0136-1AI05-0136-1} {AI05-0265-1AI05-0265-1} Iterate
-          calls Process.all with a cursor that designates each element
-          in Container, starting with the root node and proceeding in a
-          depth-first order.  Tampering with the cursors of Container is
-          prohibited during the execution of a call on Process.all.  Any
-          exception raised by Process.all is propagated.
+153/4
+          {AI05-0136-1AI05-0136-1} {AI05-0265-1AI05-0265-1}
+          {AI12-0069-1AI12-0069-1} Iterate calls Process.all with a
+          cursor that designates each element in Container, starting
+          from the root node and proceeding in a depth-first order.
+          Tampering with the cursors of Container is prohibited during
+          the execution of a call on Process.all.  Any exception raised
+          by Process.all is propagated.
 
 153.a/3
           Ramification: Process is not called with the root node, which
@@ -90266,17 +93402,17 @@ unmodified.
        (Position  : in Cursor;
         Process   : not null access procedure (Position : in Cursor));
 
-155/3
-          {AI05-0136-1AI05-0136-1} {AI05-0265-1AI05-0265-1} If Position
-          equals No_Element, then Constraint_Error is propagated.
-          Otherwise, Iterate_Subtree calls Process.all with a cursor
-          that designates each element in the subtree rooted by the node
-          designated by Position, starting with the node designated by
-          Position and proceeding in a depth-first order.  Tampering
-          with the cursors of the tree that contains the element
-          designated by Position is prohibited during the execution of a
-          call on Process.all.  Any exception raised by Process.all is
-          propagated.
+155/4
+          {AI05-0136-1AI05-0136-1} {AI05-0265-1AI05-0265-1}
+          {AI12-0069-1AI12-0069-1} If Position equals No_Element, then
+          Constraint_Error is propagated.  Otherwise, Iterate_Subtree
+          calls Process.all with a cursor that designates each element
+          in the subtree rooted by the node designated by Position,
+          starting from the node designated by Position and proceeding
+          in a depth-first order.  Tampering with the cursors of the
+          tree that contains the element designated by Position is
+          prohibited during the execution of a call on Process.all.  Any
+          exception raised by Process.all is propagated.
 
 155.a/3
           Ramification: Position can be passed a cursor designating the
@@ -90287,17 +93423,17 @@ unmodified.
      function Iterate (Container : in Tree)
         return Tree_Iterator_Interfaces.Forward_Iterator'Class;
 
-157/3
+157/4
           {AI05-0212-1AI05-0212-1} {AI05-0265-1AI05-0265-1}
-          {AI05-0269-1AI05-0269-1} Iterate returns an iterator object
-          (see *note 5.5.1::) that will generate a value for a loop
-          parameter (see *note 5.5.2::) designating each node in
-          Container, starting with the root node and proceeding in a
-          depth-first order.  Tampering with the cursors of Container is
-          prohibited while the iterator object exists (in particular, in
-          the sequence_of_statements of the loop_statement whose
-          iterator_specification denotes this object).  The iterator
-          object needs finalization.
+          {AI05-0269-1AI05-0269-1} {AI12-0069-1AI12-0069-1} Iterate
+          returns an iterator object (see *note 5.5.1::) that will
+          generate a value for a loop parameter (see *note 5.5.2::)
+          designating each element in Container, starting from the root
+          node and proceeding in a depth-first order.  Tampering with
+          the cursors of Container is prohibited while the iterator
+          object exists (in particular, in the sequence_of_statements of
+          the loop_statement whose iterator_specification denotes this
+          object).  The iterator object needs finalization.
 
 157.a/3
           Discussion: Exits are allowed from the loops created using the
@@ -90315,21 +93451,22 @@ unmodified.
      function Iterate_Subtree (Position : in Cursor)
         return Tree_Iterator_Interfaces.Forward_Iterator'Class;
 
-159/3
+159/4
           {AI05-0212-1AI05-0212-1} {AI05-0265-1AI05-0265-1}
-          {AI05-0269-1AI05-0269-1} If Position equals No_Element, then
-          Constraint_Error is propagated.  Otherwise, Iterate_Subtree
-          returns an iterator object (see *note 5.5.1::) that will
-          generate a value for a loop parameter (see *note 5.5.2::)
-          designating each element in the subtree rooted by the node
-          designated by Position, starting with the node designated by
-          Position and proceeding in a depth-first order.  If Position
+          {AI05-0269-1AI05-0269-1} {AI12-0069-1AI12-0069-1} If Position
           equals No_Element, then Constraint_Error is propagated.
-          Tampering with the cursors of the container that contains the
-          node designated by Position is prohibited while the iterator
-          object exists (in particular, in the sequence_of_statements of
-          the loop_statement whose iterator_specification denotes this
-          object).  The iterator object needs finalization.
+          Otherwise, Iterate_Subtree returns an iterator object (see
+          *note 5.5.1::) that will generate a value for a loop parameter
+          (see *note 5.5.2::) designating each element in the subtree
+          rooted by the node designated by Position, starting from the
+          node designated by Position and proceeding in a depth-first
+          order.  If Position equals No_Element, then Constraint_Error
+          is propagated.  Tampering with the cursors of the container
+          that contains the node designated by Position is prohibited
+          while the iterator object exists (in particular, in the
+          sequence_of_statements of the loop_statement whose
+          iterator_specification denotes this object).  The iterator
+          object needs finalization.
 
 160/3
      function Child_Count (Parent : Cursor) return Count_Type;
@@ -91051,6 +94188,22 @@ tree unless specified by the operation.
           {AI05-0265-1AI05-0265-1} {AI05-0269-1AI05-0269-1} The generic
           package Containers.Multiway_Trees is new.
 
+                    _Wording Changes from Ada 2012_
+
+233.d/4
+          {AI12-0069-1AI12-0069-1} Corrigendum: Fixed the function
+          Iterate so it is clear that the root node is never visited.
+
+233.e/4
+          {AI12-0078-1AI12-0078-1} Corrigendum: The definition of node
+          is clarified so that it it doesn't appear to say all nodes
+          have an element.
+
+233.f/4
+          {AI12-0110-1AI12-0110-1} Corrigendum: Clarified that tampering
+          checks precede all other checks made by a subprogram (but come
+          after those associated with the call).
+
 
 File: aarm2012.info,  Node: A.18.11,  Next: A.18.12,  Prev: A.18.10,  Up: A.18
 
@@ -91104,12 +94257,34 @@ contents and semantics as Containers.Vectors except:
      Update_Element may be constrained even if Element_Type is
      unconstrained.
 
+9/4
+   * {AI12-0035-1AI12-0035-1} The operations "&", Append, Insert,
+     Prepend, Replace_Element, and To_Vector that have a formal
+     parameter of type Element_Type perform indefinite insertion (see
+     *note A.18::).
+
                         _Extensions to Ada 95_
 
-8.a/2
+9.a/2
           {AI95-00302-03AI95-00302-03} The generic package
           Containers.Indefinite_Vectors is new.
 
+                    _Inconsistencies With Ada 2012_
+
+9.b/4
+          {AI12-0035-1AI12-0035-1} Corrigendum: Defined some routines to
+          "perform indefinite insertion".  This could mean that some
+          calls to those routines would now raise Program_Error where
+          they previously worked.  However, this is extremely unlikely,
+          as it would require that the package was not implemented in
+          Ada (an Ada allocator would raise Program_Error in these
+          circumstances), and that a program inserted a more nested
+          tagged type (or access discriminant) into a container, and
+          then used that object before its type or discriminant went out
+          of scope.  All known implementations are implemented in Ada,
+          so we believe there is no practical incompatibility.  As such,
+          we mention this only for completeness.
+
 
 File: aarm2012.info,  Node: A.18.12,  Next: A.18.13,  Prev: A.18.11,  Up: A.18
 
@@ -91163,12 +94338,27 @@ except:
      Update_Element may be constrained even if Element_Type is
      unconstrained.
 
+8/4
+   * {AI12-0035-1AI12-0035-1} The operations Append, Insert, Prepend,
+     and Replace_Element that have a formal parameter of type
+     Element_Type perform indefinite insertion (see *note A.18::).
+
                         _Extensions to Ada 95_
 
-7.a/2
+8.a/2
           {AI95-00302-03AI95-00302-03} The generic package
           Containers.Indefinite_Doubly_Linked_Lists is new.
 
+                    _Inconsistencies With Ada 2012_
+
+8.b/4
+          {AI12-0035-1AI12-0035-1} Corrigendum: Defined some routines to
+          "perform indefinite insertion".  This could mean that some
+          calls to those routines would now raise Program_Error where
+          they previously worked.  However, this is extremely unlikely;
+          see Inconsistencies With Ada 2012 in *note A.18.11:: for
+          details.
+
 
 File: aarm2012.info,  Node: A.18.13,  Next: A.18.14,  Prev: A.18.12,  Up: A.18
 
@@ -91223,12 +94413,33 @@ same contents and semantics as Containers.Hashed_Maps 
except:
      Update_Element may be constrained even if Element_Type is
      unconstrained.
 
+9/4
+   * {AI12-0035-1AI12-0035-1} The operations Include, Insert, Replace,
+     and Replace_Element that have a formal parameter of type
+     Element_Type perform indefinite insertion (see *note A.18::).
+
+9.a/4
+          Discussion: Some of the named operations also have a formal of
+          the indefinite formal type Key_Type and perform indefinite
+          insertion using that value, but it is sufficient to mention
+          the formal of type Element_Type to cover those.
+
                         _Extensions to Ada 95_
 
-8.a/2
+9.b/2
           {AI95-00302-03AI95-00302-03} The generic package
           Containers.Indefinite_Hashed_Maps is new.
 
+                    _Inconsistencies With Ada 2012_
+
+9.c/4
+          {AI12-0035-1AI12-0035-1} Corrigendum: Defined some routines to
+          "perform indefinite insertion".  This could mean that some
+          calls to those routines would now raise Program_Error where
+          they previously worked.  However, this is extremely unlikely;
+          see Inconsistencies With Ada 2012 in *note A.18.11:: for
+          details.
+
 
 File: aarm2012.info,  Node: A.18.14,  Next: A.18.15,  Prev: A.18.13,  Up: A.18
 
@@ -91283,12 +94494,33 @@ same contents and semantics as 
Containers.Ordered_Maps except:
      Update_Element may be constrained even if Element_Type is
      unconstrained.
 
+9/4
+   * {AI12-0035-1AI12-0035-1} The operations Include, Insert, Replace,
+     and Replace_Element that have a formal parameter of type
+     Element_Type perform indefinite insertion (see *note A.18::).
+
+9.a/4
+          Discussion: Some of the named operations also have a formal of
+          the indefinite formal type Key_Type and perform indefinite
+          insertion using that value, but it is sufficient to mention
+          the formal of type Element_Type to cover those.
+
                         _Extensions to Ada 95_
 
-8.a/2
+9.b/2
           {AI95-00302-03AI95-00302-03} The generic package
           Containers.Indefinite_Ordered_Maps is new.
 
+                    _Inconsistencies With Ada 2012_
+
+9.c/4
+          {AI12-0035-1AI12-0035-1} Corrigendum: Defined some routines to
+          "perform indefinite insertion".  This could mean that some
+          calls to those routines would now raise Program_Error where
+          they previously worked.  However, this is extremely unlikely;
+          see Inconsistencies With Ada 2012 in *note A.18.11:: for
+          details.
+
 
 File: aarm2012.info,  Node: A.18.15,  Next: A.18.16,  Prev: A.18.14,  Up: A.18
 
@@ -91317,12 +94549,33 @@ same contents and semantics as Containers.Hashed_Sets 
except:
      Update_Element_Preserving_Key may be constrained even if
      Element_Type is unconstrained.
 
+5/4
+   * {AI12-0035-1AI12-0035-1} The operations Include, Insert, Replace,
+     Replace_Element, and To_Set that have a formal parameter of type
+     Element_Type perform indefinite insertion (see *note A.18::).
+
+5.a/4
+          Ramification: This includes the procedure Replace declared in
+          the nested generic package Generic_Keys, as well as the
+          routines declared directly in the
+          Containers.Indefinite_Hashed_Sets package.
+
                         _Extensions to Ada 95_
 
-4.a/2
+5.b/2
           {AI95-00302-03AI95-00302-03} The generic package
           Containers.Indefinite_Hashed_Sets is new.
 
+                    _Inconsistencies With Ada 2012_
+
+5.c/4
+          {AI12-0035-1AI12-0035-1} Corrigendum: Defined some routines to
+          "perform indefinite insertion".  This could mean that some
+          calls to those routines would now raise Program_Error where
+          they previously worked.  However, this is extremely unlikely;
+          see Inconsistencies With Ada 2012 in *note A.18.11:: for
+          details.
+
 
 File: aarm2012.info,  Node: A.18.16,  Next: A.18.17,  Prev: A.18.15,  Up: A.18
 
@@ -91351,12 +94604,33 @@ same contents and semantics as 
Containers.Ordered_Sets except:
      Update_Element_Preserving_Key may be constrained even if
      Element_Type is unconstrained.
 
+5/4
+   * {AI12-0035-1AI12-0035-1} The operations Include, Insert, Replace,
+     Replace_Element, and To_Set that have a formal parameter of type
+     Element_Type perform indefinite insertion (see *note A.18::).
+
+5.a/4
+          Ramification: This includes the procedure Replace declared in
+          the nested generic package Generic_Keys, as well as the
+          routines declared directly in the
+          Containers.Indefinite_Ordered_Sets package.
+
                         _Extensions to Ada 95_
 
-4.a/2
+5.b/2
           {AI95-00302-03AI95-00302-03} The generic package
           Containers.Indefinite_Ordered_Sets is new.
 
+                    _Inconsistencies With Ada 2012_
+
+5.c/4
+          {AI12-0035-1AI12-0035-1} Corrigendum: Defined some routines to
+          "perform indefinite insertion".  This could mean that some
+          calls to those routines would now raise Program_Error where
+          they previously worked.  However, this is extremely unlikely;
+          see Inconsistencies With Ada 2012 in *note A.18.11:: for
+          details.
+
 
 File: aarm2012.info,  Node: A.18.17,  Next: A.18.18,  Prev: A.18.16,  Up: A.18
 
@@ -91409,12 +94683,27 @@ as Containers.Multiway_Trees except:
      Update_Element may be constrained even if Element_Type is
      unconstrained.
 
+8/4
+   * {AI12-0035-1AI12-0035-1} The operations Append_Child, Insert_Child,
+     Prepend_Child, and Replace_Element that have a formal parameter of
+     type Element_Type perform indefinite insertion (see *note A.18::).
+
                        _Extensions to Ada 2005_
 
-7.a/3
+8.a/3
           {AI05-0136-1AI05-0136-1} The generic package
           Containers.Indefinite_Multiway_Trees is new.
 
+                    _Inconsistencies With Ada 2012_
+
+8.b/4
+          {AI12-0035-1AI12-0035-1} Corrigendum: Defined some routines to
+          "perform indefinite insertion".  This could mean that some
+          calls to those routines would now raise Program_Error where
+          they previously worked.  However, this is extremely unlikely;
+          see Inconsistencies With Ada 2012 in *note A.18.11:: for
+          details.
+
 
 File: aarm2012.info,  Node: A.18.18,  Next: A.18.19,  Prev: A.18.17,  Up: A.18
 
@@ -91582,11 +94871,13 @@ to tamper with the element of a holder object H if:
           simple modification of (part of) an element is not a problem,
           so Update_Element does not cause a problem.
 
-35/3
-{AI05-0265-1AI05-0265-1} When tampering with the element is prohibited
-for a particular holder object H, Program_Error is propagated by a call
-of any language-defined subprogram that is defined to tamper with the
-element of H, leaving H unmodified.
+35/4
+{AI05-0265-1AI05-0265-1} {AI12-0110-1AI12-0110-1} When tampering with
+the element is prohibited for a particular holder object H,
+Program_Error is propagated by a call of any language-defined subprogram
+that is defined to tamper with the element of H, leaving H unmodified.
+These checks are made before any other defined behavior of the body of
+the language-defined subprogram.
 
 36/3
      function "=" (Left, Right : Holder) return Boolean;
@@ -91609,9 +94900,10 @@ element of H, leaving H unmodified.
 38/3
      function To_Holder (New_Item : Element_Type) return Holder;
 
-39/3
-          {AI05-0069-1AI05-0069-1} Returns a nonempty holder containing
-          an element initialized to New_Item.
+39/4
+          {AI05-0069-1AI05-0069-1} {AI12-0035-1AI12-0035-1} Returns a
+          nonempty holder containing an element initialized to New_Item.
+          To_Holder performs indefinite insertion (see *note A.18::).
 
 40/3
      function Is_Empty (Container : Holder) return Boolean;
@@ -91639,10 +94931,12 @@ element of H, leaving H unmodified.
      procedure Replace_Element (Container : in out Holder;
                                 New_Item  : in     Element_Type);
 
-47/3
-          {AI05-0069-1AI05-0069-1} Replace_Element assigns the value
-          New_Item into Container, replacing any preexisting content of
-          Container.  Container is not empty after a successful call to
+47/4
+          {AI05-0069-1AI05-0069-1} {AI12-0035-1AI12-0035-1}
+          Replace_Element assigns the value New_Item into Container,
+          replacing any preexisting content of Container;
+          Replace_Element performs indefinite insertion (see *note
+          A.18::).  Container is not empty after a successful call to
           Replace_Element.
 
 48/3
@@ -91891,6 +95185,23 @@ by the operation.
           {AI05-0265-1AI05-0265-1}  The generic package
           Containers.Indefinite_Holders is new.
 
+                    _Inconsistencies With Ada 2012_
+
+74.c/4
+          {AI12-0035-1AI12-0035-1} Corrigendum: Defined some routines to
+          "perform indefinite insertion".  This could mean that some
+          calls to those routines would now raise Program_Error where
+          they previously worked.  However, this is extremely unlikely;
+          see Inconsistencies With Ada 2012 in *note A.18.11:: for
+          details.
+
+                    _Wording Changes from Ada 2012_
+
+74.d/4
+          {AI12-0110-1AI12-0110-1} Corrigendum: Clarified that tampering
+          checks precede all other checks made by a subprogram (but come
+          after those associated with the call).
+
 
 File: aarm2012.info,  Node: A.18.19,  Next: A.18.20,  Prev: A.18.18,  Up: A.18
 
@@ -91965,7 +95276,7 @@ tampering with elements [or cursors], or execution 
proceeds normally.
 11/3
 {AI05-0265-1AI05-0265-1} When a bounded vector object V is finalized, if
 tampering with cursors is prohibited for V other than due to an
-assignment from another vector, then execution is erroneous.  
+assignment from another vector, then execution is erroneous. 
 
 11.a/3
           Reason: This is a tampering event, but since the
@@ -92125,7 +95436,7 @@ tampering with elements [or cursors], or execution 
proceeds normally.
 15/3
 {AI05-0265-1AI05-0265-1} When a bounded list object L is finalized, if
 tampering with cursors is prohibited for L other than due to an
-assignment from another list, then execution is erroneous.  
+assignment from another list, then execution is erroneous. 
 
 15.a/3
           Reason: This is a tampering event, but since the
@@ -92290,7 +95601,7 @@ tampering with elements [or cursors], or execution 
proceeds normally.
 16/3
 {AI05-0265-1AI05-0265-1} When a bounded map object M is finalized, if
 tampering with cursors is prohibited for M other than due to an
-assignment from another map, then execution is erroneous.  
+assignment from another map, then execution is erroneous. 
 
 16.a/3
           Reason: This is a tampering event, but since the
@@ -92441,7 +95752,7 @@ tampering with elements [or cursors], or execution 
proceeds normally.
 13/3
 {AI05-0265-1AI05-0265-1} When a bounded map object M is finalized, if
 tampering with cursors is prohibited for M other than due to an
-assignment from another map, then execution is erroneous.  
+assignment from another map, then execution is erroneous. 
 
 13.a/3
           Reason: This is a tampering event, but since the
@@ -92612,7 +95923,7 @@ tampering with elements [or cursors], or execution 
proceeds normally.
 16/3
 {AI05-0265-1AI05-0265-1} When a bounded set object S is finalized, if
 tampering with cursors is prohibited for S other than due to an
-assignment from another set, then execution is erroneous.  
+assignment from another set, then execution is erroneous. 
 
 16.a/3
           Reason: This is a tampering event, but since the
@@ -92760,7 +96071,7 @@ tampering with elements [or cursors], or execution 
proceeds normally.
 13/3
 {AI05-0265-1AI05-0265-1} When a bounded set object S is finalized, if
 tampering with cursors is prohibited for S other than due to an
-assignment from another set, then execution is erroneous.  
+assignment from another set, then execution is erroneous. 
 
 13.a/3
           Reason: This is a tampering event, but since the
@@ -92878,9 +96189,9 @@ Containers.Multiway_Trees except:
 9/3
    * Function Copy is declared as follows:
 
-10/3
-       function Copy (Source : Tree; Capacity : Count_Type := 0)
-          return List;
+10/4
+     {AI12-0056-1AI12-0056-1}   function Copy (Source : Tree; Capacity : 
Count_Type := 0)
+          return Tree;
 
 11/3
      If Capacity is 0, then the tree capacity is the count of Source; if
@@ -92921,7 +96232,7 @@ tampering with elements [or cursors], or execution 
proceeds normally.
 15/3
 {AI05-0265-1AI05-0265-1} When a bounded tree object T is finalized, if
 tampering with cursors is prohibited for T other than due to an
-assignment from another tree, then execution is erroneous.  
+assignment from another tree, then execution is erroneous. 
 
 15.a/3
           Reason: This is a tampering event, but since the
@@ -93081,11 +96392,11 @@ Containers.Generic_Constrained_Array_Sort has the 
following declaration:
 {AI05-0001-1AI05-0001-1} The generic library procedure
 Containers.Generic_Sort has the following declaration:
 
-9.2/3
-     generic
+9.2/4
+     {AI12-0056-1AI12-0056-1} generic
         type Index_Type is (<>);
         with function Before (Left, Right : Index_Type) return Boolean;
-        with procedure Swap (Left, Right : Index_Type);
+        with procedure Swap (Left, Right : in Index_Type);
      procedure Ada.Containers.Generic_Sort
            (First, Last : Index_Type'Base);
      pragma Pure(Ada.Containers.Generic_Sort);
@@ -93875,10 +97186,10 @@ Reference_Type) is that
 28/3
 {AI05-0212-1AI05-0212-1} is the same as:
 
-29/3
-     for C in G (Next).Iterate loop
+29/4
+     {AI12-0080-1AI12-0080-1} for C in G (Next).Iterate loop
         declare
-           E : Edge renames G (Next)(C).all;
+           E : Edge renames G (Next)(C);
         begin
            if not Reached(E.To) then
               ...
@@ -93889,14 +97200,14 @@ Reference_Type) is that
 30/3
 {AI05-0212-1AI05-0212-1} which is the same as:
 
-31/3
-     declare
+31/4
+     {AI12-0080-1AI12-0080-1} declare
         L : Adjacency_Lists.List renames G (Next);
         C : Adjacency_Lists.Cursor := L.First;
      begin
         while Has_Element (C) loop
            declare
-              E : Edge renames L(C).all;
+              E : Edge renames L(C);
            begin
               if not Reached(E.To) then
                  ...
@@ -93933,9 +97244,24 @@ declaration:
         pragma Preelaborate(Locales);
         pragma Remote_Types(Locales);
 
-4/3
-        type Language_Code is array (1 .. 3) of Character range 'a' .. 'z';
-        type Country_Code is array (1 .. 2) of Character range 'A' .. 'Z';
+4/4
+     {AI12-0037-1AI12-0037-1}    type Language_Code is new String (1 .. 3)
+           with Dynamic_Predicate =>
+              (for all E of Language_Code => E in 'a' .. 'z');
+        type Country_Code is new String (1 .. 2)
+           with Dynamic_Predicate =>
+              (for all E of Country_Code  => E in 'A' .. 'Z');
+
+4.a/4
+          Discussion: {AI12-0037-1AI12-0037-1} These types are derived
+          from type String so that they can easily be converted to or
+          from type String.  That's important if one of these values
+          needs to be input or displayed (via Text_IO, perhaps).  We use
+          the predicate to ensure that only possible component values
+          are used.  Ada does not allow converting between unrelated
+          types with components that don't statically match, so we
+          cannot declare new types with constrained components if we
+          want conversions to or from type String.
 
 5/3
         Language_Unknown : constant Language_Code := "und";
@@ -94003,6 +97329,22 @@ from the environment, then Country returns 
Country_Unknown.
           {AI05-0127-2AI05-0127-2} {AI05-0233-1AI05-0233-1} Package
           Locales is new.
 
+                    _Inconsistencies With Ada 2012_
+
+12.b/4
+          {AI12-0037-1AI12-0037-1} Corrigendum: Types Language_Code and
+          Country_Code are defined with predicates rather than
+          constrained components so that they can be converted to/from
+          type String.  This changes the exception raised from
+          Constraint_Error to Assertion_Error if an assignment is
+          attempted with an incorrect value.  This could only matter if
+          there is a handler specifically for Constraint_Error
+          surrounding this assignment; as this exception raise is
+          certainly caused by a bug (why would anyone want to use
+          invalid language or country codes?), such a handler seems very
+          unlikely.  (In addition, this is a new Ada 2012 package, so
+          there is not likely to be a lot of code using it.)
+
 
 File: aarm2012.info,  Node: Annex B,  Next: Annex C,  Prev: Annex A,  Up: Top
 
@@ -94094,7 +97436,7 @@ Export aspects are intended primarily for objects and 
subprograms,
 although implementations are allowed to support other entities.  The
 Link_Name and External_Name aspects are used to specify the link name
 and external name, respectively, to be used to identify imported or
-exported entities in the external environment.  
+exported entities in the external environment. 
 
 1.a/3
           Aspect Description for Import: Entity is imported from another
@@ -94179,7 +97521,7 @@ convention names are implementation defined, except for 
certain
 language-defined ones, such as Ada and Intrinsic, as explained in *note
 6.3.1::, "*note 6.3.1:: Conformance Rules".  [Additional convention
 names generally represent the calling conventions of foreign languages,
-language implementations, or specific run-time models.]  The convention
+language implementations, or specific run-time models.] The convention
 of a callable entity is its calling convention.
 
 11.a
@@ -94210,6 +97552,12 @@ L-compatible type) if any of the following conditions 
are met:
    * {AI05-0229-1AI05-0229-1} Convention L has been specified for T, and
      T is eligible for convention L; that is:
 
+14.1/4
+             * {AI12-0135-1AI12-0135-1} T is an enumeration type such
+               that all internal codes (whether assigned by default or
+               explicitly) are within an implementation-defined range
+               that includes at least the range of values 0 ..  2**15-1;
+
 15
              * T is an array type with either an unconstrained or
                statically-constrained first subtype, and its component
@@ -94422,7 +97770,7 @@ the recommended mechanism is to provide two subprograms 
whose link names
 are "adainit" and "adafinal".  Adainit should contain the elaboration
 code for library units.  Adafinal should contain the finalization code.
 These subprograms should have no effect the second and subsequent time
-they are called.  
+they are called. 
 
 39.a.1/3
           Implementation Advice: If Export is supported for a language,
@@ -94446,13 +97794,15 @@ aspect as True is supported.
           packages should be provided when specifying the Export aspect
           as True is supported.
 
-41/3
-{AI05-0229-1AI05-0229-1} For each supported convention L other than
-Intrinsic, an implementation should support specifying the Import and
-Export aspects for objects of L-compatible types and for subprograms,
-and the Convention aspect for L-eligible types and for subprograms,
-presuming the other language has corresponding features.  Specifying the
-Convention aspect need not be supported for scalar types.
+41/4
+{AI05-0229-1AI05-0229-1} {AI12-0135-1AI12-0135-1} For each supported
+convention L other than Intrinsic, an implementation should support
+specifying the Import and Export aspects for objects of L-compatible
+types and for subprograms, and the Convention aspect for L-eligible
+types and for subprograms, presuming the other language has
+corresponding features.  Specifying the Convention aspect need not be
+supported for scalar types, other than enumeration types whose internal
+codes fall within the range 0 ..  2**15-1.
 
 41.a.1/3
           Implementation Advice: For each supported convention L other
@@ -94543,8 +97893,8 @@ Convention aspect need not be supported for scalar 
types.
 
                               _Examples_
 
-50
-Example of interfacing pragmas:
+50/4
+{AI12-0080-1AI12-0080-1} Example of interfacing aspects:
 
 51/3
      {AI05-0229-1AI05-0229-1} {AI05-0269-1AI05-0269-1} package Fortran_Library 
is
@@ -94600,6 +97950,14 @@ Example of interfacing pragmas:
           Link_Name, and External_Name are new; pragmas Convention,
           Import, and Export are now obsolescent.
 
+                       _Extensions to Ada 2012_
+
+51.f/4
+          {AI12-0135-1AI12-0135-1} Corrigendum: Added a suggestion that
+          convention be supported for enumeration types.  This will make
+          the use of enumeration types portable for implementations that
+          support interfacing to a particular language.
+
 
 File: aarm2012.info,  Node: B.2,  Next: B.3,  Prev: B.1,  Up: Annex B
 
@@ -94701,7 +98059,7 @@ visible part of package Interfaces:
 
 10.a
           Implementation Note: The names for these floating point types
-          are not specified.  However, if IEEE arithmetic is supported,
+          are not specified. However, if IEEE arithmetic is supported,
           then the names should be IEEE_Float_32 and IEEE_Float_64 for
           single and double precision, respectively.
 
@@ -94782,13 +98140,14 @@ File: aarm2012.info,  Node: B.3,  Next: B.4,  Prev: 
B.2,  Up: Annex B
 B.3 Interfacing with C and C++
 ==============================
 
-1/3
+1/4
 {8652/00598652/0059} {AI95-00131-01AI95-00131-01}
-{AI95-00376-01AI95-00376-01} {AI05-0229-1AI05-0229-1} The facilities
-relevant to interfacing with the C language and the corresponding subset
-of the C++ language are the package Interfaces.C and its children, and
-support for specifying the Convention aspect with convention_identifiers
-C and C_Pass_By_Copy.
+{AI95-00376-01AI95-00376-01} {AI05-0229-1AI05-0229-1}
+{AI12-0028-1AI12-0028-1} The facilities relevant to interfacing with the
+C language and the corresponding subset of the C++ language are the
+package Interfaces.C and its children, and support for specifying the
+Convention aspect with convention_identifiers C, C_Pass_By_Copy, and any
+of the C_Variadic_n conventions described below.
 
 2/3
 {AI95-00376-01AI95-00376-01} {AI95-0262-1AI95-0262-1}
@@ -95155,7 +98514,7 @@ unsigned_char, depending on the C implementation.
           Trim_Nul is True) is converted (via the To_Ada function) to a
           Character, which is assigned to the corresponding element of
           Target.  Count is set to the number of Target elements
-          assigned.  If Target is not long enough, Constraint_Error is
+          assigned. If Target is not long enough, Constraint_Error is
           propagated.  If Trim_Nul is True and Item does not contain
           nul, then Terminator_Error is propagated.
 
@@ -95349,6 +98708,25 @@ statically constrained subtypes, and each component is 
C-compatible.
 {AI05-0264-1AI05-0264-1} If a type is C_Pass_By_Copy-compatible, then it
 is also C-compatible.
 
+60.16/4
+{AI12-0028-1AI12-0028-1} The identifiers C_Variadic_0, C_Variadic_1,
+C_Variadic_2, and so on are convention_identifiers.  These conventions
+are said to be C_Variadic.  The convention C_Variadic_n is the calling
+convention for a variadic C function taking n fixed parameters and then
+a variable number of additional parameters.  The C_Variadic_n convention
+shall only be specified as the convention aspect for a subprogram, or
+for an access-to-subprogram type, having at least n parameters.  A type
+is compatible with a C_Variadic convention if and only if the type is
+C-compatible.
+
+60.h/4
+          To be honest: It is implementation defined what the largest n
+          in C_Variadic_n is supported.  We don't say this because it
+          complicates the wording and it is true for almost any
+          convention_identifier (only Ada is required to be supported by
+          the language, all others need to be documented in order for
+          programmers to know that they are available).
+
                      _Implementation Requirements_
 
 61/3
@@ -95418,6 +98796,12 @@ between Ada and C.
 65
    * An Ada function corresponds to a non-void C function.
 
+65.1/4
+   * {AI12-0135-1AI12-0135-1} An Ada enumeration type corresponds to a C
+     enumeration type with corresponding enumeration literals having the
+     same internal codes, provided the internal codes fall within the
+     range of the C int type.
+
 66
    * An Ada in scalar parameter is passed as a scalar argument to a C
      function.
@@ -95492,10 +98876,10 @@ This paragraph was 
deleted.{AI95-00337-01AI95-00337-01}
 74/2
      This paragraph was deleted.{AI95-00216-01AI95-00216-01}
 
-75
-     8  A C function that takes a variable number of arguments can
-     correspond to several Ada subprograms, taking various specific
-     numbers and types of parameters.
+75/4
+     8  {AI12-0028-1AI12-0028-1} A variadic C function can correspond to
+     several Ada subprograms, taking various specific numbers and types
+     of parameters.
 
                               _Examples_
 
@@ -95600,6 +98984,23 @@ Example of using the Interfaces.C package:
           language definition said), so little existing code should be
           impacted.
 
+                       _Extensions to Ada 2012_
+
+84.j/4
+          {AI12-0028-1AI12-0028-1} Corrigendum: The
+          convention_identifiers C_Variadic_0, C_Variadic_1, and so on
+          are new.  These are classified as a correction as any
+          implementation can add such identifiers and it is important
+          that special conventions be available for variadic functions
+          as typical x64 conventions are different for normal and
+          variadic C functions.
+
+84.k/4
+          {AI12-0135-1AI12-0135-1} Corrigendum: Defined the
+          correspondence between an Ada enumeration type and a C
+          enumeration type; implementations should support convention C
+          for enumeration types.
+
 * Menu:
 
 * B.3.1 ::    The Package Interfaces.C.Strings
@@ -96749,8 +100150,8 @@ parameter.
 Each of the procedures To_COBOL and To_Ada copies converted elements
 from Item to Target, using the appropriate mapping (Ada_To_COBOL or
 COBOL_To_Ada, respectively).  The index in Target of the last element
-assigned is returned in Last (0 if Item is a null array).  If
-Item'Length exceeds Target'Length, Constraint_Error is propagated.
+assigned is returned in Last (0 if Item is a null array). If Item'Length
+exceeds Target'Length, Constraint_Error is propagated.
 
 59
 Type Numeric corresponds to COBOL's numeric data category with display
@@ -97477,7 +100878,7 @@ systems.]
 * C.2 ::      Required Representation Support
 * C.3 ::      Interrupt Support
 * C.4 ::      Preelaboration Requirements
-* C.5 ::      Pragma Discard_Names
+* C.5 ::      Aspect Discard_Names
 * C.6 ::      Shared Variable Control
 * C.7 ::      Task Information
 
@@ -97658,25 +101059,25 @@ C.3 Interrupt Support
 1/3
 {AI05-0299-1AI05-0299-1} [This subclause specifies the language-defined
 model for hardware interrupts in addition to mechanisms for handling
-interrupts.]  
+interrupts.] 
 
                           _Dynamic Semantics_
 
 2
 [An interrupt represents a class of events that are detected by the
-hardware or the system software.]  Interrupts are said to occur.  An
+hardware or the system software.] Interrupts are said to occur.  An
 occurrence of an interrupt is separable into generation and delivery.
 Generation of an interrupt is the event in the underlying hardware or
-system that makes the interrupt available to the program.  Delivery is
+system that makes the interrupt available to the program. Delivery is
 the action that invokes part of the program as response to the interrupt
-occurrence.  Between generation and delivery, the interrupt occurrence
-[(or interrupt)] is pending.  Some or all interrupts may be blocked.
+occurrence. Between generation and delivery, the interrupt occurrence
+[(or interrupt)] is pending. Some or all interrupts may be blocked.
 When an interrupt is blocked, all occurrences of that interrupt are
-prevented from being delivered.  Certain interrupts are reserved.  The
+prevented from being delivered. Certain interrupts are reserved.  The
 set of reserved interrupts is implementation defined.  A reserved
 interrupt is either an interrupt for which user-defined handlers are not
 supported, or one which already has an attached handler by some other
-implementation-defined means.  Program units can be connected to
+implementation-defined means. Program units can be connected to
 nonreserved interrupts.  While connected, the program unit is said to be
 attached to that interrupt.  The execution of that program unit, the
 interrupt handler, is invoked upon delivery of the interrupt occurrence.
@@ -97930,9 +101331,9 @@ Interrupt_Handler aspect are specified for a protected 
procedure, the
 corresponding protected_type_declaration (*note 9.4: S0210.) or
 single_protected_declaration (*note 9.4: S0211.) shall be a
 library-level declaration and shall not be declared within a generic
-body.  In addition to the places where Legality Rules normally apply
-(see *note 12.3::), this rule also applies in the private part of an
-instance of a generic unit.
+body. In addition to the places where Legality Rules normally apply (see
+*note 12.3::), this rule also applies in the private part of an instance
+of a generic unit.
 
 7.a
           Discussion: In the case of a protected_type_declaration, an
@@ -97968,7 +101369,7 @@ allowed to be attached to multiple interrupts.]
 aspect of a protected procedure P is evaluated as part of the creation
 of the protected object that contains P. The value of the expression
 identifies an interrupt.  As part of the initialization of that object,
-P (the handler procedure) is attached to the identified interrupt.  A
+P (the handler procedure) is attached to the identified interrupt. A
 check is made that the corresponding interrupt is not reserved.
 Program_Error is raised if the check fails, and the existing treatment
 for the interrupt is not affected.
@@ -97980,7 +101381,7 @@ initialization of a protected object that contains a 
protected procedure
 for which either the Attach_Handler aspect is specified or the
 Interrupt_Handler aspect is True, a check is made that the initial
 ceiling priority of the object is in the range of
-System.Interrupt_Priority.  If the check fails, Program_Error is raised.
+System.Interrupt_Priority. If the check fails, Program_Error is raised.
 
 12/3
 {8652/00688652/0068} {AI95-00121-01AI95-00121-01}
@@ -98292,7 +101693,7 @@ Current_Handler returns null.
 {AI05-0229-1AI05-0229-1} The Attach_Handler procedure attaches the
 specified handler to the interrupt, overriding any existing treatment
 (including a user handler) in effect for that interrupt.  If New_Handler
-is null, the default treatment is restored.  If New_Handler designates a
+is null, the default treatment is restored. If New_Handler designates a
 protected procedure for which the aspect Interrupt_Handler is False,
 Program_Error is raised.  In this case, the operation does not modify
 the existing interrupt treatment.
@@ -98326,7 +101727,7 @@ specified interrupt.
 20
 For all operations defined in this package that take a parameter of type
 Interrupt_Id, with the exception of Is_Reserved and Reference, a check
-is made that the specified interrupt is not reserved.  Program_Error is
+is made that the specified interrupt is not reserved. Program_Error is
 raised if this check fails.
 
 21/3
@@ -98334,14 +101735,14 @@ raised if this check fails.
 Detach_Handler, or Exchange_Handler procedures, an attempt is made to
 detach a handler that was attached statically (using the aspect
 Attach_Handler), the handler is not detached and Program_Error is
-raised.  
+raised. 
 
 22/2
 {AI95-00434-01AI95-00434-01} The Reference function returns a value of
 type System.Address that can be used to attach a task entry via an
 address clause (see *note J.7.1::) to the interrupt specified by
 Interrupt.  This function raises Program_Error if attaching task entries
-to interrupts (or to this particular interrupt) is not supported.  
+to interrupts (or to this particular interrupt) is not supported. 
 
 22.1/3
 {AI05-0153-3AI05-0153-3} The function Get_CPU returns the processor on
@@ -98425,7 +101826,7 @@ Example of interrupt handlers:
                    _Incompatibilities With Ada 2005_
 
 28.b/3
-          {AI05-0167-1AI05-0167-1} Functions Get_CPU is added to
+          {AI05-0167-1AI05-0167-1} Function Get_CPU is added to
           Interrupts.  If Interrupts is referenced in a use_clause, and
           an entity E with a defining_identifier of Get_CPU is defined
           in a package that is also referenced in a use_clause, the
@@ -98448,7 +101849,7 @@ pragma (see *note 10.2.1::).]
 2
 The implementation shall not incur any run-time overhead for the
 elaboration checks of subprograms and protected_bodies declared in
-preelaborated library units.
+preelaborated library units. 
 
 3
 The implementation shall not execute any memory write operations after
@@ -98456,7 +101857,7 @@ load time for the elaboration of constant objects 
declared immediately
 within the declarative region of a preelaborated library package, so
 long as the subtype and initial expression (or default initial
 expressions if initialized by default) of the object_declaration satisfy
-the following restrictions.  The meaning of load time is implementation
+the following restrictions. The meaning of load time is implementation
 defined.
 
 3.a
@@ -98581,12 +101982,35 @@ Requirements.
 
 File: aarm2012.info,  Node: C.5,  Next: C.6,  Prev: C.4,  Up: Annex C
 
-C.5 Pragma Discard_Names
+C.5 Aspect Discard_Names
 ========================
 
-1
-[A pragma Discard_Names may be used to request a reduction in storage
-used for the names of certain entities.]
+1/4
+{AI12-0072-1AI12-0072-1} [Specifying the aspect Discard_Names can be
+used to request a reduction in storage used for the names of entities
+with runtime name text.]
+
+                          _Static Semantics_
+
+1.1/4
+{AI12-0072-1AI12-0072-1} An entity with runtime name text is a
+nonderived enumeration first subtype, a tagged first subtype, or an
+exception.
+
+1.2/4
+{AI12-0072-1AI12-0072-1} For an entity with runtime name text, the
+following language-defined representation aspect may be specified:
+
+1.3/4
+Discard_Names
+               The type of aspect Discard_Names is Boolean.  If directly
+               specified, the aspect_definition shall be a static
+               expression.  If not specified (including by inheritance),
+               the aspect is False.
+
+1.a.1/4
+          Aspect Description for Discard_Names: Requests a reduction in
+          storage for names associated with an entity.
 
                                _Syntax_
 
@@ -98599,18 +102023,29 @@ used for the names of certain entities.]
 4
      A pragma Discard_Names is allowed only immediately within a
      declarative_part, immediately within a package_specification, or as
-     a configuration pragma.  
+     a configuration pragma. 
 
                            _Legality Rules_
 
-5
-The local_name (if present) shall denote a nonderived enumeration
-[first] subtype, a tagged [first] subtype, or an exception.  The pragma
-applies to the type or exception.  Without a local_name, the pragma
-applies to all such entities declared after the pragma, within the same
-declarative region.  Alternatively, the pragma can be used as a
-configuration pragma.  If the pragma applies to a type, then it applies
-also to all descendants of the type.
+5/4
+{AI12-0072-1AI12-0072-1} The local_name (if present) shall denote an
+entity with runtime name text.  The pragma specifies that the aspect
+Discard_Names for the type or exception has the value True.  Without a
+local_name, the pragma specifies that all entities with runtime name
+text declared after the pragma, within the same declarative region have
+the value True for aspect Discard_Names.  Alternatively, the pragma can
+be used as a configuration pragma.  If the configuration pragma
+Discard_Names applies to a compilation unit, all entities with runtime
+name text declared in the compilation unit have the value True for the
+aspect Discard_Names..
+
+5.a/4
+          Ramification: {AI12-0072-1AI12-0072-1} If the aspect is
+          specified for a type, then it is inherited by all descendants
+          of the type.  The aspect cannot be specified as False on a
+          derived type (because specifying the aspect is not allowed on
+          derived enumeration types, and by rule applying to all aspects
+          for other types (see *note 13.1.1::)).
 
                           _Static Semantics_
 
@@ -98618,77 +102053,77 @@ also to all descendants of the type.
 If a local_name is given, then a pragma Discard_Names is a
 representation pragma.
 
-6.a/3
-          Ramification: {AI05-0229-1AI05-0229-1} Representation pragmas
-          automatically specify aspects of the same name, so
-          Discard_Names can be used as an aspect_mark in an
-          aspect_specification instead of using the pragma on individual
-          entities.
-
-7/2
-{AI95-00285-01AI95-00285-01} {AI95-00400-01AI95-00400-01} If the pragma
-applies to an enumeration type, then the semantics of the
-Wide_Wide_Image and Wide_Wide_Value attributes are implementation
-defined for that type[; the semantics of Image, Wide_Image, Value, and
-Wide_Value are still defined in terms of Wide_Wide_Image and
-Wide_Wide_Value].  In addition, the semantics of Text_IO.Enumeration_IO
-are implementation defined.  If the pragma applies to a tagged type,
-then the semantics of the Tags.Wide_Wide_Expanded_Name function are
-implementation defined for that type[; the semantics of
-Tags.Expanded_Name and Tags.Wide_Expanded_Name are still defined in
-terms of Tags.Wide_Wide_Expanded_Name].  If the pragma applies to an
-exception, then the semantics of the Exceptions.Wide_Wide_Exception_Name
-function are implementation defined for that exception[; the semantics
-of Exceptions.Exception_Name and Exceptions.Wide_Exception_Name are
-still defined in terms of Exceptions.Wide_Wide_Exception_Name].
-
-7.a
-          Implementation defined: The semantics of pragma Discard_Names.
+6.a/4
+          This paragraph was deleted.{AI05-0229-1AI05-0229-1}
+          {AI12-0072-1AI12-0072-1}
+
+7/4
+{AI95-00285-01AI95-00285-01} {AI95-00400-01AI95-00400-01}
+{AI12-0072-1AI12-0072-1} If the aspect Discard_Names is True for an
+enumeration type, then the semantics of the Wide_Wide_Image and
+Wide_Wide_Value attributes are implementation defined for that type[;
+the semantics of Image, Wide_Image, Value, and Wide_Value are still
+defined in terms of Wide_Wide_Image and Wide_Wide_Value].  In addition,
+the semantics of Text_IO.Enumeration_IO are implementation defined.  If
+the aspect Discard_Names is True for a tagged type, then the semantics
+of the Tags.Wide_Wide_Expanded_Name function are implementation defined
+for that type[; the semantics of Tags.Expanded_Name and
+Tags.Wide_Expanded_Name are still defined in terms of
+Tags.Wide_Wide_Expanded_Name].  If the aspect Discard_Names is True for
+an exception, then the semantics of the
+Exceptions.Wide_Wide_Exception_Name function are implementation defined
+for that exception[; the semantics of Exceptions.Exception_Name and
+Exceptions.Wide_Exception_Name are still defined in terms of
+Exceptions.Wide_Wide_Exception_Name].
+
+7.a/4
+          Implementation defined: The semantics of some attributes and
+          functions of an entity for which aspect Discard_Names is True.
 
 7.b
           Ramification: The Width attribute is still defined in terms of
           Image.
 
-7.c/2
-          {AI95-00285-01AI95-00285-01} The semantics of
-          S'Wide_Wide_Image and S'Wide_Wide_Value are implementation
-          defined for any subtype of an enumeration type to which the
-          pragma applies.  (The pragma actually names the first subtype,
-          of course.)
+7.c/4
+          {AI95-00285-01AI95-00285-01} {AI12-0072-1AI12-0072-1} The
+          semantics of S'Wide_Wide_Image and S'Wide_Wide_Value are
+          implementation defined for any subtype of an enumeration type
+          for which the aspect is True.  (The pragma, if used, actually
+          names the first subtype, of course.)
 
                         _Implementation Advice_
 
-8
-If the pragma applies to an entity, then the implementation should
-reduce the amount of storage used for storing names associated with that
-entity.
+8/4
+{AI12-0072-1AI12-0072-1} If the aspect Discard_Names is True for an
+entity, then the implementation should reduce the amount of storage used
+for storing names associated with that entity.
 
-8.a/2
-          Implementation Advice: If pragma Discard_Names applies to an
+8.a/4
+          Implementation Advice: If aspect Discard_Names is True for an
           entity, then the amount of storage used for storing names
           associated with that entity should be reduced.
 
 8.b
           Reason: A typical implementation of the Image attribute for
           enumeration types is to store a table containing the names of
-          all the enumeration literals.  Pragma Discard_Names allows the
+          all the enumeration literals.  Aspect Discard_Names allows the
           implementation to avoid storing such a table without having to
           prove that the Image attribute is never used (which can be
           difficult in the presence of separate compilation).
 
 8.c
-          We did not specify the semantics of the Image attribute in the
-          presence of this pragma because different semantics might be
-          desirable in different situations.  In some cases, it might
+          We did not specify the semantics of the Image attribute when
+          aspect Discard_Names is True because different semantics might
+          be desirable in different situations.  In some cases, it might
           make sense to use the Image attribute to print out a useful
           value that can be used to identify the entity given
           information in compiler-generated listings.  In other cases,
           it might make sense to get an error at compile time or at run
           time.  In cases where memory is plentiful, the simplest
-          implementation makes sense: ignore the pragma.
+          implementation makes sense: ignore the aspect.
           Implementations that are capable of avoiding the extra storage
           in cases where the Image attribute is never used might also
-          wish to ignore the pragma.
+          wish to ignore the aspect.
 
 8.d
           The same applies to the Tags.Expanded_Name and
@@ -98702,6 +102137,17 @@ entity.
           value functions are now the master versions that the others
           are defined from.
 
+                    _Wording Changes from Ada 2012_
+
+8.f/4
+          {AI12-0072-1AI12-0072-1} Corrigendum: Defined the pragma in
+          terms of the aspect Discard_Names, and added a missing
+          definition of the meaning of the configuration pragma.  This
+          is not intended to make any semantic change (Ada 2012 has an
+          aspect Discard_Names defined via blanket rules for
+          representation pragmas in *note 13.1:: and *note 13.1.1::),
+          just to clarify the meaning.
+
 
 File: aarm2012.info,  Node: C.6,  Next: C.7,  Prev: C.5,  Up: Annex C
 
@@ -98810,11 +102256,12 @@ object of a volatile type.  In addition, every 
atomic type or object is
 also defined to be volatile.  Finally, if an object is volatile, then so
 are all of its subcomponents [(the same does not apply to atomic)].
 
-8.1/3
-{AI05-0009-1AI05-0009-1} {AI05-0229-1AI05-0229-1} When True, the aspects
-Independent and Independent_Components specify as independently
-addressable the named object or component(s), or in the case of a type,
-all objects or components of that type.  All atomic objects are
+8.1/4
+{AI05-0009-1AI05-0009-1} {AI05-0229-1AI05-0229-1}
+{AI12-0001-1AI12-0001-1} When True, the aspects Independent and
+Independent_Components specify as independently addressable the named
+object or component(s), or in the case of a type, all objects or
+components of that type.  All atomic objects and aliased objects are
 considered to be specified as independently addressable.
 
 8.a/3
@@ -98842,18 +102289,19 @@ Features".
 for a full_type_declaration, the declaration shall be that of an array
 or record type.
 
-10/3
-{AI05-0229-1AI05-0229-1} It is illegal to specify either of the aspects
-Atomic or Atomic_Components to have the value True for an object or type
-if the implementation cannot support the indivisible reads and updates
-required by the aspect (see below).
+10/4
+{AI05-0229-1AI05-0229-1} {AI12-0001-1AI12-0001-1} It is illegal to
+specify either of the aspects Atomic or Atomic_Components to have the
+value True for an object or type if the implementation cannot support
+the indivisible and independent reads and updates required by the aspect
+(see below).
 
-11
-It is illegal to specify the Size attribute of an atomic object, the
-Component_Size attribute for an array type with atomic components, or
-the layout attributes of an atomic component, in a way that prevents the
-implementation from performing the required indivisible reads and
-updates.
+11/4
+{AI12-0001-1AI12-0001-1} It is illegal to specify the Size attribute of
+an atomic object, the Component_Size attribute for an array type with
+atomic components, or the layout attributes of an atomic component, in a
+way that prevents the implementation from performing the required
+indivisible and independent reads and updates.
 
 12/3
 {AI05-0142-4AI05-0142-4} {AI05-0218-1AI05-0218-1} If an atomic object is
@@ -99045,18 +102493,13 @@ or volatile objects other than those specified by 
the program.
              * Reordering of stores to volatile variables: V1:= X; V2:=
                X; should not translate to V2:=X; V1:= X;
 
-21/3
-{AI05-0229-1AI05-0229-1} If the Pack aspect is True for a type any of
-whose subcomponents are atomic, the implementation shall not pack the
-atomic subcomponents more tightly than that for which it can support
-indivisible reads and updates.
+21/4
+This paragraph was deleted.{AI05-0229-1AI05-0229-1}
+{AI12-0001-1AI12-0001-1}
 
-21.a/3
-          Implementation Note: {AI05-0009-1AI05-0009-1} Usually,
-          specifying aspect Pack for such a type will be illegal as the
-          Recommended Level of Support cannot be achieved; otherwise, a
-          warning might be appropriate if no packing whatsoever can be
-          achieved.
+21.a/4
+          This paragraph was deleted.{AI05-0009-1AI05-0009-1}
+          {AI12-0001-1AI12-0001-1}
 
                         _Implementation Advice_
 
@@ -99103,30 +102546,35 @@ where possible, be implemented by a single load or 
store instruction.
      (i.e.  read-only) with respect to other parts of the Ada program,
      but can still be modified by an "external source."
 
+25/4
+     10  {AI12-0001-1AI12-0001-1} Specifying the Pack aspect cannot
+     override the effect of specifying an Atomic or Atomic_Components
+     aspect.
+
                     _Incompatibilities With Ada 83_
 
-24.a
+25.a
           Pragma Atomic replaces Ada 83's pragma Shared.  The name
           "Shared" was confusing, because the pragma was not used to
           mark variables as shared.
 
                      _Wording Changes from Ada 95_
 
-24.b/2
+25.b/2
           {AI95-00259-01AI95-00259-01} Added Implementation Advice to
           clarify the meaning of Atomic and Volatile in machine terms.
           The documentation that this advice applies will make the use
           of Ada implementations more predictable for low-level (such as
           device register) programming.
 
-24.c/2
+25.c/2
           {AI95-00272-01AI95-00272-01} Added wording to clarify that a
           slice of an object of an atomic type is not atomic, just like
           a component of an atomic type is not (necessarily) atomic.
 
                    _Incompatibilities With Ada 2005_
 
-24.d/3
+25.d/3
           {AI05-0218-1AI05-0218-1} Correction: Plugged a hole involving
           volatile components of formal types when the formal type's
           component has a nonvolatile type.  This was done by making
@@ -99135,12 +102583,12 @@ where possible, be implemented by a single load or 
store instruction.
 
                        _Extensions to Ada 2005_
 
-24.e/3
+25.e/3
           {AI05-0009-1AI05-0009-1} {AI05-0229-1AI05-0229-1} Aspects
           Independent and Independent_Components are new; they eliminate
           ambiguity about independent addressability.
 
-24.f/3
+25.f/3
           {AI05-0229-1AI05-0229-1} Aspects Atomic, Atomic_Components,
           Volatile, and Volatile_Components are new; pragmas Atomic,
           Atomic_Components, Volatile, and Volatile_Components are now
@@ -99148,7 +102596,7 @@ where possible, be implemented by a single load or 
store instruction.
 
                     _Wording Changes from Ada 2005_
 
-24.g/3
+25.g/3
           {AI05-0117-1AI05-0117-1} {AI05-0275-1AI05-0275-1} Revised the
           definition of volatile to eliminate overspecification and
           simply focus on the root requirement (that all tasks see the
@@ -99157,12 +102605,19 @@ where possible, be implemented by a single load or 
store instruction.
           kept consistent.  Moreover, it is difficult to imagine a
           program that could tell the difference.
 
-24.h/3
+25.h/3
           {AI05-0142-4AI05-0142-4} Added wording to take explicitly
           aliased parameters (see *note 6.1::) into account when
           determining the legality of parameter passing of volatile and
           atomic objects.
 
+                    _Wording Changes from Ada 2012_
+
+25.i/4
+          {AI12-0001-1AI12-0001-1} Corrigendum: Clarified that aliased
+          objects are considered to be specified as independently
+          addressable, and also eliminated an unnecessary rule.
+
 
 File: aarm2012.info,  Node: C.7,  Prev: C.6,  Up: Annex C
 
@@ -99309,7 +102764,7 @@ Abort_Task is a potentially blocking operation (see 
*note 9.5.1::).
 17/3
 {AI95-00237-01AI95-00237-01} {AI05-0004-1AI05-0004-1} It is a bounded
 error to call the Current_Task function from an entry_body, interrupt
-handler, or finalization of a task attribute.  Program_Error is raised,
+handler, or finalization of a task attribute. Program_Error is raised,
 or an implementation-defined value of the type Task_Id is returned.
 
 17.a/2
@@ -99351,13 +102806,13 @@ from an entry body or interrupt handler.
      NOTES
 
 20
-     10  This package is intended for use in writing user-defined task
+     11  This package is intended for use in writing user-defined task
      scheduling packages and constructing server tasks.  Current_Task
      can be used in conjunction with other operations requiring a task
      as an argument such as Set_Priority (see *note D.5::).
 
 21
-     11  The function Current_Task and the attribute Caller can return a
+     12  The function Current_Task and the attribute Caller can return a
      Task_Id value that identifies the environment task.
 
                         _Extensions to Ada 95_
@@ -99462,7 +102917,7 @@ the Val parameter is replaced with Initial_Value.
 
 13
 For all the operations declared in this package, Tasking_Error is raised
-if the task identified by T is terminated.  Program_Error is raised if
+if the task identified by T is terminated. Program_Error is raised if
 the value of T is Null_Task_Id.
 
 13.1/2
@@ -99706,13 +103161,13 @@ possible after task termination.
      NOTES
 
 31
-     12  An attribute always exists (after instantiation), and has the
+     13  An attribute always exists (after instantiation), and has the
      initial value.  It need not occupy memory until the first operation
      that potentially changes the attribute value.  The same holds true
      after Reinitialize.
 
 32
-     13  The result of the Reference function should be used with care;
+     14  The result of the Reference function should be used with care;
      it is always safe to use that result in the task body whose
      attribute is being accessed.  However, when the result is being
      used by another task, the programmer must make sure that the task
@@ -100123,14 +103578,14 @@ evaluation of another task's active priority.
 Interrupt_Priority aspect for a protected type or
 single_protected_declaration is discussed in *note D.3::.
 
-17/3
-{AI05-0229-1AI05-0229-1} The expression specified for the Priority or
-Interrupt_Priority aspect of a task is evaluated for each task object
-(see *note 9.1::).  For the Priority aspect, the value of the expression
-is converted to the subtype Priority; for the Interrupt_Priority aspect,
+17/4
+{AI05-0229-1AI05-0229-1} {AI12-0081-1AI12-0081-1} The expression
+specified for the Priority or Interrupt_Priority aspect of a task type
+is evaluated each time an object of the task type is created (see *note
+9.1::).  For the Priority aspect, the value of the expression is
+converted to the subtype Priority; for the Interrupt_Priority aspect,
 this value is converted to the subtype Any_Priority.  The priority value
-is then associated with the task object whose task declaration specifies
-the aspect.  
+is then associated with the task object. 
 
 18/3
 {AI05-0229-1AI05-0229-1} Likewise, the priority value is associated with
@@ -100248,6 +103703,13 @@ The range of System.Priority shall include at least 
30 values.
           Interrupt_Priority are new; pragmas Priority and
           Interrupt_Priority are now obsolescent.
 
+                    _Wording Changes from Ada 2012_
+
+29.h/4
+          {AI12-0081-1AI12-0081-1} Corrigendum: Clarified when the
+          Priority and Interrupt_Priority aspect expressions are
+          evaluated.
+
 
 File: aarm2012.info,  Node: D.2,  Next: D.3,  Prev: D.1,  Up: Annex D
 
@@ -100418,7 +103880,7 @@ corresponds to at least one task dispatching point.
      7  {AI05-0299-1AI05-0299-1} Clause *note 9:: specifies under which
      circumstances a task becomes ready.  The ready state is affected by
      the rules for task activation and termination, delay statements,
-     and entry calls.  When a task is not ready, it is said to be
+     and entry calls. When a task is not ready, it is said to be
      blocked.
 
 12
@@ -100479,6 +103941,15 @@ corresponds to at least one task dispatching point.
           entity E may no longer be use-visible, resulting in errors.
           This should be rare and is easily fixed if it does occur.
 
+17.c/4
+          {AI05-0166-1AI05-0166-1} {AI12-0005-1AI12-0005-1} Package
+          Dispatching was a Pure package, but now is Preelaborated with
+          the addition of Yield.  This is incompatible as Dispatching
+          can no longer be depended upon from a Pure package.  This
+          should happen rarely in practice as the only contents was the
+          exception Dispatching_Policy_Error and none of the child
+          packages that could raise that exception are pure.
+
 
 File: aarm2012.info,  Node: D.2.2,  Next: D.2.3,  Prev: D.2.1,  Up: D.2
 
@@ -100571,7 +104042,7 @@ Priority_Specific_Dispatching pragmas is 
FIFO_Within_Priorities.
 5/2
 {AI95-00355-01AI95-00355-01} A Task_Dispatching_Policy pragma is a
 configuration pragma.  A Priority_Specific_Dispatching pragma is a
-configuration pragma.  
+configuration pragma. 
 
 5.1/2
 {AI95-00355-01AI95-00355-01} The priority ranges specified in more than
@@ -100924,7 +104395,7 @@ is in effect, modifications to the ready queues occur 
only as follows:
 {AI05-0166-1AI05-0166-1} For this policy, blocking or termination of a
 task, a delay_statement, a call to Yield_To_Higher, and a call to
 Yield_To_Same_Or_Higher or Yield are the only task dispatching points
-(see *note D.2.1::).  
+(see *note D.2.1::). 
 
 9.a/3
           Ramification: {AI05-0166-1AI05-0166-1} A delay_statement is
@@ -101519,7 +104990,7 @@ pragma.  For implementation-defined locking policies, 
the meaning of the
 priority of a protected object is implementation defined.  If no
 Locking_Policy pragma applies to any of the program units comprising a
 partition, the locking policy for that partition, as well as the meaning
-of the priority of a protected object, are implementation defined.  
+of the priority of a protected object, are implementation defined. 
 
 6.a/2
           Implementation defined: The locking policy if no
@@ -101533,7 +105004,7 @@ protected object and converted to the subtype 
System.Any_Priority or
 System.Interrupt_Priority, respectively.  The value of the expression is
 the initial priority of the corresponding protected object.  If no
 Priority or Interrupt_Priority aspect is specified for a protected
-object, the initial priority is specified by the locking policy.  
+object, the initial priority is specified by the locking policy. 
 
 7
 There is one predefined locking policy, Ceiling_Locking; this policy is
@@ -101553,13 +105024,14 @@ defined as follows:
    * {AI95-00327-01AI95-00327-01} The initial ceiling priority of a
      protected object is equal to the initial priority for that object.
 
-10/3
-   * {AI95-00327-01AI95-00327-01} {AI05-0229-1AI05-0229-1} If an
-     Interrupt_Handler or Attach_Handler aspect (see *note C.3.1::) is
-     specified for a protected subprogram of a protected type that does
-     not have the Interrupt_Priority aspect specified, the initial
-     priority of protected objects of that type is implementation
-     defined, but in the range of the subtype System.Interrupt_Priority.
+10/4
+   * {AI95-00327-01AI95-00327-01} {AI05-0229-1AI05-0229-1}
+     {AI12-0051-1AI12-0051-1} If an Interrupt_Handler or Attach_Handler
+     aspect (see *note C.3.1::) is specified for a protected subprogram
+     of a protected type that does not have either the Priority or
+     Interrupt_Priority aspect specified, the initial priority of
+     protected objects of that type is implementation defined, but in
+     the range of the subtype System.Interrupt_Priority.
 
 10.a
           Implementation defined: Default ceiling priorities.
@@ -101587,7 +105059,7 @@ defined as follows:
 {AI95-00327-01AI95-00327-01} Following any change of priority, it is a
 bounded error for the active priority of any task with a call queued on
 an entry of a protected object to be higher than the ceiling priority of
-the protected object.  In this case one of the following applies:
+the protected object. In this case one of the following applies:
 
 13.2/2
    * at any time prior to executing the entry body Program_Error is
@@ -101756,6 +105228,14 @@ implementation-defined locking policies.
           Interrupt_Priority as pragmas Priority and Interrupt_Priority
           are now obsolescent.
 
+                    _Wording Changes from Ada 2012_
+
+23.f/4
+          {AI12-0051-1AI12-0051-1} Corrigendum: Clarified that the
+          Priority aspect can be used to set the initial ceiling
+          priority of a protected object that contains an interrupt
+          handler.
+
 
 File: aarm2012.info,  Node: D.4,  Next: D.5,  Prev: D.3,  Up: Annex D
 
@@ -102550,7 +106030,7 @@ No_Implicit_Heap_Allocations
 {AI95-00327-01AI95-00327-01} No_Dynamic_Priorities
                There are no semantic dependences on the package
                Dynamic_Priorities, and no occurrences of the attribute
-               Priority.  
+               Priority. 
 
 10/3
 {AI95-00305-01AI95-00305-01} {AI95-00394-01AI95-00394-01}
@@ -102565,22 +106045,54 @@ No_Implicit_Heap_Allocations
           and 'Address of any of these operations, as well as inherited
           versions of these operations.
 
-10.1/3
+10.1/4
+{AI12-0055-1AI12-0055-1} No_Dynamic_CPU_Assignment
+               No task has the CPU aspect specified to be a non-static
+               expression.  Each task (including the environment task)
+               that has the CPU aspect specified as Not_A_Specific_CPU
+               will be assigned to a particular implementation-defined
+               CPU. The same is true for the environment task when the
+               CPU aspect is not specified.  [Any other task without a
+               CPU aspect will activate and execute on the same
+               processor as its activating task.]
+
+10.b/4
+          Proof: The processor of a task without a CPU aspect is defined
+          in *note D.16::, and this restriction guarantees that the
+          activator always has a CPU assigned.
+
+10.c/4
+          Reason: This restriction prevents any migration of tasks.
+
+10.d/4
+          Ramification: If no CPU aspects are specified, then the
+          program will run on a single CPU, as all of the tasks will be
+          activated directly or indirectly by the environment task, and
+          the rules require the same CPU to be used as the activating
+          task.
+
+10.d.1/4
+          Implementation defined: When restriction
+          No_Dynamic_CPU_Assignment applies to a partition, the
+          processor on which a task with a CPU value of a
+          Not_A_Specific_CPU will execute.
+
+10.2/3
 {AI95-00305-01AI95-00305-01} {AI05-0013-1AI05-0013-1} 
 No_Local_Protected_Objects
                Protected objects are declared only at library level.
 
-10.2/3
+10.3/3
 {AI95-00297-01AI95-00297-01} {AI05-0013-1AI05-0013-1} 
 No_Local_Timing_Events
                Timing_Events are declared only at library level.
 
-10.3/2
+10.4/2
 {AI95-00305-01AI95-00305-01} No_Protected_Type_Allocators
                There are no allocators for protected types or types
                containing protected type subcomponents.
 
-10.4/3
+10.5/3
                {AI05-0224-1AI05-0224-1} In the case of an initialized
                allocator of an access type whose designated type is
                class-wide and limited, a check is made that the specific
@@ -102588,28 +106100,46 @@ No_Local_Timing_Events
                subcomponents.  Program_Error is raised if this check
                fails.
 
-10.5/3
+10.6/3
 {AI95-00305-01AI95-00305-01} {AI05-0211-1AI05-0211-1} No_Relative_Delay
                There are no delay_relative_statements, and there is no
                use of a name that denotes the Timing_Events.Set_Handler
                subprogram that has a Time_Span parameter.
 
-10.6/3
+10.7/3
 {AI95-00305-01AI95-00305-01} No_Requeue_Statements
                There are no requeue_statements.
 
-10.7/3
+10.8/3
 {AI95-00305-01AI95-00305-01} No_Select_Statements
                There are no select_statements.
 
-10.8/3
+10.9/3
 {AI95-00394-01AI95-00394-01} {AI05-0211-1AI05-0211-1} 
 No_Specific_Termination_Handlers
                There is no use of a name denoting the
                Set_Specific_Handler and Specific_Handler subprograms in
                Task_Termination.
 
-10.9/3
+10.10/4
+{AI12-0117-1AI12-0117-1} No_Tasks_Unassigned_To_CPU
+               The CPU aspect is specified for the environment task.  No
+               CPU aspect is specified to be statically equal to
+               Not_A_Specific_CPU. If aspect CPU is specified
+               (dynamically) to the value Not_A_Specific_CPU, then
+               Program_Error is raised.  If Set_CPU or
+               Delay_Until_And_Set_CPU are called with the CPU parameter
+               equal to Not_A_Specific_CPU, then Program_Error is
+               raised.
+
+10.e/4
+          Ramification: If this restriction is used in a context for
+          which restriction No_Dynamic_CPU_Assignment is in effect, then
+          no runtime check is needed when specifying the CPU aspect.  If
+          the restriction is used with the Ravenscar profile, no runtime
+          checks are needed.
+
+10.11/3
 {AI95-00305-01AI95-00305-01} {AI05-0013-1AI05-0013-1} Simple_Barriers
                The Boolean expression in each entry barrier is either a
                static expression or a name that statically denotes a
@@ -102637,7 +106167,7 @@ Max_Protected_Entries
                type.  The bounds of every entry family of a protected
                unit shall be static, or shall be defined by a
                discriminant of a subtype whose corresponding bound is
-               static.  
+               static. 
 
                           _Dynamic Semantics_
 
@@ -102872,6 +106402,19 @@ restrictions to produce a more efficient 
implementation.
           the compiler assumed the worst in the past (it is now a
           runtime check).
 
+                       _Extensions to Ada 2012_
+
+22.m/4
+          {AI12-0055-1AI12-0055-1} Corrigendum: Restriction
+          No_Dynamic_CPU_Assignment is newly added to Ada, for use as
+          part of the Ravenscar profile (see *note D.13::).
+
+22.n/4
+          {AI12-0117-1AI12-0117-1} Corrigendum: Restriction
+          No_Tasks_Unassigned_To_CPU is newly added to Ada; it ensures
+          that no task is running on an implementation-defined CPU so
+          that task scheduling can be analyzed.
+
 
 File: aarm2012.info,  Node: D.8,  Next: D.9,  Prev: D.7,  Up: Annex D
 
@@ -103041,7 +106584,7 @@ Time_Unit is the smallest amount of real time 
representable by the Time
 type; it is expressed in seconds.  Time_Span_Unit is the difference
 between two successive values of the Time type.  It is also the smallest
 positive value of type Time_Span.  Time_Unit and Time_Span_Unit
-represent the same real time duration.  A clock tick is a real time
+represent the same real time duration. A clock tick is a real time
 interval during which the clock value (as observed by calling the Clock
 function) remains constant.  Tick is the average length of such
 intervals.
@@ -103769,7 +107312,7 @@ The Is_Held function returns True if and only if T is 
in the held state.
 
 8
 As part of these operations, a check is made that the task identified by
-T is not terminated.  Tasking_Error is raised if the check fails.
+T is not terminated. Tasking_Error is raised if the check fails.
 Program_Error is raised if the value of T is Null_Task_Id.
 
                          _Erroneous Execution_
@@ -104002,13 +107545,14 @@ profile_pragma_argument_association (*note 2.8: 
S0020.)s.
 {AI95-00249-01AI95-00249-01} {AI05-0246-1AI05-0246-1} The usage profile
 Ravenscar is equivalent to the following set of pragmas:
 
-6/3
-     {AI95-00249-01AI95-00249-01} {AI95-00297-01AI95-00297-01} 
{AI95-00394-01AI95-00394-01} {AI05-0171-1AI05-0171-1} {AI05-0246-1AI05-0246-1} 
pragma Task_Dispatching_Policy (FIFO_Within_Priorities);
+6/4
+     {AI95-00249-01AI95-00249-01} {AI95-00297-01AI95-00297-01} 
{AI95-00394-01AI95-00394-01} {AI05-0171-1AI05-0171-1} {AI05-0246-1AI05-0246-1} 
{AI12-0055-1AI12-0055-1} {AI12-0073-1AI12-0073-1} pragma 
Task_Dispatching_Policy (FIFO_Within_Priorities);
      pragma Locking_Policy (Ceiling_Locking);
      pragma Detect_Blocking;
      pragma Restrictions (
                    No_Abort_Statements,
                    No_Dynamic_Attachment,
+                   No_Dynamic_CPU_Assignment,
                    No_Dynamic_Priorities,
                    No_Implicit_Heap_Allocations,
                    No_Local_Protected_Objects,
@@ -104029,6 +107573,7 @@ Ravenscar is equivalent to the following set of 
pragmas:
                    No_Dependence => Ada.Calendar,
                    No_Dependence => Ada.Execution_Time.Group_Budgets,
                    No_Dependence => Ada.Execution_Time.Timers,
+                   No_Dependence => Ada.Synchronous_Barriers,
                    No_Dependence => Ada.Task_Attributes,
                    No_Dependence => 
System.Multiprocessors.Dispatching_Domains);
 
@@ -104042,24 +107587,9 @@ Paragraph 7 was deleted.
 
                      _Implementation Requirements_
 
-8/3
-{AI05-0171-1AI05-0171-1} {AI05-0229-1AI05-0229-1} A task shall only be
-on the ready queues of one processor, and the processor to which a task
-belongs shall be defined statically.  Whenever a task running on a
-processor reaches a task dispatching point, it goes back to the ready
-queues of the same processor.  A task with a CPU value of
-Not_A_Specific_CPU will execute on an implementation defined processor.
-[A task without a CPU aspect will activate and execute on the same
-processor as its activating task.]
-
-8.a/3
-          Proof: The processor of a task without a CPU aspect is defined
-          in *note D.16::.
-
-8.a.1/3
-          Implementation defined: The processor on which a task with a
-          CPU value of a Not_A_Specific_CPU will execute when the
-          Ravenscar profile is in effect.
+8/4
+This paragraph was deleted.{AI05-0171-1AI05-0171-1}
+{AI05-0229-1AI05-0229-1} {AI12-0055-1AI12-0055-1}
 
                         _Implementation Advice_
 
@@ -104080,18 +107610,55 @@ separate and disjoint ready queues.
      to protected entry queues due to the accompanying restriction of
      Max_Task_Entries => 0.
 
+11/4
+     43  {AI12-0055-1AI12-0055-1} When the Ravenscar profile is in
+     effect (via the effect of the No_Dynamic_CPU_Assignment
+     restriction), all of the tasks in the partition will execute on a
+     single CPU unless the programmer explicitly uses aspect CPU to
+     specify the CPU assignments for tasks.  The use of multiple CPUs
+     requires care, as many guarantees of single CPU scheduling no
+     longer apply.
+
+12/4
+     44  {AI12-0055-1AI12-0055-1} It is not recommended to specify the
+     CPU of a task to be Not_A_Specific_CPU when the Ravenscar profile
+     is in effect.  How a partition executes strongly depends on the
+     assignment of tasks to CPUs.
+
                         _Extensions to Ada 95_
 
-10.a/3
+12.a/3
           {AI95-00249-01AI95-00249-01} {AI05-0246-1AI05-0246-1} The
           Ravenscar profile is new; it was moved here by Ada 2012.
 
                     _Wording Changes from Ada 2005_
 
-10.b/3
+12.b/3
           {AI05-0171-1AI05-0171-1} How Ravenscar behaves on a
           multiprocessor system is now defined.
 
+                   _Incompatibilities With Ada 2012_
+
+12.c/4
+          {AI05-0073-1AI05-0073-1} Corrigendum: The Ravenscar profile no
+          longer allows the use of package Synchronous_Barriers, as this
+          package violates the fundamental Ravenscar requirement that
+          each waiting point can only block (and release) a single task.
+          This is incompatible with the published Ada 2012 standard, but
+          it is unlikely that any existing Ravenscar runtime ever
+          usefully supported barriers.
+
+12.d/4
+          {AI05-0055-1AI05-0055-1} Corrigendum:The Ravenscar profile
+          (via the effect of the new restriction
+          No_Dynamic_CPU_Assignment) no longer allows setting the CPU
+          aspect of a task to a non-static value.  While this was
+          allowed, an implementation would have had to come up with a
+          creative interpretation of the Ada 2012 requirement to define
+          the association of tasks to processors statically.  As such,
+          the new check is more likely to catch bugs than break a
+          working program.
+
 
 File: aarm2012.info,  Node: D.14,  Next: D.15,  Prev: D.13,  Up: Annex D
 
@@ -104425,12 +107992,12 @@ type Timer needs finalization (see *note 7.6::).
 12/2
 {AI95-00307-01AI95-00307-01} An object of type Timer is said to be set
 if it is associated with a nonnull value of type Timer_Handler and
-cleared otherwise.  All Timer objects are initially cleared.  
+cleared otherwise.  All Timer objects are initially cleared. 
 
 13/2
 {AI95-00307-01AI95-00307-01} The type Timer_Handler identifies a
 protected procedure to be executed by the implementation when the timer
-expires.  Such a protected procedure is called a handler.  
+expires.  Such a protected procedure is called a handler. 
 
 13.a/2
           Discussion: Type Timer is tagged.  This makes it possible to
@@ -104562,7 +108129,7 @@ this limit is exceeded, then Timer_Resource_Error is 
raised.
      NOTES
 
 29/2
-     43  {AI95-00307-01AI95-00307-01} A Timer_Handler can be associated
+     45  {AI95-00307-01AI95-00307-01} A Timer_Handler can be associated
      with several Timer objects.
 
                         _Extensions to Ada 95_
@@ -104659,14 +108226,14 @@ associated nonnegative value of type Time_Span 
known as its budget,
 which is initially Time_Span_Zero.  The type Group_Budget_Handler
 identifies a protected procedure to be executed by the implementation
 when the budget is exhausted, that is, reaches zero.  Such a protected
-procedure is called a handler.  
+procedure is called a handler. 
 
 15/2
 {AI95-00354-01AI95-00354-01} An object of type Group_Budget also
 includes a handler, which is a value of type Group_Budget_Handler.  The
 handler of the object is said to be set if it is not null and cleared
 otherwise.  The handler of all Group_Budget objects is initially
-cleared.  
+cleared. 
 
 15.a/2
           Discussion: Type Group_Budget is tagged.  This makes it
@@ -104816,13 +108383,13 @@ of the handler.
      NOTES
 
 37/2
-     44  {AI95-00354-01AI95-00354-01} Clearing or setting of the handler
+     46  {AI95-00354-01AI95-00354-01} Clearing or setting of the handler
      of a group budget does not change the current value of the budget.
      Exhaustion or loading of a budget does not change whether the
      handler of the group budget is set or cleared.
 
 38/2
-     45  {AI95-00354-01AI95-00354-01} A Group_Budget_Handler can be
+     47  {AI95-00354-01AI95-00354-01} A Group_Budget_Handler can be
      associated with several Group_Budget objects.
 
                         _Extensions to Ada 95_
@@ -104964,12 +108531,12 @@ finalization (see *note 7.6::).
 {AI95-00297-01AI95-00297-01} An object of type Timing_Event is said to
 be set if it is associated with a nonnull value of type
 Timing_Event_Handler and cleared otherwise.  All Timing_Event objects
-are initially cleared.  
+are initially cleared. 
 
 10/2
 {AI95-00297-01AI95-00297-01} The type Timing_Event_Handler identifies a
 protected procedure to be executed by the implementation when the timing
-event occurs.  Such a protected procedure is called a handler.  
+event occurs.  Such a protected procedure is called a handler. 
 
 10.a/2
           Discussion: Type Timing_Event is tagged.  This makes it
@@ -105147,12 +108714,12 @@ executed directly by the real-time clock interrupt 
mechanism.
      NOTES
 
 26/2
-     46  {AI95-00297-01AI95-00297-01} Since a call of Set_Handler is not
+     48  {AI95-00297-01AI95-00297-01} Since a call of Set_Handler is not
      a potentially blocking operation, it can be called from within a
      handler.
 
 27/2
-     47  {AI95-00297-01AI95-00297-01} A Timing_Event_Handler can be
+     49  {AI95-00297-01AI95-00297-01} A Timing_Event_Handler can be
      associated with several Timing_Event objects.
 
                         _Extensions to Ada 95_
@@ -105242,11 +108809,12 @@ interface type.
 
                           _Dynamic Semantics_
 
-11/3
-{AI05-0171-1AI05-0171-1} {AI05-0229-1AI05-0229-1} The expression
-specified for the CPU aspect of a task is evaluated for each task object
+11/4
+{AI05-0171-1AI05-0171-1} {AI05-0229-1AI05-0229-1}
+{AI12-0081-1AI12-0081-1} The expression specified for the CPU aspect of
+a task type is evaluated each time an object of the task type is created
 (see *note 9.1::).  The CPU value is then associated with the task
-object whose task declaration specifies the aspect.
+object.
 
 12/3
 {AI05-0171-1AI05-0171-1} {AI05-0229-1AI05-0229-1} The CPU aspect has no
@@ -105282,6 +108850,12 @@ task is defined to have failed, and it becomes a 
completed task (see
           {AI05-0171-1AI05-0171-1} {AI05-0229-1AI05-0229-1} The package
           System.Multiprocessors and the CPU aspect are new.
 
+                    _Wording Changes from Ada 2012_
+
+14.b/4
+          {AI12-0081-1AI12-0081-1} Corrigendum: Clarified when the CPU
+          aspect expression is evaluated.
+
 * Menu:
 
 * D.16.1 ::   Multiprocessor Dispatching Domains
@@ -105317,14 +108891,23 @@ exists:
 6/3
         System_Dispatching_Domain : constant Dispatching_Domain;
 
-7/3
-        function Create (First, Last : CPU) return Dispatching_Domain;
+7/4
+     {AI12-0033-1AI12-0033-1}    function Create (First : CPU; Last : 
CPU_Range) return Dispatching_Domain;
 
 8/3
         function Get_First_CPU (Domain : Dispatching_Domain) return CPU;
 
-9/3
-        function Get_Last_CPU  (Domain : Dispatching_Domain) return CPU;
+9/4
+     {AI12-0033-1AI12-0033-1}    function Get_Last_CPU  (Domain : 
Dispatching_Domain) return CPU_Range;
+
+9.1/4
+     {AI12-0033-1AI12-0033-1}    type CPU_Set is array(CPU range <>) of 
Boolean;
+
+9.2/4
+     {AI12-0033-1AI12-0033-1}    function Create (Set : CPU_Set) return 
Dispatching_Domain;
+
+9.3/4
+     {AI12-0033-1AI12-0033-1}    function Get_CPU_Set (Domain : 
Dispatching_Domain) return CPU_Set;
 
 10/3
         function Get_Dispatching_Domain
@@ -105360,13 +108943,14 @@ exists:
         ... -- not specified by the language
      end System.Multiprocessors.Dispatching_Domains;
 
-16/3
-{AI05-0167-1AI05-0167-1} The type Dispatching_Domain represents a series
-of processors on which a task may execute.  Each processor is contained
-within exactly one Dispatching_Domain.  System_Dispatching_Domain
-contains the processor or processors on which the environment task
-executes.  At program start-up all processors are contained within
-System_Dispatching_Domain.
+16/4
+{AI05-0167-1AI05-0167-1} {AI12-0082-1AI12-0082-1} A dispatching domain
+represents a set of processors on which a task may execute.  Each
+processor is contained within exactly one dispatching domain.  An object
+of type Dispatching_Domain identifies a dispatching domain.
+System_Dispatching_Domain identifies a domain that contains the
+processor or processors on which the environment task executes.  At
+program start-up all processors are contained within this domain.
 
 17/3
 {AI05-0167-1AI05-0167-1} For a task type (including the anonymous type
@@ -105393,85 +108977,98 @@ specified for a task interface.
 
                           _Dynamic Semantics_
 
-20/3
-{AI05-0167-1AI05-0167-1} The expression specified for the
-Dispatching_Domain aspect of a task is evaluated for each task object
-(see *note 9.1::).  The Dispatching_Domain value is then associated with
-the task object whose task declaration specifies the aspect.
+20/4
+{AI05-0167-1AI05-0167-1} {AI12-0033-1AI12-0033-1} The expression
+specified for the Dispatching_Domain aspect of a task type is evaluated
+each time an object of the task type is created (see *note 9.1::).  If
+the identified dispatching domain is empty, then
+Dispatching_Domain_Error is raised; otherwise the newly created task is
+assigned to the domain identified by the value of the expression.
 
 21/3
 {AI05-0167-1AI05-0167-1} If a task is not explicitly assigned to any
 domain, it is assigned to that of the activating task.  A task always
 executes on some CPU in its domain.
 
-22/3
-{AI05-0167-1AI05-0167-1} If both Dispatching_Domain and CPU are
-specified for a task, and the CPU value is not contained within the
-range of processors for the domain (and is not Not_A_Specific_CPU), the
-activation of the task is defined to have failed, and it becomes a
-completed task (see *note 9.2::).
-
-23/3
-{AI05-0167-1AI05-0167-1} The function Create creates and returns a
-Dispatching_Domain containing all the processors in the range First ..
-Last.  These processors are removed from System_Dispatching_Domain.  A
-call of Create will raise Dispatching_Domain_Error if any designated
-processor is not currently in System_Dispatching_Domain, or if the
-system cannot support a distinct domain over the processors identified,
-or if a processor has a task assigned to it, or if the allocation would
-leave System_Dispatching_Domain empty.  A call of Create will raise
+22/4
+{AI05-0167-1AI05-0167-1} {AI12-0082-1AI12-0082-1} If both the
+dispatching domain and CPU are specified for a task, and the CPU value
+is not contained within the set of processors for the domain (and is not
+Not_A_Specific_CPU), the activation of the task is defined to have
+failed, and it becomes a completed task (see *note 9.2::).
+
+23/4
+{AI05-0167-1AI05-0167-1} {AI12-0033-1AI12-0033-1} The function Create
+with First and Last parameters creates and returns a dispatching domain
+containing all the processors in the range First ..  Last.  The function
+Create with a Set parameter creates and returns a dispatching domain
+containing the processors for which Set(I) is True.  These processors
+are removed from System_Dispatching_Domain.  A call of Create will raise
+Dispatching_Domain_Error if any designated processor is not currently in
+System_Dispatching_Domain, or if the system cannot support a distinct
+domain over the processors identified, or if a processor has a task
+assigned to it, or if the allocation would leave
+System_Dispatching_Domain empty.  A call of Create will raise
 Dispatching_Domain_Error if the calling task is not the environment
 task, or if Create is called after the call to the main subprogram.
 
-24/3
-{AI05-0167-1AI05-0167-1} The function Get_First_CPU returns the first
-CPU in Domain; Get_Last_CPU returns the last one.
-
-25/3
-{AI05-0167-1AI05-0167-1} The function Get_Dispatching_Domain returns the
-Dispatching_Domain on which the task is assigned.
-
-26/3
-{AI05-0167-1AI05-0167-1} {AI05-0278-1AI05-0278-1} A call of the
-procedure Assign_Task assigns task T to the CPU within
-Dispatching_Domain Domain.  Task T can now execute only on CPU unless
-CPU designates Not_A_Specific_CPU, in which case it can execute on any
-processor within Domain.  The exception Dispatching_Domain_Error is
-propagated if T is already assigned to a Dispatching_Domain other than
-System_Dispatching_Domain, or if CPU is not one of the processors of
-Domain (and is not Not_A_Specific_CPU). A call of Assign_Task is a task
-dispatching point for task T unless T is inside of a protected action,
-in which case the effect on task T is delayed until its next task
-dispatching point.  If T is the Current_Task the effect is immediate if
-T is not inside a protected action, otherwise the effect is as soon as
-practical.  Assigning a task to System_Dispatching_Domain that is
-already assigned to that domain has no effect.
-
-27/3
-{AI05-0167-1AI05-0167-1} {AI05-0278-1AI05-0278-1} A call of procedure
-Set_CPU assigns task T to the CPU. Task T can now execute only on CPU,
-unless CPU designates Not_A_Specific_CPU, in which case it can execute
-on any processor within its Dispatching_Domain.  The exception
-Dispatching_Domain_Error is propagated if CPU is not one of the
-processors of the Dispatching_Domain on which T is assigned (and is not
-Not_A_Specific_CPU). A call of Set_CPU is a task dispatching point for
-task T unless T is inside of a protected action, in which case the
+24/4
+{AI05-0167-1AI05-0167-1} {AI12-0033-1AI12-0033-1} The function
+Get_First_CPU returns the first CPU in Domain, or CPU'First if Domain is
+empty; Get_Last_CPU returns the last CPU in Domain, or CPU_Range'First
+if Domain is empty.  The function Get_CPU_Set(D) returns an array whose
+low bound is Get_First_CPU(D), whose high bound is Get_Last_CPU(D), with
+True values in the Set corresponding to the CPUs that are in the given
+Domain.
+
+25/4
+{AI05-0167-1AI05-0167-1} {AI12-0082-1AI12-0082-1} The function
+Get_Dispatching_Domain returns the dispatching domain on which the task
+is assigned.
+
+26/4
+{AI05-0167-1AI05-0167-1} {AI05-0278-1AI05-0278-1}
+{AI12-0033-1AI12-0033-1} A call of the procedure Assign_Task assigns
+task T to the CPU within the dispatching domain Domain.  Task T can now
+execute only on CPU, unless CPU designates Not_A_Specific_CPU in which
+case it can execute on any processor within Domain.  The exception
+Dispatching_Domain_Error is propagated if Domain is empty, T is already
+assigned to a dispatching domain other than System_Dispatching_Domain,
+or if CPU is not one of the processors of Domain (and is not
+Not_A_Specific_CPU). A call of Assign_Task is a task dispatching point
+for task T unless T is inside of a protected action, in which case the
 effect on task T is delayed until its next task dispatching point.  If T
 is the Current_Task the effect is immediate if T is not inside a
 protected action, otherwise the effect is as soon as practical.
+Assigning a task already assigned to System_Dispatching_Domain to that
+domain has no effect.
+
+27/4
+{AI05-0167-1AI05-0167-1} {AI05-0278-1AI05-0278-1}
+{AI12-0082-1AI12-0082-1} A call of procedure Set_CPU assigns task T to
+the CPU. Task T can now execute only on CPU, unless CPU designates
+Not_A_Specific_CPU, in which case it can execute on any processor within
+its dispatching domain.  The exception Dispatching_Domain_Error is
+propagated if CPU is not one of the processors of the dispatching domain
+on which T is assigned (and is not Not_A_Specific_CPU). A call of
+Set_CPU is a task dispatching point for task T unless T is inside of a
+protected action, in which case the effect on task T is delayed until
+its next task dispatching point.  If T is the Current_Task the effect is
+immediate if T is not inside a protected action, otherwise the effect is
+as soon as practical.
 
 28/3
 {AI05-0167-1AI05-0167-1} The function Get_CPU returns the processor
 assigned to task T, or Not_A_Specific_CPU if the task is not assigned to
 a processor.
 
-29/3
-{AI05-0167-1AI05-0167-1} A call of Delay_Until_And_Set_CPU delays the
-calling task for the designated time and then assigns the task to the
-specified processor when the delay expires.  The exception
-Dispatching_Domain_Error is propagated if P is not one of the processors
-of the calling task's Dispatching_Domain (and is not
-Not_A_Specific_CPU).
+29/4
+{AI05-0167-1AI05-0167-1} {AI12-0082-1AI12-0082-1} A call of
+Delay_Until_And_Set_CPU delays the calling task for the designated time
+and then assigns the task to the specified processor when the delay
+expires.  The exception Dispatching_Domain_Error is propagated if P is
+not one of the processors of the calling task's dispatching domain (and
+is not Not_A_Specific_CPU).
 
                      _Implementation Requirements_
 
@@ -105481,6 +109078,35 @@ Assign_Task, Set_CPU, Get_CPU and 
Delay_Until_And_Set_CPU atomically
 with respect to any of these operations on the same dispatching_domain,
 processor or task.
 
+30.1/4
+{AI12-0048-1AI12-0048-1} Any task that belongs to the system dispatching
+domain can execute on any CPU within that domain, unless the assignment
+of the task has been specified.
+
+30.a/4
+          Reason: This ensures that priorities and deadlines are
+          respected within the system dispatching domain.  There is no
+          such guarantee between different domains.
+
+30.b/4
+          We only need to talk about the system dispatching domain here,
+          because Assign_Task and Set_CPU already have such wording for
+          tasks that are assigned explicitly to a dispatching domain and
+          specify Not_a_Specific_CPU.
+
+30.c/4
+          Ramification: If no dispatching domains are created, all tasks
+          can execute on all processors.  (As always,
+          implementation-defined dispatching policies may have other
+          rules, so a partition that does not specify any
+          language-defined dispatching policy may do anything at all and
+          in particular does not need to follow this rule.
+
+30.d/4
+          Discussion: A task can be assigned to a specific CPU by
+          specifying the aspect CPU for a task, or by calling a dynamic
+          operation like Set_CPU or Assign_Task.
+
                         _Implementation Advice_
 
 31/3
@@ -105491,6 +109117,12 @@ and disjoint ready queues.
           Implementation Advice: Each dispatching domain should have
           separate and disjoint ready queues.
 
+31.b/4
+          To be honest: {AI12-0048-1AI12-0048-1} "Ready queue" here
+          doesn't mean the conceptual "ready queue" as defined in *note
+          D.2.1:: (one per processor); this rule is talking about the
+          ready queues used by the implementation.
+
                      _Documentation Requirements_
 
 32/3
@@ -105519,6 +109151,53 @@ Dispatching_Domain_Error if an attempt is made to 
exceed this number.
           System.Multiprocessors.Dispatching_Domains and the aspect
           Dispatching_Domains are new.
 
+                    _Inconsistencies With Ada 2012_
+
+33.b/4
+          {AI12-0033-1AI12-0033-1} Corrigendum: We now explicitly allow
+          empty dispatching domains, as it would be difficult to avoid
+          declaring them when a system is configured at runtime.
+          Therefore, assigning a task to an empty domain now raises
+          Dispatching_Domain_Error; creating such a domain should not
+          raise Dispatching_Domain_Error.  If an implementation does
+          something different in these cases, and a program depends on
+          that difference, the program could malfunction.  This seems
+          very unlikely (if no exception is ever raised, the task
+          assigned to the empty domain could never run; if the exception
+          is raised earlier, the program can't do anything useful).
+
+                   _Incompatibilities With Ada 2012_
+
+33.c/4
+          {AI05-0033-1AI05-0033-1} Corrigendum: The subtypes of the
+          parameter or result of several routines were changed to
+          support empty domains.  These changes will cause rules
+          requiring subtype conformance to fail on these routines (such
+          as 'Access).  We believe such uses are unlikely.  In addition,
+          type CPU_Set and function Get_CPU_Set, along with an
+          overloaded Create are newly added to this package.  If
+          Multiprocessors.Dispatching_Domains is referenced in a
+          use_clause, and an entity E with the same defining_identifier
+          as a new entity in this package is defined in a package that
+          is also referenced in a use_clause, the entity E may no longer
+          be use-visible, resulting in errors.  This should be rare and
+          is easily fixed if it does occur.
+
+                    _Wording Changes from Ada 2012_
+
+33.d/4
+          {AI12-0048-1AI12-0048-1} Corrigendum: Added wording to clarify
+          that all tasks can execute on all CPUs of the system
+          dispatching domain by default.
+
+33.e/4
+          {AI12-0082-1AI12-0082-1} Corrigndum: Added a definition to
+          clarify that a "dispatching domain" is a concept which is
+          identified by an object of type Dispatching_Domain; more than
+          one object might identify the same dispatching domain (for
+          instance, the result of function Get_Dispatching_Domain is a
+          different object but identifies the same dispatching domain).
+
 
 File: aarm2012.info,  Node: Annex E,  Next: Annex F,  Prev: Annex D,  Up: Top
 
@@ -105631,7 +109310,7 @@ processing node.
 5
 The configuration of the partitions of a program onto a distributed
 system shall be consistent with the possibility for data references or
-calls between the partitions implied by their semantic dependences.  Any
+calls between the partitions implied by their semantic dependences. Any
 reference to data or call of a subprogram across partitions is called a
 remote access.
 
@@ -105693,7 +109372,7 @@ D'Partition_Id
 10/2
 {AI95-00226-01AI95-00226-01} It is a bounded error for there to be
 cyclic elaboration dependences between the active partitions of a single
-distributed program.  The possible effects, in each of the partitions
+distributed program. The possible effects, in each of the partitions
 involved, are deadlock during elaboration, or the raising of
 Communication_Error or Program_Error.
 
@@ -105792,8 +109471,8 @@ is called a shared passive library unit if the 
Shared_Passive aspect of
 the unit is True.   A library package or generic library package is
 called a remote types library unit if the Remote_Types aspect of the
 unit is True.   A library unit is called a remote call interface if the
-Remote_Call_Interface aspect of the unit is True.]  A normal library
-unit is one for which no categorization aspect is True.
+Remote_Call_Interface aspect of the unit is True.] A normal library unit
+is one for which no categorization aspect is True.
 
 4.a/3
           Proof: {AI05-0243-1AI05-0243-1} {AI05-0299-1AI05-0299-1} These
@@ -105957,11 +109636,12 @@ restrictions apply to such a library unit:
           here, so that limited views are allowed; those are not library
           units, but they are library_item.
 
-7/1
-   * {8652/00808652/0080} {AI95-00003-01AI95-00003-01} it shall not
-     contain a library-level declaration of an access type that
-     designates a class-wide type, task type, or protected type with
-     entry_declarations.
+7/4
+   * {8652/00808652/0080} {AI95-00003-01AI95-00003-01}
+     {AI12-0038-1AI12-0038-1} it shall not contain a library-level
+     declaration of an access type that designates a class-wide type,
+     nor a type with a part that is of a task type or protected type
+     with entry_declarations;
 
 7.a
           Reason: These kinds of access types are disallowed because the
@@ -105969,6 +109649,21 @@ restrictions apply to such a library unit:
           contain an implicit reference back to the active partition on
           whose behalf the designated object was created.
 
+7.1/4
+   * {AI12-0038-1AI12-0038-1} it shall not contain a library-level
+     declaration that contains a name that denotes a type declared
+     within a declared-pure package, if that type has a part that is of
+     an access type; for the purposes of this rule, the parts considered
+     include those of the full views of any private types or private
+     extensions.
+
+7.b/4
+          Reason: This rule breaks privacy by looking into the full
+          views of private types.  Avoiding privacy breakage here would
+          have required disallowing the use in a shared passive package
+          of any private type declared in a declared-pure package, which
+          would have been severely incompatible.
+
 8
 Notwithstanding the definition of accessibility given in *note 3.10.2::,
 the declaration of a library unit P1 is not accessible from within the
@@ -106022,6 +109717,17 @@ partitions.
           aspect_specification -- although the pragma is still preferred
           by the Standard.
 
+                   _Incompatibilities With Ada 2012_
+
+11.c/4
+          {AI12-0038-1AI12-0038-1} Corrigendum: Uses of access types
+          declared in declared-pure units are not allowed in
+          library-level shared passive packages.  These were allowed by
+          Ada 2005 and Ada 2012, but it is unlikely that they work
+          properly, as active partitions could disappear before the
+          shared-passive partition.  As such, the new errors are more
+          likely to catch bugs than to cause them.
+
 
 File: aarm2012.info,  Node: E.2.2,  Next: E.2.3,  Prev: E.2.1,  Up: E.2
 
@@ -106118,7 +109824,7 @@ restrictions apply to the declaration of such a 
library unit:
 {8652/00828652/0082} {AI95-00164-01AI95-00164-01}
 {AI05-0060-1AI05-0060-1} A named access type declared in the visible
 part of a remote types or remote call interface library unit is called a
-remote access type.  Such a type shall be:
+remote access type. Such a type shall be:
 
 9.1/1
    * {8652/00828652/0082} {AI95-00164-01AI95-00164-01} an
@@ -106176,12 +109882,21 @@ access-to-class-wide type:
    * A value of a remote access-to-class-wide type shall be explicitly
      converted only to another remote access-to-class-wide type;
 
-16
-   * A value of a remote access-to-class-wide type shall be dereferenced
-     (or implicitly converted to an anonymous access type) only as part
-     of a dispatching call where the value designates a controlling
-     operand of the call (see *note E.4::, "*note E.4:: Remote
-     Subprogram Calls");
+16/4
+   * {AI12-0034-1AI12-0034-1} A value of a remote access-to-class-wide
+     type shall be dereferenced (or implicitly converted to an anonymous
+     access type) only as part of a dispatching call to a primitive
+     operation of the designated type where the value designates a
+     controlling operand of the call (see *note E.4::, "*note E.4::
+     Remote Subprogram Calls");
+
+16.a/4
+          Ramification: {AI12-0034-1AI12-0034-1} Stream attributes of
+          the designated type are not primitive operations of the
+          designated type, and thus remote calls to them are prohibited
+          by this rule.  This is good, as the access parameter of a
+          stream attribute does not have external streaming, and thus
+          cannot be a parameter of a remote call.
 
 16.1/3
    * {AI05-0101-1AI05-0101-1} A controlling access result value for a
@@ -106190,21 +109905,41 @@ access-to-class-wide type:
      a remote access-to-class-wide type or be part of a dispatching call
      where the value designates a controlling operand of the call;
 
-17/2
-   * {AI95-00366-01AI95-00366-01} The Storage_Pool attribute is not
-     defined for a remote access-to-class-wide type; the expected type
-     for an allocator shall not be a remote access-to-class-wide type.
-     A remote access-to-class-wide type shall not be an actual parameter
-     for a generic formal access type.  The Storage_Size attribute of a
-     remote access-to-class-wide type yields 0; it is not allowed in an
-     attribute_definition_clause.
+17/4
+   * {AI95-00366-01AI95-00366-01} {AI12-0085-1AI12-0085-1} The
+     Storage_Pool attribute is not defined for a remote
+     access-to-class-wide type; the expected type for an allocator shall
+     not be a remote access-to-class-wide type.  A remote
+     access-to-class-wide type shall not be an actual parameter for a
+     generic formal access type.  The Storage_Size attribute of a remote
+     access-to-class-wide type yields 0.  The Storage_Pool and
+     Storage_Size aspects shall not be specified for a remote
+     access-to-class-wide type.
 
 17.a/3
-          Reason: {AI05-0005-1AI05-0005-1} All three of these
-          restrictions are because there is no storage pool associated
-          with a remote access-to-class-wide type.  The Storage_Size is
-          defined to be 0 so that there is no conflict with the rules
-          for pure units.
+          Reason: {AI05-0005-1AI05-0005-1} All of these restrictions are
+          because there is no storage pool associated with a remote
+          access-to-class-wide type.  The Storage_Size is defined to be
+          0 so that there is no conflict with the rules for pure units.
+
+17.b/4
+          Ramification: {AI12-0085-1AI12-0085-1} The prohibition against
+          specifying the Storage_Size aspect for an access-to-class-wide
+          type applies to any method of doing that, including via either
+          a aspect_specification or an attribute_definition_clause.
+
+                         _Erroneous Execution_
+
+17.1/4
+{AI12-0076-1AI12-0076-1} Execution is erroneous if some operation (other
+than the initialization or finalization of the object) modifies the
+value of a constant object declared in the visible part of a remote
+types package.
+
+17.c/4
+          Discussion: This could be accomplished via a self-referencing
+          pointer or via squirrelling a writable pointer to a controlled
+          object.
 
      NOTES
 
@@ -106297,17 +110032,17 @@ access-to-class-wide type:
 
                    _Incompatibilities With Ada 2005_
 
-20.j/3
-          {AI05-0101-1AI05-0101-1} Correction: Added rules for returning
-          of remote access-to-classwide types; this had been missed in
-          the past.  While programs that returned unstreamable types
-          from RCI functions were legal, it is not clear what they could
-          have done (as the results could not be marshalled).
-          Similarly, RCI functions that return remote controlling access
-          types could try to save those values, but it is unlikely that
-          a compiler would know how to do that usefully.  Thus, it seems
-          unlikely that any real programs will be impacted by these
-          changes.
+20.j/4
+          {AI05-0101-1AI05-0101-1} {AI12-0005-1AI12-0005-1} Correction:
+          Added rules for returning of remote access-to-class-wide
+          types; this had been missed in the past.  While programs that
+          returned unstreamable types from RCI functions were legal, it
+          is not clear what they could have done (as the results could
+          not be marshalled).  Similarly, RCI functions that return
+          remote controlling access types could try to save those
+          values, but it is unlikely that a compiler would know how to
+          do that usefully.  Thus, it seems unlikely that any real
+          programs will be impacted by these changes.
 
                        _Extensions to Ada 2005_
 
@@ -106328,6 +110063,33 @@ access-to-class-wide type:
           aspect, so it can be specified by an aspect_specification --
           although the pragma is still preferred by the Standard.
 
+                    _Wording Changes from Ada 2012_
+
+20.n/4
+          {AI12-0034-1AI12-0034-1} Corrigendum: Clarified that
+          dispatching remote stream attribute calls are prohibited.  We
+          don't document this as an incompatibility, as the stream
+          parameter cannot be marshalled for a remote call (it doesn't
+          have external streaming), so it's impossible that any working
+          program depends on this functionality.
+
+20.o/4
+          {AI12-0076-1AI12-0076-1} Corrigendum: Explicitly stated that
+          modifying a visible constant in a remote types package is
+          erroneous.  We don't document this as inconsistent as
+          implementations certainly can still do whatever they were
+          previously doing (no change is required); moreover, this case
+          (and many more) were erroneous in Ada 2005 and before, so
+          we're just restoring the previous semantics.
+
+20.p/4
+          {AI12-0085-1AI12-0085-1} Corrigendum: Clarified that
+          specifying the Storage_Pool or Storage_Size aspect for an
+          access-to-class-wide type is not allowed.  The intent is
+          clear, and no implementation has ever allowed specifying the
+          aspects (the attributes already cannot be specified), so we
+          don't document this as an incompatibility.
+
 
 File: aarm2012.info,  Node: E.2.3,  Prev: E.2.2,  Up: E.2
 
@@ -106479,10 +110241,11 @@ All_Calls_Remote representation aspect of the 
library unit to which the
 pragma applies to the value True.  If the All_Calls_Remote aspect of a
 library unit is True, the library unit shall be a remote call interface.
 
-16.a/3
-          Aspect Description for All_Calls_Remote: All remote procedure
-          calls should use the Partition Communication Subsystem, even
-          if they are local.
+16.a/4
+          Aspect Description for All_Calls_Remote: All indirect or
+          dispatching remote subprogram calls and all direct remote
+          subprogram calls should use the Partition Communication
+          Subsystem.
 
                        _Post-Compilation Rules_
 
@@ -106510,31 +110273,45 @@ in the partition to which the RCI library unit is 
explicitly assigned.]
 
                      _Implementation Requirements_
 
-19/3
+19/4
 {8652/00788652/0078} {AI95-00048-01AI95-00048-01}
-{AI05-0229-1AI05-0229-1} If aspect All_Calls_Remote is True for a given
-RCI library unit, then the implementation shall route any call to a
-subprogram of the RCI unit from outside the declarative region of the
-unit through the Partition Communication Subsystem (PCS); see *note
-E.5::.  Calls to such subprograms from within the declarative region of
-the unit are defined to be local and shall not go through the PCS.
-
-19.a/3
+{AI05-0229-1AI05-0229-1} {AI12-0031-1AI12-0031-1} If aspect
+All_Calls_Remote is True for a given RCI library unit, then the
+implementation shall route any of the following calls through the
+Partition Communication Subsystem (PCS); see *note E.5:::
+
+19.1/4
+   * {AI12-0031-1AI12-0031-1} A direct call to a subprogram of the RCI
+     unit from outside the declarative region of the unit;
+
+19.2/4
+   * {AI12-0031-1AI12-0031-1} An indirect call through a remote
+     access-to-subprogram value that designates a subprogram of the RCI
+     unit;
+
+19.3/4
+   * {AI12-0031-1AI12-0031-1} A dispatching call with a controlling
+     operand designated by a remote access-to-class-wide value whose tag
+     identifies a type declared in the RCI unit.
+
+19.a/4
           Discussion: {8652/00788652/0078} {AI95-00048-01AI95-00048-01}
-          {AI05-0229-1AI05-0229-1} When this aspect is False (or not
-          used), it is presumed that most implementations will make
-          direct calls if the call originates in the same partition as
-          that of the RCI unit.  When this aspect is True, all calls
-          from outside the subsystem rooted at the RCI unit are treated
-          like calls from outside the partition, ensuring that the PCS
-          is involved in all such calls (for debugging, redundancy,
-          etc.).
-
-19.b
-          Reason: There is no point to force local calls (or calls from
-          children) to go through the PCS, since on the target system,
-          these calls are always local, and all the units are in the
-          same active partition.
+          {AI05-0229-1AI05-0229-1} {AI12-0031-1AI12-0031-1} When this
+          aspect is False (or not used), it is presumed that most
+          implementations will not make calls through the PCS if the
+          call originates in the same partition as that of the RCI unit.
+          When this aspect is True, all indirect or dispatching remote
+          subprogram calls to the RCI unit and all direct calls from
+          outside the subsystem rooted at the RCI unit are treated like
+          calls from outside the partition, ensuring that the PCS is
+          involved in all such calls (for debugging, redundancy, etc.).
+
+19.b/4
+          Reason: {AI12-0031-1AI12-0031-1} There is no point to force
+          local direct calls (including calls from children) to go
+          through the PCS, since on the target system these calls are
+          always local, and all the units are in the same active
+          partition.
 
                      _Implementation Permissions_
 
@@ -106608,6 +110385,21 @@ supported as an alternative to RPC.]
           aspect_specification -- although the pragma is still preferred
           by the Standard.
 
+                    _Inconsistencies With Ada 2012_
+
+20.i/4
+          {AI12-0031-1AI12-0031-1} Corrigendum: Redefined when indirect
+          and dispatching remote calls have to be remote for a unit for
+          which the aspect All_Calls_Remote is True.  With the new
+          rules, a local target called indirectly or via dispatching
+          will be routed through the PCS, while that was not necessarily
+          true in earlier Ada.  If a program depended on local targets
+          not being routed through the PCS even when All_Calls_Remote is
+          used, then it might behave differently or fail in corrected
+          Ada 2012.  This is highly unlikely as PCS is going to be able
+          to communicate with any partition of the program, including
+          the local partition.
+
 
 File: aarm2012.info,  Node: E.3,  Next: E.4,  Prev: E.2,  Up: Annex E
 
@@ -106652,7 +110444,7 @@ compilation unit changes whenever the compilation 
unit changes in a
 semantically significant way.  This International Standard does not
 define the exact meaning of "semantically significant".  It is
 unspecified whether there are other events (such as recompilation) that
-result in the version of a compilation unit changing.  
+result in the version of a compilation unit changing. 
 
 5.a/1
           This paragraph was deleted.
@@ -106841,7 +110633,7 @@ All forms of remote subprogram calls are potentially 
blocking operations
 call with a formal parameter of a class-wide type, a check is made that
 the tag of the actual parameter identifies a tagged type declared in a
 declared-pure or shared passive library unit, or in the visible part of
-a remote types or remote call interface library unit.  Program_Error is
+a remote types or remote call interface library unit. Program_Error is
 raised if this check fails.  In a remote function call which returns a
 class-wide type, the same check is made on the function result.
 
@@ -106877,7 +110669,7 @@ designated by values of a remote access-to-class-wide 
type, a check is
 made [(in addition to the normal Tag_Check -- see *note 11.5::)] that
 all the remote access-to-class-wide values originated from Access
 attribute_references that were evaluated by tasks of the same active
-partition.  Constraint_Error is raised if this check fails.
+partition. Constraint_Error is raised if this check fails.
 
 19.a
           Implementation Note: When a remote access-to-class-wide value
@@ -107056,7 +110848,7 @@ corresponding receiving stub shall be invoked by the 
RPC-receiver.
           transferred control to the appropriate receiving stub) the
           parameters are first unmarshalled.  Then, the tags of the
           controlling operands (obtained by dereferencing the pointer to
-          the object) are checked for equality.  If the check fails
+          the object) are checked for equality. If the check fails
           Constraint_Error is raised and propagated back to the calling
           partition, unless it is a result of an asynchronous call.
           Finally, a dispatching call to the specific subprogram (based
@@ -107457,7 +111249,7 @@ immediately after elaborating the library units of an 
active partition
 (that is, right after the elaboration of the partition) if the partition
 includes an RCI library unit, but prior to invoking the main subprogram,
 if any.  The Partition parameter is the Partition_Id of the active
-partition being elaborated.  The Receiver parameter designates an
+partition being elaborated. The Receiver parameter designates an
 implementation-provided procedure called the RPC-receiver which will
 handle all RPCs received by the partition from the PCS.
 Establish_RPC_Receiver saves a reference to the RPC-receiver; when a
@@ -110021,7 +113813,7 @@ cases, provided that 
Complex_Types.Real'Machine_Overflows is True:
 [Constraint_Error can also be raised when a finite result overflows (see
 *note G.2.6::); this may occur for parameter values sufficiently near
 poles, and, in the case of some of the functions, for parameter values
-having components of sufficiently large magnitude.]  When
+having components of sufficiently large magnitude.] When
 Complex_Types.Real'Machine_Overflows is False, the result at poles is
 unspecified.
 
@@ -110160,11 +113952,11 @@ Similarly, the Sin and Cos (resp., Sinh and Cosh) 
functions are allowed
 to raise the exception Constraint_Error, signaling overflow, when the
 absolute value of the imaginary (resp., real) component of the parameter
 X exceeds an unspecified threshold that is approximately
-log(Complex_Types.Real'Safe_Last) + log(2.0).  This permission
-recognizes the impracticality of avoiding overflow in the marginal case
-that the hyperbolic sine or cosine of the imaginary (resp., real)
-component of X exceeds the safe range of Complex_Types.Real but both
-components of the final result do not.
+log(Complex_Types.Real'Safe_Last) + log(2.0). This permission recognizes
+the impracticality of avoiding overflow in the marginal case that the
+hyperbolic sine or cosine of the imaginary (resp., real) component of X
+exceeds the safe range of Complex_Types.Real but both components of the
+final result do not.
 
                         _Implementation Advice_
 
@@ -110719,10 +114511,10 @@ equal to T'Model_Emin.  (These attributes are 
defined in *note G.2.2::.)
 
 4
 A model interval of a floating point type is any interval whose bounds
-are model numbers of the type.  The model interval of a type T
-associated with a value v is the smallest model interval of T that
-includes v.  (The model interval associated with a model number of a
-type consists of that number only.)
+are model numbers of the type. The model interval of a type T associated
+with a value v is the smallest model interval of T that includes v.
+(The model interval associated with a model number of a type consists of
+that number only.)
 
                      _Implementation Requirements_
 
@@ -111093,7 +114885,7 @@ rounding (see *note 3.5.10::).
 
 5
 When the result type is a floating point type, the accuracy is as given
-in *note G.2.1::.  For some combinations of the operand and result types
+in *note G.2.1::. For some combinations of the operand and result types
 in the remaining cases, the result is required to belong to a small set
 of values called the perfect result set; for other combinations, it is
 required merely to belong to a generally larger and
@@ -111250,7 +115042,7 @@ operand to a fixed point type shall belong to the 
perfect result set.
 The possibility of overflow in the result of a predefined arithmetic
 operation or conversion yielding a result of a fixed point type T is
 analogous to that for floating point types, except for being related to
-the base range instead of the safe range.  If all of the permitted
+the base range instead of the safe range. If all of the permitted
 results belong to the base range of T, then the implementation shall
 deliver one of the permitted results; otherwise,
 
@@ -111328,7 +115120,7 @@ result interval, defined as the smallest model 
interval of EF.Float_Type
 that contains all the values of the form f � (1.0 + d), where f is the
 exact value of the corresponding mathematical function at the given
 parameter values, d is a real number, and |d| is less than or equal to
-the function's maximum relative error.  The function delivers a value
+the function's maximum relative error. The function delivers a value
 that belongs to the result interval when both of its bounds belong to
 the safe range of EF.Float_Type; otherwise,
 
@@ -111369,7 +115161,7 @@ log(Left)| / 32.0) 
 10
 The maximum relative error given above applies throughout the domain of
 the forward trigonometric functions when the Cycle parameter is
-specified.  When the Cycle parameter is omitted, the maximum relative
+specified. When the Cycle parameter is omitted, the maximum relative
 error given above applies only when the absolute value of the angle
 parameter X is less than or equal to some implementation-defined angle
 threshold, which shall be at least EF.Float_Type'Machine_Radix
@@ -111755,17 +115547,17 @@ Numerics.Generic_Complex_Elementary_Functions 
obtained by instantiating
 the latter with CT (i.e., a function that yields a value of subtype
 CT.Complex), also belongs to a result interval.  The result intervals
 for the components of the result are either defined by a maximum
-relative error bound or by a maximum box error bound.  When the result
+relative error bound or by a maximum box error bound. When the result
 interval for the real (resp., imaginary) component is defined by maximum
 relative error, it is defined as for that of a real function, relative
 to the exact value of the real (resp., imaginary) part of the result of
-the corresponding mathematical function.  When defined by maximum box
+the corresponding mathematical function. When defined by maximum box
 error, the result interval for a component of the result is the smallest
 model interval of CT.Real that contains all the values of the
 corresponding part of f � (1.0 + d), where f is the exact complex value
 of the corresponding mathematical function at the given parameter
 values, d is complex, and |d| is less than or equal to the given maximum
-box error.  The function delivers a value that belongs to the result
+box error. The function delivers a value that belongs to the result
 interval (or a value both of whose components belong to their respective
 result intervals) when both bounds of the result interval(s) belong to
 the safe range of CT.Real; otherwise,
@@ -113737,7 +117529,7 @@ documentation requirements that relate to several 
needs:
 Execution understandability is supported by pragma Normalize_Scalars,
 and also by requirements for the implementation to document the effect
 of a program in the presence of a bounded error or where the language
-rules leave the effect unspecified.  
+rules leave the effect unspecified. 
 
 5
 The pragmas Reviewable and Restrictions relate to the other requirements
@@ -114259,10 +118051,10 @@ declaration of an object.
 {8652/00938652/0093} {AI95-00207-01AI95-00207-01}
 {AI95-00434-01AI95-00434-01} An inspection point is a point in the
 object code corresponding to the occurrence of a pragma Inspection_Point
-in the compilation unit.  An object is inspectable at an inspection
-point if the corresponding pragma Inspection_Point either has an
-argument denoting that object, or has no arguments and the declaration
-of the object is visible at the inspection point.
+in the compilation unit. An object is inspectable at an inspection point
+if the corresponding pragma Inspection_Point either has an argument
+denoting that object, or has no arguments and the declaration of the
+object is visible at the inspection point.
 
 5.a
           Ramification: If a pragma Inspection_Point is in an in-lined
@@ -114467,7 +118259,7 @@ Immediate_Reclamation
                allocators and not deallocated via unchecked
                deallocation, any storage reserved at run time for an
                object is immediately reclaimed when the object no longer
-               exists.  
+               exists. 
 
 10.a
           Discussion: Immediate reclamation would apply to storage
@@ -114537,7 +118329,7 @@ No_Fixed_Point
 17
 No_Access_Subprograms
                The declaration of access-to-subprogram types is not
-               allowed.  
+               allowed. 
 
 17.a.1/2
           Discussion: Most critical applications would require some
@@ -115218,18 +119010,21 @@ reflected by its Delta attribute.
 
                                _Syntax_
 
-2
-     delta_constraint ::= delta static_expression [range_constraint]
+2/4
+     {AI12-0152-1AI12-0152-1} delta_constraint ::= delta static_
+     simple_expression [range_constraint]
 
                         _Name Resolution Rules_
 
-3
-The expression of a delta_constraint is expected to be of any real type.
+3/4
+{AI12-0152-1AI12-0152-1} The simple_expression of a delta_constraint is
+expected to be of any real type.
 
                            _Legality Rules_
 
-4
-The expression of a delta_constraint shall be static.
+4/4
+{AI12-0152-1AI12-0152-1} The simple_expression of a delta_constraint
+shall be static.
 
 5
 For a subtype_indication with a delta_constraint, the subtype_mark shall
@@ -115246,36 +119041,38 @@ allows a decimal fixed point subtype).
 
                           _Static Semantics_
 
-7
-A subtype_indication with a subtype_mark that denotes an ordinary fixed
-point subtype and a delta_constraint defines an ordinary fixed point
-subtype with a delta given by the value of the expression of the
-delta_constraint.  If the delta_constraint includes a range_constraint
-(*note 3.5: S0036.), then the ordinary fixed point subtype is
+7/4
+{AI12-0152-1AI12-0152-1} A subtype_indication with a subtype_mark that
+denotes an ordinary fixed point subtype and a delta_constraint defines
+an ordinary fixed point subtype with a delta given by the value of the
+simple_expression of the delta_constraint.  If the delta_constraint
+includes a range_constraint (*note 3.5: S0036.), then the ordinary fixed
+point subtype is constrained by the range_constraint (*note 3.5:
+S0036.).
+
+8/4
+{AI12-0152-1AI12-0152-1} A subtype_indication with a subtype_mark that
+denotes a floating point subtype and a digits_constraint defines a
+floating point subtype with a requested decimal precision (as reflected
+by its Digits attribute) given by the value of the simple_expression of
+the digits_constraint.  If the digits_constraint includes a
+range_constraint (*note 3.5: S0036.), then the floating point subtype is
 constrained by the range_constraint (*note 3.5: S0036.).
 
-8
-A subtype_indication with a subtype_mark that denotes a floating point
-subtype and a digits_constraint defines a floating point subtype with a
-requested decimal precision (as reflected by its Digits attribute) given
-by the value of the expression of the digits_constraint.  If the
-digits_constraint includes a range_constraint (*note 3.5: S0036.), then
-the floating point subtype is constrained by the range_constraint (*note
-3.5: S0036.).
-
                           _Dynamic Semantics_
 
-9
-A delta_constraint is compatible with an ordinary fixed point subtype if
-the value of the expression is no less than the delta of the subtype,
-and the range_constraint, if any, is compatible with the subtype.
-
-10
-A digits_constraint is compatible with a floating point subtype if the
-value of the expression is no greater than the requested decimal
-precision of the subtype, and the range_constraint, if any, is
+9/4
+{AI12-0152-1AI12-0152-1} A delta_constraint is compatible with an
+ordinary fixed point subtype if the value of the simple_expression is no
+less than the delta of the subtype, and the range_constraint, if any, is
 compatible with the subtype.
 
+10/4
+{AI12-0152-1AI12-0152-1} A digits_constraint is compatible with a
+floating point subtype if the value of the simple_expression is no
+greater than the requested decimal precision of the subtype, and the
+range_constraint, if any, is compatible with the subtype.
+
 11
 The elaboration of a delta_constraint consists of the elaboration of the
 range_constraint, if any.
@@ -115299,6 +119096,17 @@ range_constraint, if any.
           point types now (they apply to floating point types only as an
           obsolescent feature).
 
+                    _Wording Changes from Ada 2012_
+
+11.c/4
+          {AI12-0152-1AI12-0152-1} Corrigendum: Changed the syntax so
+          that the value following delta in a delta_constraint is a
+          simple_expression.  This is compatible as any expressions that
+          would require extra parentheses are already illegal.  The
+          change is necessary to eliminate syntax ambguities in
+          derived_type_definitions.  The similar change for
+          digits_constraint is documented in *note 3.5.9::.
+
 
 File: aarm2012.info,  Node: J.4,  Next: J.5,  Prev: J.3,  Up: Annex J
 
@@ -115535,8 +119343,8 @@ X'Address
 As part of the initialization of a task object, the address clause for
 an interrupt entry is elaborated[, which evaluates the expression of the
 address clause].  A check is made that the address specified is
-associated with some interrupt to which a task entry may be attached.
-If this check fails, Program_Error is raised.  Otherwise, the interrupt
+associated with some interrupt to which a task entry may be attached. If
+this check fails, Program_Error is raised.  Otherwise, the interrupt
 entry is attached to the interrupt associated with the specified
 address.
 
@@ -116310,7 +120118,7 @@ pragma shall be the name of a convention (see *note 
B.1::).
 
 8/3
 {AI05-0229-1AI05-0229-1} A pragma Import shall be the completion of a
-declaration.  Notwithstanding any rule to the contrary, a pragma Import
+declaration. Notwithstanding any rule to the contrary, a pragma Import
 may serve as the completion of any kind of (explicit) declaration if
 supported by an implementation for that kind of declaration.  If a
 completion is a pragma Import, then it shall appear in the same
@@ -116429,7 +120237,7 @@ with a parameterless profile.
 
 6/3
 {AI05-0229-1AI05-0229-1} For the Attach_Handler pragma, the expected
-type for the expression is Interrupts.Interrupt_Id (see *note C.3.2::).  
+type for the expression is Interrupts.Interrupt_Id (see *note C.3.2::). 
 
                            _Legality Rules_
 
@@ -116439,7 +120247,7 @@ Interrupt_Handler pragmas are only allowed 
immediately within the
 protected_definition where the corresponding subprogram is declared.
 The corresponding protected_type_declaration or
 single_protected_declaration shall be a library-level declaration, and
-shall not be declared within a generic body.  In addition to the places
+shall not be declared within a generic body. In addition to the places
 where Legality Rules normally apply (see *note 12.3::), these rules also
 apply in the private part of an instance of a generic unit.
 
@@ -116551,7 +120359,7 @@ an array or record type or an array object of an 
anonymous type.
 {AI05-0229-1AI05-0229-1} These pragmas are representation pragmas (see
 *note 13.1::).  Each of these pragmas specifies that the similarly named
 aspect (see *note C.6::) of the type, object, or component denoted by
-its argument is True.  
+its argument is True. 
 
                            _Legality Rules_
 
@@ -116644,7 +120452,7 @@ J.15.10 Pragma Dispatching_Domain
 
 3/3
 {AI05-0167-1AI05-0167-1} The expected type for the expression is
-System.Multiprocessors.Dispatching_Domains.Dispatching_Domain.  
+System.Multiprocessors.Dispatching_Domains.Dispatching_Domain. 
 
                            _Legality Rules_
 
@@ -116692,7 +120500,7 @@ J.15.11 Pragmas Priority and Interrupt_Priority
 
 5/3
 {AI05-0229-1AI05-0229-1} The expected type for the expression in a
-Priority or Interrupt_Priority pragma is Integer.  
+Priority or Interrupt_Priority pragma is Integer. 
 
                            _Legality Rules_
 
@@ -116867,11 +120675,11 @@ Alignment (object)
 Alignment (subtype)
                Alignment of a subtype.  See *note 13.3::.
 
-5/3
+5/4
 All_Calls_Remote
-               All remote procedure calls should use the Partition
-               Communication Subsystem, even if they are local.  See
-               *note E.2.3::.
+               All indirect or dispatching remote subprogram calls and
+               all direct remote subprogram calls should use the
+               Partition Communication Subsystem.  See *note E.2.3::.
 
 6/3
 Asynchronous
@@ -116944,6 +120752,11 @@ Default_Storage_Pool
 Default_Value
                Default value for a scalar subtype.  See *note 3.5::.
 
+19.1/4
+Discard_Names
+               Requests a reduction in storage for names associated with
+               an entity.  See *note C.5::.
+
 20/3
 Dispatching_Domain
                Domain (group of processors) on which a given task should
@@ -116960,6 +120773,11 @@ Elaborate_Body
                elaborated immediately after the declaration.  See *note
                10.2.1::.
 
+22.1/4
+Exclusive_Functions
+               Specifies mutual exclusion behavior of protected
+               functions in a protected type.  See *note 9.5.1::.
+
 23/3
 Export
                Entity is exported to another language.  See *note B.1::.
@@ -117006,6 +120824,12 @@ Input
                including any bounds and discriminants.  See *note
                13.13.2::.
 
+31.1/4
+Input'Class
+               Function to read a value from a stream for a the
+               class-wide type associated with a given type, including
+               any bounds and discriminants.  See *note 13.13.2::.
+
 32/3
 Interrupt_Handler
                Protected procedure may be attached to interrupts.  See
@@ -117048,6 +120872,12 @@ Output
                including any bounds and discriminants.  See *note
                13.13.2::.
 
+39.1/4
+Output'Class
+               Procedure to write a value to a stream for a the
+               class-wide type associated with a given type, including
+               any bounds and discriminants.  See *note 13.13.2::.
+
 40/3
 Pack
                Minimize storage when laying out records and arrays.  See
@@ -117073,6 +120903,11 @@ Pre'Class
                Precondition inherited on type derivation.  See *note
                6.1.1::.
 
+44.1/4
+Predicate_Failure
+               Action to be performed when a predicate check fails.  See
+               *note 3.2.4::.
+
 45/3
 Preelaborate
                Code execution during elaboration is avoided for a given
@@ -117094,6 +120929,12 @@ Read
                Procedure to read a value from a stream for a given type.
                See *note 13.13.2::.
 
+48.1/4
+Read'Class
+               Procedure to read a value from a stream for the
+               class-wide type associated with a given type.  See *note
+               13.13.2::.
+
 49/3
 Record layout
                See Layout.  See *note 13.5.1::.
@@ -117196,6 +121037,12 @@ Write
                Procedure to write a value to a stream for a given type.
                See *note 13.13.2::.
 
+69.1/4
+Write'Class
+               Procedure to write a value to a stream for a the
+               class-wide type associated with a given type.  See *note
+               13.13.2::.
+
 
 File: aarm2012.info,  Node: K.2,  Prev: K.1,  Up: Annex K
 
@@ -117256,7 +121103,7 @@ S'Adjacent
 11
                If Towards = X, the function yields X; otherwise, it
                yields the machine number of the type T adjacent to X in
-               the direction of Towards, if that machine number exists.  
+               the direction of Towards, if that machine number exists. 
                If the result would be outside the base range of S,
                Constraint_Error is raised.  When T'Signed_Zeros is True,
                a zero result has the sign of X. When Towards is zero,
@@ -117295,7 +121142,7 @@ S'Alignment
 X'Alignment
                For a prefix X that denotes an object:
 
-15
+15/2
                The value of this attribute is of type universal_integer,
                and nonnegative; zero means that the object is not
                necessarily aligned on a storage element boundary.  If
@@ -117433,8 +121280,8 @@ S'Compose
                a machine number of the type T, or if |v| >=
                T'Model_Small, the function yields v; otherwise, it
                yields either one of the machine numbers of the type T
-               adjacent to v.  Constraint_Error is optionally raised if
-               v is outside the base range of S. A zero result has the
+               adjacent to v. Constraint_Error is optionally raised if v
+               is outside the base range of S. A zero result has the
                sign of Fraction when S'Signed_Zeros is True.  See *note
                A.5.3::.
 
@@ -117463,7 +121310,7 @@ S'Copy_Sign
 47
                If the value of Value is nonzero, the function yields a
                result whose magnitude is that of Value and whose sign is
-               that of Sign; otherwise, it yields the value zero.  
+               that of Sign; otherwise, it yields the value zero. 
                Constraint_Error is optionally raised if the result is
                outside the base range of S. A zero result has the sign
                of Sign when S'Signed_Zeros is True.  See *note A.5.3::.
@@ -117609,15 +121456,15 @@ R.C'First_Bit
                zero.  The value of this attribute is of the type
                universal_integer.  See *note 13.5.2::.
 
-73.1/3
+73.1/4
 S'First_Valid
                For every static discrete subtype S for which there
                exists at least one value belonging to S that satisfies
-               any predicate of S:
+               the predicates of S:
 
-73.2/3
+73.2/4
                S'First_Valid denotes the smallest value that belongs to
-               S and satisfies the predicate of S. The value of this
+               S and satisfies the predicates of S. The value of this
                attribute is of the type of S. See *note 3.5.5::.
 
 74
@@ -117676,7 +121523,7 @@ S'Fraction
 X'Has_Same_Storage
                For a prefix X that denotes an object:
 
-83.2/3
+83.2/4
                X'Has_Same_Storage denotes a function with the following
                specification:
 
@@ -117684,15 +121531,15 @@ X'Has_Same_Storage
                     function X'Has_Same_Storage (Arg : any_type)
                       return Boolean
 
-83.4/3
+83.4/4
                The actual parameter shall be a name that denotes an
                object.  The object denoted by the actual parameter can
                be of any type.  This function evaluates the names of the
-               objects involved and returns True if the representation
+               objects involved.  It returns True if the representation
                of the object denoted by the actual parameter occupies
                exactly the same bits as the representation of the object
-               denoted by X; otherwise, it returns False.  See *note
-               13.3::.
+               denoted by X and the objects occupy at least one bit;
+               otherwise, it returns False.  See *note 13.3::.
 
 84/1
 E'Identity
@@ -117728,6 +121575,16 @@ S'Image
                The function returns an image of the value of Arg as a
                String.  See *note 3.5::.
 
+91.1/4
+X'Image
+               For a prefix X that denotes an object of a scalar type
+               (after any implicit dereference):
+
+91.2/4
+               X'Image denotes the result of calling function S'Image
+               with Arg being X, where S is the nominal subtype of X.
+               See *note 3.5::.
+
 92
 S'Class'Input
                For every subtype S'Class of a class-wide type T'Class:
@@ -117816,15 +121673,15 @@ R.C'Last_Bit
                bits.  The value of this attribute is of the type
                universal_integer.  See *note 13.5.2::.
 
-107.1/3
+107.1/4
 S'Last_Valid
                For every static discrete subtype S for which there
                exists at least one value belonging to S that satisfies
-               any predicate of S:
+               the predicates of S:
 
-107.2/3
+107.2/4
                S'Last_Valid denotes the largest value that belongs to S
-               and satisfies the predicate of S. The value of this
+               and satisfies the predicates of S. The value of this
                attribute is of the type of S. See *note 3.5.5::.
 
 108
@@ -118173,17 +122030,11 @@ X'Old
                For a prefix X that denotes an object of a nonlimited
                type:
 
-164.2/3
-               For each X'Old in a postcondition expression that is
-               enabled, a constant is implicitly declared at the
-               beginning of the subprogram or entry.  The constant is of
-               the type of X and is initialized to the result of
-               evaluating X (as an expression) at the point of the
-               constant declaration.  The value of X'Old in the
-               postcondition expression is the value of this constant;
-               the type of X'Old is the type of X. These implicit
-               constant declarations occur in an arbitrary order.  See
-               *note 6.1.1::.
+164.2/4
+               Each X'Old in a postcondition expression that is enabled
+               denotes a constant that is implicitly declared at the
+               beginning of the subprogram body, entry body, or accept
+               statement.  See *note 6.1.1::.
 
 165
 S'Class'Output
@@ -118409,7 +122260,7 @@ S'Remainder
                the integer nearest to the exact value of X/Y; if |n -
                X/Y| = 1/2, then n is chosen to be even.  If v is a
                machine number of the type T, the function yields v;
-               otherwise, it yields zero.  Constraint_Error is raised if
+               otherwise, it yields zero. Constraint_Error is raised if
                Y is zero.  A zero result has the sign of X when
                S'Signed_Zeros is True.  See *note A.5.3::.
 
@@ -118521,8 +122372,8 @@ S'Scaling
                is a machine number of the type T, or if |v| >=
                T'Model_Small, the function yields v; otherwise, it
                yields either one of the machine numbers of the type T
-               adjacent to v.  Constraint_Error is optionally raised if
-               v is outside the base range of S. A zero result has the
+               adjacent to v. Constraint_Error is optionally raised if v
+               is outside the base range of S. A zero result has the
                sign of X when S'Signed_Zeros is True.  See *note
                A.5.3::.
 
@@ -118614,7 +122465,7 @@ T'Storage_Size
                the task (such as the "task control block" used by some
                implementations.)  See *note 13.3::.
 
-237.1/3
+237.1/2
 S'Stream_Size
                For every subtype S of an elementary type T:
 
@@ -118757,10 +122608,11 @@ X'Valid
                For a prefix X that denotes a scalar object (after any
                implicit dereference):
 
-263/3
+263/4
                Yields True if and only if the object denoted by X is
-               normal, has a valid representation, and the predicate of
-               the nominal subtype of X evaluates to True.  The value of
+               normal, has a valid representation, and then, if the
+               preceding conditions hold, the value of X also satisfies
+               the predicates of the nominal subtype of X. The value of
                this attribute is of the predefined type Boolean.  See
                *note 13.9.2::.
 
@@ -118807,6 +122659,16 @@ S'Wide_Image
                The function returns an image of the value of Arg as a
                Wide_String.  See *note 3.5::.
 
+273.1/4
+X'Wide_Image
+               For a prefix X that denotes an object of a scalar type
+               (after any implicit dereference):
+
+273.2/4
+               X'Wide_Image denotes the result of calling function
+               S'Wide_Image with Arg being X, where S is the nominal
+               subtype of X. See *note 3.5::.
+
 274
 S'Wide_Value
                For every scalar subtype S:
@@ -118841,28 +122703,38 @@ S'Wide_Wide_Image
                is, a sequence of characters representing the value in
                display form.  See *note 3.5::.
 
-277.5/2
+277.5/4
+X'Wide_Wide_Image
+               For a prefix X that denotes an object of a scalar type
+               (after any implicit dereference):
+
+277.6/4
+               X'Wide_Wide_Image denotes the result of calling function
+               S'Wide_Wide_Image with Arg being X, where S is the
+               nominal subtype of X. See *note 3.5::.
+
+277.7/2
 S'Wide_Wide_Value
                For every scalar subtype S:
 
-277.6/2
+277.8/2
                S'Wide_Wide_Value denotes a function with the following
                specification:
 
-277.7/2
+277.9/2
                     function S'Wide_Wide_Value(Arg : Wide_Wide_String)
                       return S'Base
 
-277.8/2
+277.10/2
                This function returns a value given an image of the value
                as a Wide_Wide_String, ignoring any leading or trailing
                spaces.  See *note 3.5::.
 
-277.9/2
+277.11/2
 S'Wide_Wide_Width
                For every scalar subtype S:
 
-277.10/2
+277.12/2
                S'Wide_Wide_Width denotes the maximum length of a
                Wide_Wide_String returned by S'Wide_Wide_Image over all
                values of the subtype S. It denotes zero for a subtype
@@ -119462,8 +123334,8 @@ M.2 Implementation-Defined Characteristics
 
 1/2
 The Ada language allows for certain machine dependences in a controlled
-manner.  Each Ada implementation must document all
-implementation-defined characteristics:
+manner. Each Ada implementation must document all implementation-defined
+characteristics:
 
 1.a
           Ramification: It need not document unspecified
@@ -119513,7 +123385,12 @@ implementation-defined characteristics:
 11
    * Effect of pragma Optimize.  See *note 2.8::(27).
 
-11.1/2
+11.1/4
+   * The message string associated with the Assertion_Error exception
+     raised by the failure of a predicate check if there is no
+     applicable Predicate_Failure aspect.  See *note 3.2.4::(31).
+
+11.2/2
    * The sequence of characters of the value returned by S'Wide_Image
      when some of the graphic characters of S'Wide_Wide_Image are not
      defined in Wide_Character.  See *note 3.5::(30/3).
@@ -119642,7 +123519,7 @@ implementation-defined characteristics:
 
 39
    * The information returned by Exception_Message.  See *note
-     11.4.1::(10.1/3).
+     11.4.1::(10.1/4).
 
 40/2
    * The result of Exceptions.Wide_Wide_Exception_Name for exceptions
@@ -119751,6 +123628,10 @@ implementation-defined characteristics:
 56/2
    * This paragraph was deleted.
 
+56.1/4
+   * The effect of specifying aspect Default_Storage_Pool on an instance
+     of a language-defined generic unit.  See *note 13.11.3::(5).
+
 57/3
    * This paragraph was deleted.
 
@@ -119931,8 +123812,9 @@ implementation-defined characteristics:
 84/2
    * This paragraph was deleted.
 
-85
-   * The semantics of pragma Discard_Names.  See *note C.5::(7).
+85/4
+   * The semantics of some attributes and functions of an entity for
+     which aspect Discard_Names is True.  See *note C.5::(7).
 
 86
    * The result of the Task_Identification.Image attribute.  See *note
@@ -119994,7 +123876,7 @@ implementation-defined characteristics:
      of a partition.  See *note D.3::(6).
 
 99
-   * Default ceiling priorities.  See *note D.3::(10/3).
+   * Default ceiling priorities.  See *note D.3::(10/4).
 
 100
    * The ceiling of any protected object used internally by the
@@ -120010,19 +123892,24 @@ implementation-defined characteristics:
    * Any operations that implicitly require heap storage allocation.
      See *note D.7::(8).
 
-103.1/2
+103.1/4
+   * When restriction No_Dynamic_CPU_Assignment applies to a partition,
+     the processor on which a task with a CPU value of a
+     Not_A_Specific_CPU will execute.  See *note D.7::(10).
+
+103.2/2
    * When restriction No_Task_Termination applies to a partition, what
      happens when a task terminates.  See *note D.7::(15.1/2).
 
-103.2/2
+103.3/2
    * The behavior when restriction Max_Storage_At_Blocking is violated.
      See *note D.7::(17/1).
 
-103.3/2
+103.4/2
    * The behavior when restriction Max_Asynchronous_Select_Nesting is
      violated.  See *note D.7::(18/1).
 
-103.4/2
+103.5/2
    * The behavior when restriction Max_Tasks is violated.  See *note
      D.7::(19).
 
@@ -120048,19 +123935,14 @@ implementation-defined characteristics:
    * This paragraph was deleted.
 
 107.1/3
-   * The processor on which a task with a CPU value of a
-     Not_A_Specific_CPU will execute when the Ravenscar profile is in
-     effect.  See *note D.13::(8).
-
-107.2/3
    * The value of Min_Handler_Ceiling in Execution_Time.Group_Budgets.
      See *note D.14.2::(7/2).
 
-107.3/3
+107.2/3
    * The value of CPU_Range'Last in System.Multiprocessors.  See *note
      D.16::(4/3).
 
-107.4/3
+107.3/3
    * The processor on which the environment task executes in the absence
      of a value for the aspect CPU. See *note D.16::(13/3).
 
@@ -120770,7 +124652,7 @@ document whether that advice is followed:
      the aspects Import and Export should be supported for objects of
      L-compatible types and for subprograms, and aspect Convention
      should be supported for L-eligible types and for subprograms.  See
-     *note B.1::(41/3).
+     *note B.1::(41/4).
 
 85/2
    * If an interface to C, COBOL, or Fortran is provided, the
@@ -120850,10 +124732,10 @@ document whether that advice is followed:
      code is executed at run time for the elaboration of entities.  See
      *note C.4::(14).
 
-100/2
-   * If pragma Discard_Names applies to an entity, then the amount of
+100/4
+   * If aspect Discard_Names is True for an entity, then the amount of
      storage used for storing names associated with that entity should
-     be reduced.  See *note C.5::(8).
+     be reduced.  See *note C.5::(8/4).
 
 101/2
    * A load or store of a volatile object whose size is a multiple of
@@ -121090,7 +124972,7 @@ Character type.  A character type is an enumeration 
type whose values
 include characters.
 
 6/2
-Class (of types).  A class is a set of types that is closed under
+Class (of types). A class is a set of types that is closed under
 derivation, which means that if a given type is in the class, then all
 types derived from that type are also in the class.  The set of types of
 a class share common properties, such as their primitive operations.
@@ -121120,7 +125002,7 @@ finalization.  Objects are always finalized before 
being destroyed.
 
 11
 Declaration.  A declaration is a language construct that associates a
-name with (a view of) an entity.  A declaration may appear explicitly in
+name with (a view of) an entity. A declaration may appear explicitly in
 the program text (an explicit declaration), or may be supposed to occur
 at a given place in the text as a consequence of the semantics of
 another construct (an implicit declaration).
@@ -121174,14 +125056,14 @@ execution.
 18
 Exception.  An exception represents a kind of exceptional situation; an
 occurrence of such a situation (at run time) is called an exception
-occurrence.  To raise an exception is to abandon normal program
-execution so as to draw attention to the fact that the corresponding
-situation has arisen.  Performing some actions in response to the
-arising of an exception is called handling the exception.
+occurrence. To raise an exception is to abandon normal program execution
+so as to draw attention to the fact that the corresponding situation has
+arisen. Performing some actions in response to the arising of an
+exception is called handling the exception.
 
 19
 Execution.  The process by which a construct achieves its run-time
-effect is called execution.  Execution of a declaration is also called
+effect is called execution. Execution of a declaration is also called
 elaboration.  Execution of an expression is also called evaluation.
 
 19.1/2
@@ -121227,8 +125109,8 @@ procedures.  Interface types are used for composing 
other interfaces and
 tagged types and thereby provide multiple inheritance.  Only an
 interface type can be used as a progenitor of another type.
 
-21.2/3
-Invariant.  A invariant is an assertion that is expected to be True for
+21.2/4
+Invariant.  An invariant is an assertion that is expected to be True for
 all objects of a given private type when viewed from outside the
 defining package.
 
@@ -121246,7 +125128,7 @@ may perform arbitrary computations to access elements 
from a container.
 Library unit.  A library unit is a separately compiled program unit, and
 is always a package, subprogram, or generic unit.  Library units may
 have other (logically nested) library units as children, and may have
-other program units physically nested within them.  A root library unit,
+other program units physically nested within them. A root library unit,
 together with its children and grandchildren and so on, form a
 subsystem.
 
@@ -121427,6 +125309,9 @@ and a set of primitive operations which implement the 
fundamental
 aspects of its semantics.  Types are grouped into categories.  Most
 language-defined categories of types are also classes of types.
 
+41.1/4
+Type Invariant.  See Invariant.
+
 42/2
 View.  A view of an entity reveals some or all of the properties of the
 entity.  A single entity may have multiple views.
@@ -121653,7 +125538,7 @@ This Annex summarizes the complete syntax of the 
language.  See *note
 
      *note 3.5.9:::
      digits_constraint ::= 
-        digits static_expression [range_constraint]
+        digits static_simple_expression [range_constraint]
 
      *note 3.6:::
      array_type_definition ::= 
@@ -121951,13 +125836,15 @@ This Annex summarizes the complete syntax of the 
language.  See *note
      *note 4.4:::
      relation ::= 
           simple_expression [relational_operator simple_expression]
-        | simple_expression [not] in membership_choice_list
+        | tested_simple_expression [not] in membership_choice_list
+        | raise_expression
 
      *note 4.4:::
      membership_choice_list ::= membership_choice {| membership_choice}
 
      *note 4.4:::
-     membership_choice ::= choice_expression | range | subtype_mark
+     membership_choice ::= choice_simple_expression | range | 
+     subtype_mark
 
      *note 4.4:::
      simple_expression ::= [unary_adding_operator] term {
@@ -122259,6 +126146,10 @@ This Annex summarizes the complete syntax of the 
language.  See *note
         function_specification is
             (expression)
             [aspect_specification];
+      | [overriding_indicator]
+        function_specification is
+            aggregate
+            [aspect_specification];
 
      *note 7.1:::
      package_declaration ::= package_specification;
@@ -122424,6 +126315,8 @@ This Annex summarizes the complete syntax of the 
language.  See *note
      *note 9.4:::
      protected_operation_item ::= subprogram_declaration
           | subprogram_body
+          | null_procedure_declaration
+          | expression_function_declaration
           | entry_body
           | aspect_clause
 
@@ -122668,6 +126561,10 @@ This Annex summarizes the complete syntax of the 
language.  See *note
      raise_statement ::= raise;
            | raise exception_name [with string_expression];
 
+     *note 11.3:::
+     raise_expression ::= raise exception_name [with string_
+     simple_expression]
+
      *note 12.1:::
      generic_declaration ::= generic_subprogram_declaration | 
      generic_package_declaration
@@ -122890,7 +126787,7 @@ This Annex summarizes the complete syntax of the 
language.  See *note
      code_statement ::= qualified_expression;
 
      *note 13.11.3:::
-     storage_pool_indicator ::= storage_pool_name | null
+     storage_pool_indicator ::= storage_pool_name | null | Standard
 
      *note 13.12:::
      restriction ::= restriction_identifier
@@ -122901,7 +126798,8 @@ This Annex summarizes the complete syntax of the 
language.  See *note
      restriction_parameter_argument ::= name | expression
 
      *note J.3:::
-     delta_constraint ::= delta static_expression [range_constraint]
+     delta_constraint ::= delta static_simple_expression [
+     range_constraint]
 
      *note J.7:::
      at_clause ::= for direct_name use at expression;
@@ -122963,6 +126861,7 @@ of simple_statement.
         procedure_call_statement   *note 6.4::
 
      aggregate   *note 4.3::
+        expression_function_declaration   *note 6.8::
         primary   *note 4.4::
         qualified_expression   *note 4.7::
 
@@ -123107,7 +127006,6 @@ of simple_statement.
 
      choice_expression   *note 4.4::
         discrete_choice   *note 3.8.1::
-        membership_choice   *note 4.4::
 
      choice_parameter_specification   *note 11.2::
         exception_handler   *note 11.2::
@@ -123416,8 +127314,6 @@ of simple_statement.
         default_expression   *note 3.7::
         delay_relative_statement   *note 9.6::
         delay_until_statement   *note 9.6::
-        delta_constraint   *note J.3::
-        digits_constraint   *note 3.5.9::
         discriminant_association   *note 3.7.1::
         entry_index   *note 9.5.2::
         explicit_actual_parameter   *note 6.4::
@@ -123447,6 +127343,7 @@ of simple_statement.
 
      expression_function_declaration   *note 6.8::
         basic_declaration   *note 3.1::
+        protected_operation_item   *note 9.4::
 
      extended_digit   *note 2.4.2::
         based_numeral   *note 2.4.2::
@@ -123798,6 +127695,7 @@ of simple_statement.
         prefix   *note 4.1::
         primary   *note 4.4::
         procedure_call_statement   *note 6.4::
+        raise_expression   *note 11.3::
         raise_statement   *note 11.3::
         requeue_statement   *note 9.5.4::
         restriction_parameter_argument   *note 13.12::
@@ -123826,6 +127724,7 @@ of simple_statement.
 
      null_procedure_declaration   *note 6.7::
         basic_declaration   *note 3.1::
+        protected_operation_item   *note 9.4::
 
      null_statement   *note 5.1::
         simple_statement   *note 5.1::
@@ -124002,6 +127901,9 @@ of simple_statement.
      quantifier   *note 4.5.8::
         quantified_expression   *note 4.5.8::
 
+     raise_expression   *note 11.3::
+        relation   *note 4.4::
+
      raise_statement   *note 11.3::
         simple_statement   *note 5.1::
 
@@ -124115,8 +128017,12 @@ of simple_statement.
 
      simple_expression   *note 4.4::
         choice_relation   *note 4.4::
+        delta_constraint   *note J.3::
+        digits_constraint   *note 3.5.9::
         first_bit   *note 13.5.1::
         last_bit   *note 13.5.1::
+        membership_choice   *note 4.4::
+        raise_expression   *note 11.3::
         range   *note 3.5::
         real_range_specification   *note 3.5.7::
         relation   *note 4.4::
@@ -124330,488 +128236,488 @@ lists all language-defined packages.
 
  
 
-Ada   *note A.2(2): 5900.
+Ada   *note A.2(2): 5994.
 
 Address_To_Access_Conversions
-   child of System   *note 13.7.2(2): 5572.
+   child of System   *note 13.7.2(2): 5645.
 
 Arithmetic
-   child of Ada.Calendar   *note 9.6.1(8/2): 4489.
+   child of Ada.Calendar   *note 9.6.1(8/2): 4548.
 
 ASCII
-   in Standard   *note A.1(36.3/2): 5887.
+   in Standard   *note A.1(36.3/2): 5981.
 
 Assertions
-   child of Ada   *note 11.4.2(12/2): 4971.
+   child of Ada   *note 11.4.2(12/2): 5034.
 
 Asynchronous_Task_Control
-   child of Ada   *note D.11(3/2): 8572.
+   child of Ada   *note D.11(3/2): 8705.
 
 Bounded
-   child of Ada.Strings   *note A.4.4(3): 6300.
+   child of Ada.Strings   *note A.4.4(3): 6394.
 
 Bounded_IO
-   child of Ada.Text_IO   *note A.10.11(3/2): 7030.
-   child of Ada.Wide_Text_IO   *note A.11(4/3): 7056.
-   child of Ada.Wide_Wide_Text_IO   *note A.11(4/3): 7057.
+   child of Ada.Text_IO   *note A.10.11(3/2): 7128.
+   child of Ada.Wide_Text_IO   *note A.11(4/3): 7154.
+   child of Ada.Wide_Wide_Text_IO   *note A.11(4/3): 7155.
 
 Bounded_Priority_Queues
-   child of Ada.Containers   *note A.18.31(2/3): 7916.
+   child of Ada.Containers   *note A.18.31(2/3): 8025.
 
 Bounded_Synchronized_Queues
-   child of Ada.Containers   *note A.18.29(2/3): 7901.
+   child of Ada.Containers   *note A.18.29(2/3): 8010.
 
 C
-   child of Interfaces   *note B.3(4): 7986.
+   child of Interfaces   *note B.3(4): 8106.
 
 Calendar
-   child of Ada   *note 9.6(10): 4458.
+   child of Ada   *note 9.6(10): 4517.
 
 Characters
-   child of Ada   *note A.3.1(2): 5903.
+   child of Ada   *note A.3.1(2): 5997.
 
 COBOL
-   child of Interfaces   *note B.4(7): 8106.
+   child of Interfaces   *note B.4(7): 8229.
 
 Command_Line
-   child of Ada   *note A.15(3): 7127.
+   child of Ada   *note A.15(3): 7226.
 
 Complex_Arrays
-   child of Ada.Numerics   *note G.3.2(53/2): 9041.
+   child of Ada.Numerics   *note G.3.2(53/2): 9183.
 
 Complex_Elementary_Functions
-   child of Ada.Numerics   *note G.1.2(9/1): 8915.
+   child of Ada.Numerics   *note G.1.2(9/1): 9057.
 
 Complex_Text_IO
-   child of Ada   *note G.1.3(9.1/2): 8933.
+   child of Ada   *note G.1.3(9.1/2): 9075.
 
 Complex_Types
-   child of Ada.Numerics   *note G.1.1(25/1): 8887.
+   child of Ada.Numerics   *note G.1.1(25/1): 9029.
 
 Complex_IO
-   child of Ada.Text_IO   *note G.1.3(3): 8923.
-   child of Ada.Wide_Text_IO   *note G.1.4(1): 8936.
-   child of Ada.Wide_Wide_Text_IO   *note G.1.5(1/2): 8938.
+   child of Ada.Text_IO   *note G.1.3(3): 9065.
+   child of Ada.Wide_Text_IO   *note G.1.4(1): 9078.
+   child of Ada.Wide_Wide_Text_IO   *note G.1.5(1/2): 9080.
 
 Constants
-   child of Ada.Strings.Maps   *note A.4.6(3/2): 6417.
+   child of Ada.Strings.Maps   *note A.4.6(3/2): 6511.
 
 Containers
-   child of Ada   *note A.18.1(3/2): 7225.
+   child of Ada   *note A.18.1(3/2): 7325.
 
 Conversions
-   child of Ada.Characters   *note A.3.4(2/2): 6178.
-   child of Ada.Strings.UTF_Encoding   *note A.4.11(15/3): 6547.
+   child of Ada.Characters   *note A.3.4(2/2): 6272.
+   child of Ada.Strings.UTF_Encoding   *note A.4.11(15/3): 6641.
 
 Decimal
-   child of Ada   *note F.2(2): 8829.
+   child of Ada   *note F.2(2): 8971.
 
 Decimal_Conversions
-   in Interfaces.COBOL   *note B.4(31): 8140.
+   in Interfaces.COBOL   *note B.4(31): 8263.
 
 Decimal_IO
-   in Ada.Text_IO   *note A.10.1(73): 6987.
+   in Ada.Text_IO   *note A.10.1(73): 7085.
 
 Decimal_Output
-   in Ada.Text_IO.Editing   *note F.3.3(11): 8852.
+   in Ada.Text_IO.Editing   *note F.3.3(11): 8994.
 
 Direct_IO
-   child of Ada   *note A.8.4(2): 6807.
+   child of Ada   *note A.8.4(2): 6903.
 
 Directories
-   child of Ada   *note A.16(3/2): 7137.
+   child of Ada   *note A.16(3/2): 7236.
 
 Discrete_Random
-   child of Ada.Numerics   *note A.5.2(17): 6635.
+   child of Ada.Numerics   *note A.5.2(17): 6729.
 
 Dispatching
-   child of Ada   *note D.2.1(1.2/3): 8338.
+   child of Ada   *note D.2.1(1.2/3): 8466.
 
 Dispatching_Domains
-   child of System.Multiprocessors   *note D.16.1(3/3): 8671.
+   child of System.Multiprocessors   *note D.16.1(3/3): 8805.
 
 Doubly_Linked_Lists
-   child of Ada.Containers   *note A.18.3(5/3): 7337.
+   child of Ada.Containers   *note A.18.3(5/3): 7437.
 
 Dynamic_Priorities
-   child of Ada   *note D.5.1(3/2): 8443.
+   child of Ada   *note D.5.1(3/2): 8571.
 
 EDF
-   child of Ada.Dispatching   *note D.2.6(9/2): 8395.
-   child of Ada.Synchronous_Task_Control   *note D.10(5.2/3): 8560.
+   child of Ada.Dispatching   *note D.2.6(9/2): 8523.
+   child of Ada.Synchronous_Task_Control   *note D.10(5.2/3): 8693.
 
 Editing
-   child of Ada.Text_IO   *note F.3.3(3): 8840.
-   child of Ada.Wide_Text_IO   *note F.3.4(1): 8860.
-   child of Ada.Wide_Wide_Text_IO   *note F.3.5(1/2): 8862.
+   child of Ada.Text_IO   *note F.3.3(3): 8982.
+   child of Ada.Wide_Text_IO   *note F.3.4(1): 9002.
+   child of Ada.Wide_Wide_Text_IO   *note F.3.5(1/2): 9004.
 
 Elementary_Functions
-   child of Ada.Numerics   *note A.5.1(9/1): 6614.
+   child of Ada.Numerics   *note A.5.1(9/1): 6708.
 
 Enumeration_IO
-   in Ada.Text_IO   *note A.10.1(79): 6997.
+   in Ada.Text_IO   *note A.10.1(79): 7095.
 
 Environment_Variables
-   child of Ada   *note A.17(3/2): 7205.
+   child of Ada   *note A.17(3/2): 7304.
 
 Exceptions
-   child of Ada   *note 11.4.1(2/2): 4927.
+   child of Ada   *note 11.4.1(2/2): 4990.
 
 Execution_Time
-   child of Ada   *note D.14(3/2): 8585.
+   child of Ada   *note D.14(3/2): 8719.
 
 Finalization
-   child of Ada   *note 7.6(4/3): 3927.
+   child of Ada   *note 7.6(4/3): 3974.
 
 Fixed
-   child of Ada.Strings   *note A.4.3(5): 6262.
+   child of Ada.Strings   *note A.4.3(5): 6356.
 
 Fixed_IO
-   in Ada.Text_IO   *note A.10.1(68): 6977.
+   in Ada.Text_IO   *note A.10.1(68): 7075.
 
 Float_Random
-   child of Ada.Numerics   *note A.5.2(5): 6622.
+   child of Ada.Numerics   *note A.5.2(5): 6716.
 
 Float_Text_IO
-   child of Ada   *note A.10.9(33): 7029.
+   child of Ada   *note A.10.9(33): 7127.
 
 Float_Wide_Text_IO
-   child of Ada   *note A.11(2/2): 7052.
+   child of Ada   *note A.11(2/2): 7150.
 
 Float_Wide_Wide_Text_IO
-   child of Ada   *note A.11(3/2): 7055.
+   child of Ada   *note A.11(3/2): 7153.
 
 Float_IO
-   in Ada.Text_IO   *note A.10.1(63): 6967.
+   in Ada.Text_IO   *note A.10.1(63): 7065.
 
 Formatting
-   child of Ada.Calendar   *note 9.6.1(15/2): 4493.
+   child of Ada.Calendar   *note 9.6.1(15/2): 4552.
 
 Fortran
-   child of Interfaces   *note B.5(4): 8160.
+   child of Interfaces   *note B.5(4): 8283.
 
 Generic_Complex_Arrays
-   child of Ada.Numerics   *note G.3.2(2/2): 9005.
+   child of Ada.Numerics   *note G.3.2(2/2): 9147.
 
 Generic_Complex_Elementary_Functions
-   child of Ada.Numerics   *note G.1.2(2/2): 8894.
+   child of Ada.Numerics   *note G.1.2(2/2): 9036.
 
 Generic_Complex_Types
-   child of Ada.Numerics   *note G.1.1(2/1): 8866.
+   child of Ada.Numerics   *note G.1.1(2/1): 9008.
 
 Generic_Dispatching_Constructor
-   child of Ada.Tags   *note 3.9(18.2/3): 2254.
+   child of Ada.Tags   *note 3.9(18.2/3): 2272.
 
 Generic_Elementary_Functions
-   child of Ada.Numerics   *note A.5.1(3): 6585.
+   child of Ada.Numerics   *note A.5.1(3): 6679.
 
 Generic_Bounded_Length
-   in Ada.Strings.Bounded   *note A.4.4(4): 6301.
+   in Ada.Strings.Bounded   *note A.4.4(4): 6395.
 
 Generic_Keys
-   in Ada.Containers.Hashed_Sets   *note A.18.8(50/2): 7614.
-   in Ada.Containers.Ordered_Sets   *note A.18.9(62/2): 7695.
+   in Ada.Containers.Hashed_Sets   *note A.18.8(50/2): 7714.
+   in Ada.Containers.Ordered_Sets   *note A.18.9(62/2): 7795.
 
 Generic_Real_Arrays
-   child of Ada.Numerics   *note G.3.1(2/2): 8988.
+   child of Ada.Numerics   *note G.3.1(2/2): 9130.
 
 Generic_Sorting
-   in Ada.Containers.Doubly_Linked_Lists   *note A.18.3(47/2): 7384.
-   in Ada.Containers.Vectors   *note A.18.2(75/2): 7309.
+   in Ada.Containers.Doubly_Linked_Lists   *note A.18.3(47/2): 7484.
+   in Ada.Containers.Vectors   *note A.18.2(75/2): 7409.
 
 Group_Budgets
-   child of Ada.Execution_Time   *note D.14.2(3/3): 8619.
+   child of Ada.Execution_Time   *note D.14.2(3/3): 8753.
 
 Handling
-   child of Ada.Characters   *note A.3.2(2/2): 5907.
-   child of Ada.Wide_Characters   *note A.3.5(3/3): 6198.
-   child of Ada.Wide_Wide_Characters   *note A.3.6(1/3): 6220.
+   child of Ada.Characters   *note A.3.2(2/2): 6001.
+   child of Ada.Wide_Characters   *note A.3.5(3/3): 6292.
+   child of Ada.Wide_Wide_Characters   *note A.3.6(1/3): 6314.
 
 Hashed_Maps
-   child of Ada.Containers   *note A.18.5(2/3): 7428.
+   child of Ada.Containers   *note A.18.5(2/3): 7528.
 
 Hashed_Sets
-   child of Ada.Containers   *note A.18.8(2/3): 7567.
+   child of Ada.Containers   *note A.18.8(2/3): 7667.
 
 Hierarchical_File_Names
-   child of Ada.Directories   *note A.16.1(3/3): 7191.
+   child of Ada.Directories   *note A.16.1(3/3): 7290.
 
 Indefinite_Doubly_Linked_Lists
-   child of Ada.Containers   *note A.18.12(2/3): 7811.
+   child of Ada.Containers   *note A.18.12(2/3): 7913.
 
 Indefinite_Hashed_Maps
-   child of Ada.Containers   *note A.18.13(2/3): 7813.
+   child of Ada.Containers   *note A.18.13(2/3): 7916.
 
 Indefinite_Hashed_Sets
-   child of Ada.Containers   *note A.18.15(2/3): 7817.
+   child of Ada.Containers   *note A.18.15(2/3): 7922.
 
 Indefinite_Holders
-   child of Ada.Containers   *note A.18.18(5/3): 7824.
+   child of Ada.Containers   *note A.18.18(5/3): 7932.
 
 Indefinite_Multiway_Trees
-   child of Ada.Containers   *note A.18.17(2/3): 7821.
+   child of Ada.Containers   *note A.18.17(2/3): 7928.
 
 Indefinite_Ordered_Maps
-   child of Ada.Containers   *note A.18.14(2/3): 7815.
+   child of Ada.Containers   *note A.18.14(2/3): 7919.
 
 Indefinite_Ordered_Sets
-   child of Ada.Containers   *note A.18.16(2/3): 7819.
+   child of Ada.Containers   *note A.18.16(2/3): 7925.
 
 Indefinite_Vectors
-   child of Ada.Containers   *note A.18.11(2/3): 7809.
+   child of Ada.Containers   *note A.18.11(2/3): 7910.
 
 Information
-   child of Ada.Directories   *note A.16(124/2): 7187.
+   child of Ada.Directories   *note A.16(124/2): 7286.
 
 Integer_Text_IO
-   child of Ada   *note A.10.8(21): 7027.
+   child of Ada   *note A.10.8(21): 7125.
 
 Integer_Wide_Text_IO
-   child of Ada   *note A.11(2/2): 7051.
+   child of Ada   *note A.11(2/2): 7149.
 
 Integer_Wide_Wide_Text_IO
-   child of Ada   *note A.11(3/2): 7054.
+   child of Ada   *note A.11(3/2): 7152.
 
 Integer_IO
-   in Ada.Text_IO   *note A.10.1(52): 6949.
+   in Ada.Text_IO   *note A.10.1(52): 7047.
 
-Interfaces   *note B.2(3): 7980.
+Interfaces   *note B.2(3): 8091.
 
 Interrupts
-   child of Ada   *note C.3.2(2/3): 8224.
-   child of Ada.Execution_Time   *note D.14.3(3/3): 8646.
+   child of Ada   *note C.3.2(2/3): 8347.
+   child of Ada.Execution_Time   *note D.14.3(3/3): 8780.
 
 IO_Exceptions
-   child of Ada   *note A.13(3): 7114.
+   child of Ada   *note A.13(3): 7213.
 
 Iterator_Interfaces
-   child of Ada   *note 5.5.1(2/3): 3439.
+   child of Ada   *note 5.5.1(2/3): 3464.
 
 Latin_1
-   child of Ada.Characters   *note A.3.3(3): 5947.
+   child of Ada.Characters   *note A.3.3(3): 6041.
 
 List_Iterator_Interfaces
-   in Ada.Containers.Doubly_Linked_Lists   *note A.18.3(9.2/3): 7343.
+   in Ada.Containers.Doubly_Linked_Lists   *note A.18.3(9.2/3): 7443.
 
 Locales
-   child of Ada   *note A.19(3/3): 7925.
+   child of Ada   *note A.19(3/3): 8034.
 
 Machine_Code
-   child of System   *note 13.8(7): 5581.
+   child of System   *note 13.8(7): 5654.
 
 Map_Iterator_Interfaces
-   in Ada.Containers.Hashed_Maps   *note A.18.5(6.2/3): 7434.
-   in Ada.Containers.Ordered_Maps   *note A.18.6(7.2/3): 7490.
+   in Ada.Containers.Hashed_Maps   *note A.18.5(6.2/3): 7534.
+   in Ada.Containers.Ordered_Maps   *note A.18.6(7.2/3): 7590.
 
 Maps
-   child of Ada.Strings   *note A.4.2(3/2): 6237.
+   child of Ada.Strings   *note A.4.2(3/2): 6331.
 
 Modular_IO
-   in Ada.Text_IO   *note A.10.1(57): 6958.
+   in Ada.Text_IO   *note A.10.1(57): 7056.
 
 Multiprocessors
-   child of System   *note D.16(3/3): 8663.
+   child of System   *note D.16(3/3): 8797.
 
 Multiway_Trees
-   child of Ada.Containers   *note A.18.10(7/3): 7733.
+   child of Ada.Containers   *note A.18.10(7/3): 7834.
 
 Names
-   child of Ada.Interrupts   *note C.3.2(12): 8235.
+   child of Ada.Interrupts   *note C.3.2(12): 8358.
 
 Non_Preemptive
-   child of Ada.Dispatching   *note D.2.4(2.2/3): 8377.
+   child of Ada.Dispatching   *note D.2.4(2.2/3): 8505.
 
 Numerics
-   child of Ada   *note A.5(3/2): 6579.
+   child of Ada   *note A.5(3/2): 6673.
 
 Ordered_Maps
-   child of Ada.Containers   *note A.18.6(2/3): 7483.
+   child of Ada.Containers   *note A.18.6(2/3): 7583.
 
 Ordered_Sets
-   child of Ada.Containers   *note A.18.9(2/3): 7642.
+   child of Ada.Containers   *note A.18.9(2/3): 7742.
 
 Pointers
-   child of Interfaces.C   *note B.3.2(4): 8076.
+   child of Interfaces.C   *note B.3.2(4): 8199.
 
 Real_Arrays
-   child of Ada.Numerics   *note G.3.1(31/2): 9000.
+   child of Ada.Numerics   *note G.3.1(31/2): 9142.
 
 Real_Time
-   child of Ada   *note D.8(3): 8521.
+   child of Ada   *note D.8(3): 8654.
 
 Round_Robin
-   child of Ada.Dispatching   *note D.2.5(4/2): 8386.
+   child of Ada.Dispatching   *note D.2.5(4/2): 8514.
 
 RPC
-   child of System   *note E.5(3): 8808.
+   child of System   *note E.5(3): 8950.
 
 Sequential_IO
-   child of Ada   *note A.8.1(2): 6781.
+   child of Ada   *note A.8.1(2): 6875.
 
 Set_Iterator_Interfaces
-   in Ada.Containers.Hashed_Sets   *note A.18.8(6.2/3): 7573.
-   in Ada.Containers.Ordered_Sets   *note A.18.9(7.2/3): 7649.
+   in Ada.Containers.Hashed_Sets   *note A.18.8(6.2/3): 7673.
+   in Ada.Containers.Ordered_Sets   *note A.18.9(7.2/3): 7749.
 
 Single_Precision_Complex_Types
-   in Interfaces.Fortran   *note B.5(8): 8165.
+   in Interfaces.Fortran   *note B.5(8): 8288.
 
-Standard   *note A.1(4): 5878.
+Standard   *note A.1(4): 5972.
 
 Storage_Elements
-   child of System   *note 13.7.1(2/2): 5559.
+   child of System   *note 13.7.1(2/2): 5632.
 
 Storage_IO
-   child of Ada   *note A.9(3): 6839.
+   child of Ada   *note A.9(3): 6937.
 
 Storage_Pools
-   child of System   *note 13.11(5): 5622.
+   child of System   *note 13.11(5): 5695.
 
 Stream_IO
-   child of Ada.Streams   *note A.12.1(3/3): 7065.
+   child of Ada.Streams   *note A.12.1(3/3): 7163.
 
 Streams
-   child of Ada   *note 13.13.1(2): 5776.
+   child of Ada   *note 13.13.1(2): 5858.
 
 Strings
-   child of Ada   *note A.4.1(3): 6223.
-   child of Ada.Strings.UTF_Encoding   *note A.4.11(22/3): 6553.
-   child of Interfaces.C   *note B.3.1(3): 8052.
+   child of Ada   *note A.4.1(3): 6317.
+   child of Ada.Strings.UTF_Encoding   *note A.4.11(22/3): 6647.
+   child of Interfaces.C   *note B.3.1(3): 8175.
 
 Subpools
-   child of System.Storage_Pools   *note 13.11.4(3/3): 5694.
+   child of System.Storage_Pools   *note 13.11.4(3/3): 5774.
 
 Synchronized_Queue_Interfaces
-   child of Ada.Containers   *note A.18.27(3/3): 7886.
+   child of Ada.Containers   *note A.18.27(3/3): 7995.
 
 Synchronous_Barriers
-   child of Ada   *note D.10.1(3/3): 8567.
+   child of Ada   *note D.10.1(3/3): 8700.
 
 Synchronous_Task_Control
-   child of Ada   *note D.10(3/2): 8554.
+   child of Ada   *note D.10(3/2): 8687.
 
-System   *note 13.7(3/2): 5530.
+System   *note 13.7(3/2): 5603.
 
 Tags
-   child of Ada   *note 3.9(6/2): 2229.
+   child of Ada   *note 3.9(6/2): 2247.
 
 Task_Attributes
-   child of Ada   *note C.7.2(2): 8293.
+   child of Ada   *note C.7.2(2): 8421.
 
 Task_Identification
-   child of Ada   *note C.7.1(2/2): 8272.
+   child of Ada   *note C.7.1(2/2): 8400.
 
 Task_Termination
-   child of Ada   *note C.7.3(2/2): 8305.
+   child of Ada   *note C.7.3(2/2): 8433.
 
 Text_Streams
-   child of Ada.Text_IO   *note A.12.2(3): 7104.
-   child of Ada.Wide_Text_IO   *note A.12.3(3): 7107.
-   child of Ada.Wide_Wide_Text_IO   *note A.12.4(3/2): 7110.
+   child of Ada.Text_IO   *note A.12.2(3): 7203.
+   child of Ada.Wide_Text_IO   *note A.12.3(3): 7206.
+   child of Ada.Wide_Wide_Text_IO   *note A.12.4(3/2): 7209.
 
 Text_IO
-   child of Ada   *note A.10.1(2): 6860.
+   child of Ada   *note A.10.1(2): 6958.
 
 Time_Zones
-   child of Ada.Calendar   *note 9.6.1(2/2): 4485.
+   child of Ada.Calendar   *note 9.6.1(2/2): 4544.
 
 Timers
-   child of Ada.Execution_Time   *note D.14.1(3/2): 8603.
+   child of Ada.Execution_Time   *note D.14.1(3/2): 8737.
 
 Timing_Events
-   child of Ada.Real_Time   *note D.15(3/2): 8650.
+   child of Ada.Real_Time   *note D.15(3/2): 8784.
 
 Tree_Iterator_Interfaces
-   in Ada.Containers.Multiway_Trees   *note A.18.10(13/3): 7739.
+   in Ada.Containers.Multiway_Trees   *note A.18.10(13/3): 7840.
 
 Unbounded
-   child of Ada.Strings   *note A.4.5(3): 6362.
+   child of Ada.Strings   *note A.4.5(3): 6456.
 
 Unbounded_IO
-   child of Ada.Text_IO   *note A.10.12(3/2): 7040.
-   child of Ada.Wide_Text_IO   *note A.11(5/3): 7058.
-   child of Ada.Wide_Wide_Text_IO   *note A.11(5/3): 7059.
+   child of Ada.Text_IO   *note A.10.12(3/2): 7138.
+   child of Ada.Wide_Text_IO   *note A.11(5/3): 7156.
+   child of Ada.Wide_Wide_Text_IO   *note A.11(5/3): 7157.
 
 Unbounded_Priority_Queues
-   child of Ada.Containers   *note A.18.30(2/3): 7908.
+   child of Ada.Containers   *note A.18.30(2/3): 8017.
 
 Unbounded_Synchronized_Queues
-   child of Ada.Containers   *note A.18.28(2/3): 7894.
+   child of Ada.Containers   *note A.18.28(2/3): 8003.
 
 UTF_Encoding
-   child of Ada.Strings   *note A.4.11(3/3): 6536.
+   child of Ada.Strings   *note A.4.11(3/3): 6630.
 
 Vector_Iterator_Interfaces
-   in Ada.Containers.Vectors   *note A.18.2(11.2/3): 7244.
+   in Ada.Containers.Vectors   *note A.18.2(11.2/3): 7344.
 
 Vectors
-   child of Ada.Containers   *note A.18.2(6/3): 7236.
+   child of Ada.Containers   *note A.18.2(6/3): 7336.
 
 Wide_Bounded
-   child of Ada.Strings   *note A.4.7(1/3): 6434.
+   child of Ada.Strings   *note A.4.7(1/3): 6528.
 
 Wide_Constants
-   child of Ada.Strings.Wide_Maps   *note A.4.7(1/3): 6448, *note
-A.4.8(28/2): 6512.
+   child of Ada.Strings.Wide_Maps   *note A.4.7(1/3): 6542, *note
+A.4.8(28/2): 6606.
 
 Wide_Equal_Case_Insensitive
-   child of Ada.Strings   *note A.4.7(1/3): 6440.
+   child of Ada.Strings   *note A.4.7(1/3): 6534.
 
 Wide_Fixed
-   child of Ada.Strings   *note A.4.7(1/3): 6433.
+   child of Ada.Strings   *note A.4.7(1/3): 6527.
 
 Wide_Hash
-   child of Ada.Strings   *note A.4.7(1/3): 6436.
+   child of Ada.Strings   *note A.4.7(1/3): 6530.
 
 Wide_Hash_Case_Insensitive
-   child of Ada.Strings   *note A.4.7(1/3): 6444.
+   child of Ada.Strings   *note A.4.7(1/3): 6538.
 
 Wide_Maps
-   child of Ada.Strings   *note A.4.7(3): 6449.
+   child of Ada.Strings   *note A.4.7(3): 6543.
 
 Wide_Text_IO
-   child of Ada   *note A.11(2/2): 7050.
+   child of Ada   *note A.11(2/2): 7148.
 
 Wide_Unbounded
-   child of Ada.Strings   *note A.4.7(1/3): 6435.
+   child of Ada.Strings   *note A.4.7(1/3): 6529.
 
 Wide_Characters
-   child of Ada   *note A.3.1(4/2): 5904.
+   child of Ada   *note A.3.1(4/2): 5998.
 
 Wide_Strings
-   child of Ada.Strings.UTF_Encoding   *note A.4.11(30/3): 6560.
+   child of Ada.Strings.UTF_Encoding   *note A.4.11(30/3): 6654.
 
 Wide_Wide_Constants
-   child of Ada.Strings.Wide_Wide_Maps   *note A.4.8(1/3): 6490.
+   child of Ada.Strings.Wide_Wide_Maps   *note A.4.8(1/3): 6584.
 
 Wide_Wide_Equal_Case_Insensitive
-   child of Ada.Strings   *note A.4.8(1/3): 6482.
+   child of Ada.Strings   *note A.4.8(1/3): 6576.
 
 Wide_Wide_Hash
-   child of Ada.Strings   *note A.4.8(1/3): 6478.
+   child of Ada.Strings   *note A.4.8(1/3): 6572.
 
 Wide_Wide_Hash_Case_Insensitive
-   child of Ada.Strings   *note A.4.8(1/3): 6486.
+   child of Ada.Strings   *note A.4.8(1/3): 6580.
 
 Wide_Wide_Text_IO
-   child of Ada   *note A.11(3/2): 7053.
+   child of Ada   *note A.11(3/2): 7151.
 
 Wide_Wide_Bounded
-   child of Ada.Strings   *note A.4.8(1/3): 6476.
+   child of Ada.Strings   *note A.4.8(1/3): 6570.
 
 Wide_Wide_Characters
-   child of Ada   *note A.3.1(6/2): 5905.
+   child of Ada   *note A.3.1(6/2): 5999.
 
 Wide_Wide_Fixed
-   child of Ada.Strings   *note A.4.8(1/3): 6475.
+   child of Ada.Strings   *note A.4.8(1/3): 6569.
 
 Wide_Wide_Maps
-   child of Ada.Strings   *note A.4.8(3/2): 6491.
+   child of Ada.Strings   *note A.4.8(3/2): 6585.
 
 Wide_Wide_Strings
-   child of Ada.Strings.UTF_Encoding   *note A.4.11(38/3): 6567.
+   child of Ada.Strings.UTF_Encoding   *note A.4.11(38/3): 6661.
 
 Wide_Wide_Unbounded
-   child of Ada.Strings   *note A.4.8(1/3): 6477.
+   child of Ada.Strings   *note A.4.8(1/3): 6571.
 
 
 File: aarm2012.info,  Node: Q.2,  Next: Q.3,  Prev: Q.1,  Up: Annex Q
@@ -124826,647 +128732,651 @@ lists all language-defined types and subtypes.
  
 
 Address
-   in System   *note 13.7(12): 5542.
+   in System   *note 13.7(12): 5615.
 
 Alignment
-   in Ada.Strings   *note A.4.1(6): 6231.
+   in Ada.Strings   *note A.4.1(6): 6325.
 
 Alphanumeric
-   in Interfaces.COBOL   *note B.4(16/3): 8118.
+   in Interfaces.COBOL   *note B.4(16/3): 8241.
 
 Any_Priority subtype of Integer
-   in System   *note 13.7(16): 5552.
+   in System   *note 13.7(16): 5625.
 
 Attribute_Handle
-   in Ada.Task_Attributes   *note C.7.2(3): 8294.
+   in Ada.Task_Attributes   *note C.7.2(3): 8422.
 
 Barrier_Limit subtype of Positive
-   in Ada.Synchronous_Barriers   *note D.10.1(4/3): 8568.
+   in Ada.Synchronous_Barriers   *note D.10.1(4/3): 8701.
 
 Binary
-   in Interfaces.COBOL   *note B.4(10): 8109.
+   in Interfaces.COBOL   *note B.4(10): 8232.
 
 Binary_Format
-   in Interfaces.COBOL   *note B.4(24): 8130.
+   in Interfaces.COBOL   *note B.4(24): 8253.
 
 Bit_Order
-   in System   *note 13.7(15/2): 5548.
+   in System   *note 13.7(15/2): 5621.
 
 Boolean
-   in Standard   *note A.1(5): 5879.
+   in Standard   *note A.1(5): 5973.
 
 Bounded_String
-   in Ada.Strings.Bounded   *note A.4.4(6): 6303.
+   in Ada.Strings.Bounded   *note A.4.4(6): 6397.
 
 Buffer_Type subtype of Storage_Array
-   in Ada.Storage_IO   *note A.9(4): 6841.
+   in Ada.Storage_IO   *note A.9(4): 6939.
 
 Byte
-   in Interfaces.COBOL   *note B.4(29/3): 8137.
+   in Interfaces.COBOL   *note B.4(29/3): 8260.
 
 Byte_Array
-   in Interfaces.COBOL   *note B.4(29/3): 8138.
+   in Interfaces.COBOL   *note B.4(29/3): 8261.
 
 C_float
-   in Interfaces.C   *note B.3(15): 8002.
+   in Interfaces.C   *note B.3(15): 8122.
 
 Cause_Of_Termination
-   in Ada.Task_Termination   *note C.7.3(3/2): 8306.
+   in Ada.Task_Termination   *note C.7.3(3/2): 8434.
 
 char
-   in Interfaces.C   *note B.3(19): 8005.
+   in Interfaces.C   *note B.3(19): 8125.
 
 char16_array
-   in Interfaces.C   *note B.3(39.5/3): 8029.
+   in Interfaces.C   *note B.3(39.5/3): 8149.
 
 char16_t
-   in Interfaces.C   *note B.3(39.2/2): 8025.
+   in Interfaces.C   *note B.3(39.2/2): 8145.
 
 char32_array
-   in Interfaces.C   *note B.3(39.14/3): 8039.
+   in Interfaces.C   *note B.3(39.14/3): 8159.
 
 char32_t
-   in Interfaces.C   *note B.3(39.11/2): 8035.
+   in Interfaces.C   *note B.3(39.11/2): 8155.
 
 char_array
-   in Interfaces.C   *note B.3(23/3): 8009.
+   in Interfaces.C   *note B.3(23/3): 8129.
 
 char_array_access
-   in Interfaces.C.Strings   *note B.3.1(4): 8053.
+   in Interfaces.C.Strings   *note B.3.1(4): 8176.
 
 Character
-   in Standard   *note A.1(35/3): 5884.
+   in Standard   *note A.1(35/3): 5978.
 
 Character_Mapping
-   in Ada.Strings.Maps   *note A.4.2(20/2): 6251.
+   in Ada.Strings.Maps   *note A.4.2(20/2): 6345.
 
 Character_Mapping_Function
-   in Ada.Strings.Maps   *note A.4.2(25): 6257.
+   in Ada.Strings.Maps   *note A.4.2(25): 6351.
 
 Character_Range
-   in Ada.Strings.Maps   *note A.4.2(6): 6240.
+   in Ada.Strings.Maps   *note A.4.2(6): 6334.
 
 Character_Ranges
-   in Ada.Strings.Maps   *note A.4.2(7): 6241.
+   in Ada.Strings.Maps   *note A.4.2(7): 6335.
 
 Character_Sequence subtype of String
-   in Ada.Strings.Maps   *note A.4.2(16): 6247.
+   in Ada.Strings.Maps   *note A.4.2(16): 6341.
 
 Character_Set
-   in Ada.Strings.Maps   *note A.4.2(4/2): 6238.
-   in Interfaces.Fortran   *note B.5(11): 8170.
+   in Ada.Strings.Maps   *note A.4.2(4/2): 6332.
+   in Interfaces.Fortran   *note B.5(11): 8293.
 
 chars_ptr
-   in Interfaces.C.Strings   *note B.3.1(5/2): 8054.
+   in Interfaces.C.Strings   *note B.3.1(5/2): 8177.
 
 chars_ptr_array
-   in Interfaces.C.Strings   *note B.3.1(6/2): 8055.
+   in Interfaces.C.Strings   *note B.3.1(6/2): 8178.
 
 COBOL_Character
-   in Interfaces.COBOL   *note B.4(13): 8115.
+   in Interfaces.COBOL   *note B.4(13): 8238.
 
 Complex
-   in Ada.Numerics.Generic_Complex_Types   *note G.1.1(3): 8867.
-   in Interfaces.Fortran   *note B.5(9): 8166.
+   in Ada.Numerics.Generic_Complex_Types   *note G.1.1(3): 9009.
+   in Interfaces.Fortran   *note B.5(9): 8289.
 
 Complex_Matrix
-   in Ada.Numerics.Generic_Complex_Arrays   *note G.3.2(4/2): 9007.
+   in Ada.Numerics.Generic_Complex_Arrays   *note G.3.2(4/2): 9149.
 
 Complex_Vector
-   in Ada.Numerics.Generic_Complex_Arrays   *note G.3.2(4/2): 9006.
+   in Ada.Numerics.Generic_Complex_Arrays   *note G.3.2(4/2): 9148.
 
 Constant_Reference_Type
-   in Ada.Containers.Indefinite_Holders   *note A.18.18(16/3): 7834.
-   in Ada.Containers.Multiway_Trees   *note A.18.10(28/3): 7753.
+   in Ada.Containers.Indefinite_Holders   *note A.18.18(16/3): 7942.
+   in Ada.Containers.Multiway_Trees   *note A.18.10(28/3): 7854.
 
 Controlled
-   in Ada.Finalization   *note 7.6(5/2): 3928.
+   in Ada.Finalization   *note 7.6(5/2): 3975.
 
 Count
-   in Ada.Direct_IO   *note A.8.4(4): 6810.
-   in Ada.Streams.Stream_IO   *note A.12.1(7): 7069.
-   in Ada.Text_IO   *note A.10.1(5): 6863.
+   in Ada.Direct_IO   *note A.8.4(4): 6906.
+   in Ada.Streams.Stream_IO   *note A.12.1(7): 7167.
+   in Ada.Text_IO   *note A.10.1(5): 6961.
 
 Count_Type
-   in Ada.Containers   *note A.18.1(5/2): 7227.
+   in Ada.Containers   *note A.18.1(5/2): 7327.
 
 Country_Code
-   in Ada.Locales   *note A.19(4/3): 7927.
+   in Ada.Locales   *note A.19(4/4): 8036.
 
 CPU subtype of CPU_Range
-   in System.Multiprocessors   *note D.16(4/3): 8666.
+   in System.Multiprocessors   *note D.16(4/3): 8800.
 
 CPU_Range
-   in System.Multiprocessors   *note D.16(4/3): 8664.
+   in System.Multiprocessors   *note D.16(4/3): 8798.
+
+CPU_Set
+   in System.Multiprocessors.Dispatching_Domains   *note D.16.1(9.1/4):
+8812.
 
 CPU_Time
-   in Ada.Execution_Time   *note D.14(4/2): 8586.
+   in Ada.Execution_Time   *note D.14(4/2): 8720.
 
 Cursor
-   in Ada.Containers.Doubly_Linked_Lists   *note A.18.3(7/2): 7339.
-   in Ada.Containers.Hashed_Maps   *note A.18.5(4/2): 7430.
-   in Ada.Containers.Hashed_Sets   *note A.18.8(4/2): 7569.
-   in Ada.Containers.Multiway_Trees   *note A.18.10(9/3): 7735.
-   in Ada.Containers.Ordered_Maps   *note A.18.6(5/2): 7486.
-   in Ada.Containers.Ordered_Sets   *note A.18.9(5/2): 7645.
-   in Ada.Containers.Vectors   *note A.18.2(9/2): 7240.
+   in Ada.Containers.Doubly_Linked_Lists   *note A.18.3(7/2): 7439.
+   in Ada.Containers.Hashed_Maps   *note A.18.5(4/2): 7530.
+   in Ada.Containers.Hashed_Sets   *note A.18.8(4/2): 7669.
+   in Ada.Containers.Multiway_Trees   *note A.18.10(9/3): 7836.
+   in Ada.Containers.Ordered_Maps   *note A.18.6(5/2): 7586.
+   in Ada.Containers.Ordered_Sets   *note A.18.9(5/2): 7745.
+   in Ada.Containers.Vectors   *note A.18.2(9/2): 7340.
 
 Day_Count
-   in Ada.Calendar.Arithmetic   *note 9.6.1(10/2): 4490.
+   in Ada.Calendar.Arithmetic   *note 9.6.1(10/2): 4549.
 
 Day_Duration subtype of Duration
-   in Ada.Calendar   *note 9.6(11/2): 4463.
+   in Ada.Calendar   *note 9.6(11/2): 4522.
 
 Day_Name
-   in Ada.Calendar.Formatting   *note 9.6.1(17/2): 4494.
+   in Ada.Calendar.Formatting   *note 9.6.1(17/2): 4553.
 
 Day_Number subtype of Integer
-   in Ada.Calendar   *note 9.6(11/2): 4462.
+   in Ada.Calendar   *note 9.6(11/2): 4521.
 
 Deadline subtype of Time
-   in Ada.Dispatching.EDF   *note D.2.6(9/2): 8396.
+   in Ada.Dispatching.EDF   *note D.2.6(9/2): 8524.
 
 Decimal_Element
-   in Interfaces.COBOL   *note B.4(12/3): 8113.
+   in Interfaces.COBOL   *note B.4(12/3): 8236.
 
 Direction
-   in Ada.Strings   *note A.4.1(6): 6234.
+   in Ada.Strings   *note A.4.1(6): 6328.
 
 Directory_Entry_Type
-   in Ada.Directories   *note A.16(29/2): 7161.
+   in Ada.Directories   *note A.16(29/2): 7260.
 
 Dispatching_Domain
    in System.Multiprocessors.Dispatching_Domains   *note D.16.1(5/3):
-8673.
+8807.
 
 Display_Format
-   in Interfaces.COBOL   *note B.4(22): 8124.
+   in Interfaces.COBOL   *note B.4(22): 8247.
 
 double
-   in Interfaces.C   *note B.3(16): 8003.
+   in Interfaces.C   *note B.3(16): 8123.
 
 Double_Precision
-   in Interfaces.Fortran   *note B.5(6): 8163.
+   in Interfaces.Fortran   *note B.5(6): 8286.
 
 Duration
-   in Standard   *note A.1(43): 5892.
+   in Standard   *note A.1(43): 5986.
 
 Encoding_Scheme
-   in Ada.Strings.UTF_Encoding   *note A.4.11(4/3): 6537.
+   in Ada.Strings.UTF_Encoding   *note A.4.11(4/3): 6631.
 
 Exception_Id
-   in Ada.Exceptions   *note 11.4.1(2/2): 4928.
+   in Ada.Exceptions   *note 11.4.1(2/2): 4991.
 
 Exception_Occurrence
-   in Ada.Exceptions   *note 11.4.1(3/2): 4933.
+   in Ada.Exceptions   *note 11.4.1(3/2): 4996.
 
 Exception_Occurrence_Access
-   in Ada.Exceptions   *note 11.4.1(3/2): 4934.
+   in Ada.Exceptions   *note 11.4.1(3/2): 4997.
 
 Exit_Status
-   in Ada.Command_Line   *note A.15(7): 7131.
+   in Ada.Command_Line   *note A.15(7): 7230.
 
 Extended_Index subtype of Index_Type'Base
-   in Ada.Containers.Vectors   *note A.18.2(7/2): 7237.
+   in Ada.Containers.Vectors   *note A.18.2(7/2): 7337.
 
 Field subtype of Integer
-   in Ada.Text_IO   *note A.10.1(6): 6866.
+   in Ada.Text_IO   *note A.10.1(6): 6964.
 
 File_Access
-   in Ada.Text_IO   *note A.10.1(18): 6888.
+   in Ada.Text_IO   *note A.10.1(18): 6986.
 
 File_Kind
-   in Ada.Directories   *note A.16(22/2): 7155.
+   in Ada.Directories   *note A.16(22/2): 7254.
 
 File_Mode
-   in Ada.Direct_IO   *note A.8.4(4): 6809.
-   in Ada.Sequential_IO   *note A.8.1(4): 6783.
-   in Ada.Streams.Stream_IO   *note A.12.1(6): 7068.
-   in Ada.Text_IO   *note A.10.1(4): 6862.
+   in Ada.Direct_IO   *note A.8.4(4): 6905.
+   in Ada.Sequential_IO   *note A.8.1(4): 6877.
+   in Ada.Streams.Stream_IO   *note A.12.1(6): 7166.
+   in Ada.Text_IO   *note A.10.1(4): 6960.
 
 File_Size
-   in Ada.Directories   *note A.16(23/2): 7156.
+   in Ada.Directories   *note A.16(23/2): 7255.
 
 File_Type
-   in Ada.Direct_IO   *note A.8.4(3): 6808.
-   in Ada.Sequential_IO   *note A.8.1(3): 6782.
-   in Ada.Streams.Stream_IO   *note A.12.1(5): 7067.
-   in Ada.Text_IO   *note A.10.1(3): 6861.
+   in Ada.Direct_IO   *note A.8.4(3): 6904.
+   in Ada.Sequential_IO   *note A.8.1(3): 6876.
+   in Ada.Streams.Stream_IO   *note A.12.1(5/4): 7165.
+   in Ada.Text_IO   *note A.10.1(3): 6959.
 
 Filter_Type
-   in Ada.Directories   *note A.16(30/2): 7162.
+   in Ada.Directories   *note A.16(30/2): 7261.
 
 Float
-   in Standard   *note A.1(21): 5883.
+   in Standard   *note A.1(21): 5977.
 
 Floating
-   in Interfaces.COBOL   *note B.4(9): 8107.
+   in Interfaces.COBOL   *note B.4(9): 8230.
 
 Fortran_Character
-   in Interfaces.Fortran   *note B.5(12/3): 8171.
+   in Interfaces.Fortran   *note B.5(12/3): 8294.
 
 Fortran_Integer
-   in Interfaces.Fortran   *note B.5(5): 8161.
+   in Interfaces.Fortran   *note B.5(5): 8284.
 
 Forward_Iterator
-   in Ada.Iterator_Interfaces   *note 5.5.1(3/3): 3440.
+   in Ada.Iterator_Interfaces   *note 5.5.1(3/3): 3465.
 
 Generator
-   in Ada.Numerics.Discrete_Random   *note A.5.2(19): 6636.
-   in Ada.Numerics.Float_Random   *note A.5.2(7): 6623.
+   in Ada.Numerics.Discrete_Random   *note A.5.2(19): 6730.
+   in Ada.Numerics.Float_Random   *note A.5.2(7): 6717.
 
 Group_Budget
-   in Ada.Execution_Time.Group_Budgets   *note D.14.2(4/3): 8620.
+   in Ada.Execution_Time.Group_Budgets   *note D.14.2(4/3): 8754.
 
 Group_Budget_Handler
-   in Ada.Execution_Time.Group_Budgets   *note D.14.2(5/2): 8621.
+   in Ada.Execution_Time.Group_Budgets   *note D.14.2(5/2): 8755.
 
 Hash_Type
-   in Ada.Containers   *note A.18.1(4/2): 7226.
+   in Ada.Containers   *note A.18.1(4/2): 7326.
 
 Holder
-   in Ada.Containers.Indefinite_Holders   *note A.18.18(6/3): 7825.
+   in Ada.Containers.Indefinite_Holders   *note A.18.18(6/3): 7933.
 
 Hour_Number subtype of Natural
-   in Ada.Calendar.Formatting   *note 9.6.1(20/2): 4503.
+   in Ada.Calendar.Formatting   *note 9.6.1(20/2): 4562.
 
 Imaginary
-   in Ada.Numerics.Generic_Complex_Types   *note G.1.1(4/2): 8868.
+   in Ada.Numerics.Generic_Complex_Types   *note G.1.1(4/2): 9010.
 
 Imaginary subtype of Imaginary
-   in Interfaces.Fortran   *note B.5(10): 8167.
+   in Interfaces.Fortran   *note B.5(10): 8290.
 
 int
-   in Interfaces.C   *note B.3(7): 7991.
+   in Interfaces.C   *note B.3(7): 8111.
 
 Integer
-   in Standard   *note A.1(12): 5880.
+   in Standard   *note A.1(12): 5974.
 
 Integer_Address
-   in System.Storage_Elements   *note 13.7.1(10/3): 5565.
+   in System.Storage_Elements   *note 13.7.1(10/3): 5638.
 
 Interrupt_Id
-   in Ada.Interrupts   *note C.3.2(2/3): 8225.
+   in Ada.Interrupts   *note C.3.2(2/3): 8348.
 
 Interrupt_Priority subtype of Any_Priority
-   in System   *note 13.7(16): 5554.
+   in System   *note 13.7(16): 5627.
 
 ISO_646 subtype of Character
-   in Ada.Characters.Handling   *note A.3.2(9): 5930.
+   in Ada.Characters.Handling   *note A.3.2(9): 6024.
 
 Language_Code
-   in Ada.Locales   *note A.19(4/3): 7926.
+   in Ada.Locales   *note A.19(4/4): 8035.
 
 Leap_Seconds_Count subtype of Integer
-   in Ada.Calendar.Arithmetic   *note 9.6.1(11/2): 4491.
+   in Ada.Calendar.Arithmetic   *note 9.6.1(11/2): 4550.
 
 Length_Range subtype of Natural
-   in Ada.Strings.Bounded   *note A.4.4(8): 6305.
+   in Ada.Strings.Bounded   *note A.4.4(8): 6399.
 
 Limited_Controlled
-   in Ada.Finalization   *note 7.6(7/2): 3932.
+   in Ada.Finalization   *note 7.6(7/2): 3979.
 
 List
-   in Ada.Containers.Doubly_Linked_Lists   *note A.18.3(6/3): 7338.
+   in Ada.Containers.Doubly_Linked_Lists   *note A.18.3(6/3): 7438.
 
 Logical
-   in Interfaces.Fortran   *note B.5(7): 8164.
+   in Interfaces.Fortran   *note B.5(7): 8287.
 
 long
-   in Interfaces.C   *note B.3(7): 7993.
+   in Interfaces.C   *note B.3(7): 8113.
 
 Long_Binary
-   in Interfaces.COBOL   *note B.4(10): 8110.
+   in Interfaces.COBOL   *note B.4(10): 8233.
 
 long_double
-   in Interfaces.C   *note B.3(17): 8004.
+   in Interfaces.C   *note B.3(17): 8124.
 
 Long_Floating
-   in Interfaces.COBOL   *note B.4(9): 8108.
+   in Interfaces.COBOL   *note B.4(9): 8231.
 
 Map
-   in Ada.Containers.Hashed_Maps   *note A.18.5(3/3): 7429.
-   in Ada.Containers.Ordered_Maps   *note A.18.6(4/3): 7485.
+   in Ada.Containers.Hashed_Maps   *note A.18.5(3/3): 7529.
+   in Ada.Containers.Ordered_Maps   *note A.18.6(4/3): 7585.
 
 Membership
-   in Ada.Strings   *note A.4.1(6): 6233.
+   in Ada.Strings   *note A.4.1(6): 6327.
 
 Minute_Number subtype of Natural
-   in Ada.Calendar.Formatting   *note 9.6.1(20/2): 4504.
+   in Ada.Calendar.Formatting   *note 9.6.1(20/2): 4563.
 
 Month_Number subtype of Integer
-   in Ada.Calendar   *note 9.6(11/2): 4461.
+   in Ada.Calendar   *note 9.6(11/2): 4520.
 
 Name
-   in System   *note 13.7(4): 5531.
+   in System   *note 13.7(4): 5604.
 
 Name_Case_Kind
-   in Ada.Directories   *note A.16(20.1/3): 7153.
+   in Ada.Directories   *note A.16(20.1/3): 7252.
 
 Natural subtype of Integer
-   in Standard   *note A.1(13): 5881.
+   in Standard   *note A.1(13): 5975.
 
 Number_Base subtype of Integer
-   in Ada.Text_IO   *note A.10.1(6): 6867.
+   in Ada.Text_IO   *note A.10.1(6): 6965.
 
 Numeric
-   in Interfaces.COBOL   *note B.4(20/3): 8123.
+   in Interfaces.COBOL   *note B.4(20/3): 8246.
 
 Packed_Decimal
-   in Interfaces.COBOL   *note B.4(12/3): 8114.
+   in Interfaces.COBOL   *note B.4(12/3): 8237.
 
 Packed_Format
-   in Interfaces.COBOL   *note B.4(26): 8134.
+   in Interfaces.COBOL   *note B.4(26): 8257.
 
 Parameterless_Handler
-   in Ada.Interrupts   *note C.3.2(2/3): 8226.
+   in Ada.Interrupts   *note C.3.2(2/3): 8349.
 
 Params_Stream_Type
-   in System.RPC   *note E.5(6): 8811.
+   in System.RPC   *note E.5(6): 8953.
 
 Partition_Id
-   in System.RPC   *note E.5(4): 8809.
+   in System.RPC   *note E.5(4): 8951.
 
 Picture
-   in Ada.Text_IO.Editing   *note F.3.3(4): 8841.
+   in Ada.Text_IO.Editing   *note F.3.3(4): 8983.
 
 plain_char
-   in Interfaces.C   *note B.3(11): 7999.
+   in Interfaces.C   *note B.3(11): 8119.
 
 Pointer
-   in Interfaces.C.Pointers   *note B.3.2(5): 8077.
+   in Interfaces.C.Pointers   *note B.3.2(5): 8200.
 
 Positive subtype of Integer
-   in Standard   *note A.1(13): 5882.
+   in Standard   *note A.1(13): 5976.
 
 Positive_Count subtype of Count
-   in Ada.Direct_IO   *note A.8.4(4): 6811.
-   in Ada.Streams.Stream_IO   *note A.12.1(7): 7070.
-   in Ada.Text_IO   *note A.10.1(5): 6864.
+   in Ada.Direct_IO   *note A.8.4(4): 6907.
+   in Ada.Streams.Stream_IO   *note A.12.1(7): 7168.
+   in Ada.Text_IO   *note A.10.1(5): 6962.
 
 Priority subtype of Any_Priority
-   in System   *note 13.7(16): 5553.
+   in System   *note 13.7(16): 5626.
 
 ptrdiff_t
-   in Interfaces.C   *note B.3(12): 8000.
+   in Interfaces.C   *note B.3(12): 8120.
 
 Queue
-   in Ada.Containers.Bounded_Priority_Queues   *note A.18.31(4/3): 7917.
+   in Ada.Containers.Bounded_Priority_Queues   *note A.18.31(4/3): 8026.
    in Ada.Containers.Bounded_Synchronized_Queues   *note A.18.29(4/3):
-7902.
+8011.
    in Ada.Containers.Synchronized_Queue_Interfaces   *note A.18.27(4/3):
-7887.
+7996.
    in Ada.Containers.Unbounded_Priority_Queues   *note A.18.30(4/3):
-7909.
+8018.
    in Ada.Containers.Unbounded_Synchronized_Queues   *note A.18.28(4/3):
-7895.
+8004.
 
 Real
-   in Interfaces.Fortran   *note B.5(6): 8162.
+   in Interfaces.Fortran   *note B.5(6): 8285.
 
 Real_Matrix
-   in Ada.Numerics.Generic_Real_Arrays   *note G.3.1(4/2): 8990.
+   in Ada.Numerics.Generic_Real_Arrays   *note G.3.1(4/2): 9132.
 
 Real_Vector
-   in Ada.Numerics.Generic_Real_Arrays   *note G.3.1(4/2): 8989.
+   in Ada.Numerics.Generic_Real_Arrays   *note G.3.1(4/2): 9131.
 
 Reference_Type
-   in Ada.Containers.Doubly_Linked_Lists   *note A.18.3(17.2/3): 7351.
-   in Ada.Containers.Hashed_Maps   *note A.18.5(17.2/3): 7445.
-   in Ada.Containers.Hashed_Sets   *note A.18.8(58.1/3): 7623.
-   in Ada.Containers.Indefinite_Holders   *note A.18.18(17/3): 7835.
-   in Ada.Containers.Multiway_Trees   *note A.18.10(29/3): 7754.
-   in Ada.Containers.Ordered_Maps   *note A.18.6(16.2/3): 7499.
-   in Ada.Containers.Ordered_Sets   *note A.18.9(73.1/3): 7707.
-   in Ada.Containers.Vectors   *note A.18.2(34.2/3): 7263.
+   in Ada.Containers.Doubly_Linked_Lists   *note A.18.3(17.2/3): 7451.
+   in Ada.Containers.Hashed_Maps   *note A.18.5(17.2/3): 7545.
+   in Ada.Containers.Hashed_Sets   *note A.18.8(58.1/3): 7723.
+   in Ada.Containers.Indefinite_Holders   *note A.18.18(17/3): 7943.
+   in Ada.Containers.Multiway_Trees   *note A.18.10(29/3): 7855.
+   in Ada.Containers.Ordered_Maps   *note A.18.6(16.2/3): 7599.
+   in Ada.Containers.Ordered_Sets   *note A.18.9(73.1/3): 7807.
+   in Ada.Containers.Vectors   *note A.18.2(34.2/3): 7363.
 
 Reversible_Iterator
-   in Ada.Iterator_Interfaces   *note 5.5.1(4/3): 3443.
+   in Ada.Iterator_Interfaces   *note 5.5.1(4/3): 3468.
 
 Root_Storage_Pool
-   in System.Storage_Pools   *note 13.11(6/2): 5623.
+   in System.Storage_Pools   *note 13.11(6/2): 5696.
 
 Root_Storage_Pool_With_Subpools
-   in System.Storage_Pools.Subpools   *note 13.11.4(4/3): 5695.
+   in System.Storage_Pools.Subpools   *note 13.11.4(4/3): 5775.
 
 Root_Stream_Type
-   in Ada.Streams   *note 13.13.1(3/2): 5778.
+   in Ada.Streams   *note 13.13.1(3/2): 5860.
 
 Root_Subpool
-   in System.Storage_Pools.Subpools   *note 13.11.4(5/3): 5696.
+   in System.Storage_Pools.Subpools   *note 13.11.4(5/3): 5776.
 
 RPC_Receiver
-   in System.RPC   *note E.5(11): 8816.
+   in System.RPC   *note E.5(11): 8958.
 
 Search_Type
-   in Ada.Directories   *note A.16(31/2): 7163.
+   in Ada.Directories   *note A.16(31/2): 7262.
 
 Second_Duration subtype of Day_Duration
-   in Ada.Calendar.Formatting   *note 9.6.1(20/2): 4506.
+   in Ada.Calendar.Formatting   *note 9.6.1(20/2): 4565.
 
 Second_Number subtype of Natural
-   in Ada.Calendar.Formatting   *note 9.6.1(20/2): 4505.
+   in Ada.Calendar.Formatting   *note 9.6.1(20/2): 4564.
 
 Seconds_Count
-   in Ada.Real_Time   *note D.8(15): 8540.
+   in Ada.Real_Time   *note D.8(15): 8673.
 
 Set
-   in Ada.Containers.Hashed_Sets   *note A.18.8(3/3): 7568.
-   in Ada.Containers.Ordered_Sets   *note A.18.9(4/3): 7644.
+   in Ada.Containers.Hashed_Sets   *note A.18.8(3/3): 7668.
+   in Ada.Containers.Ordered_Sets   *note A.18.9(4/3): 7744.
 
 short
-   in Interfaces.C   *note B.3(7): 7992.
+   in Interfaces.C   *note B.3(7): 8112.
 
 signed_char
-   in Interfaces.C   *note B.3(8): 7994.
+   in Interfaces.C   *note B.3(8): 8114.
 
 size_t
-   in Interfaces.C   *note B.3(13): 8001.
+   in Interfaces.C   *note B.3(13): 8121.
 
 State
-   in Ada.Numerics.Discrete_Random   *note A.5.2(23): 6640.
-   in Ada.Numerics.Float_Random   *note A.5.2(11): 6628.
+   in Ada.Numerics.Discrete_Random   *note A.5.2(23): 6734.
+   in Ada.Numerics.Float_Random   *note A.5.2(11): 6722.
 
 Storage_Array
-   in System.Storage_Elements   *note 13.7.1(5): 5563.
+   in System.Storage_Elements   *note 13.7.1(5): 5636.
 
 Storage_Count subtype of Storage_Offset
-   in System.Storage_Elements   *note 13.7.1(4): 5561.
+   in System.Storage_Elements   *note 13.7.1(4): 5634.
 
 Storage_Element
-   in System.Storage_Elements   *note 13.7.1(5): 5562.
+   in System.Storage_Elements   *note 13.7.1(5): 5635.
 
 Storage_Offset
-   in System.Storage_Elements   *note 13.7.1(3): 5560.
+   in System.Storage_Elements   *note 13.7.1(3): 5633.
 
 Stream_Access
-   in Ada.Streams.Stream_IO   *note A.12.1(4): 7066.
-   in Ada.Text_IO.Text_Streams   *note A.12.2(3): 7105.
-   in Ada.Wide_Text_IO.Text_Streams   *note A.12.3(3): 7108.
-   in Ada.Wide_Wide_Text_IO.Text_Streams   *note A.12.4(3/2): 7111.
+   in Ada.Streams.Stream_IO   *note A.12.1(4): 7164.
+   in Ada.Text_IO.Text_Streams   *note A.12.2(3): 7204.
+   in Ada.Wide_Text_IO.Text_Streams   *note A.12.3(3): 7207.
+   in Ada.Wide_Wide_Text_IO.Text_Streams   *note A.12.4(3/2): 7210.
 
 Stream_Element
-   in Ada.Streams   *note 13.13.1(4/1): 5779.
+   in Ada.Streams   *note 13.13.1(4/1): 5861.
 
 Stream_Element_Array
-   in Ada.Streams   *note 13.13.1(4/1): 5782.
+   in Ada.Streams   *note 13.13.1(4/1): 5864.
 
 Stream_Element_Count subtype of Stream_Element_Offset
-   in Ada.Streams   *note 13.13.1(4/1): 5781.
+   in Ada.Streams   *note 13.13.1(4/1): 5863.
 
 Stream_Element_Offset
-   in Ada.Streams   *note 13.13.1(4/1): 5780.
+   in Ada.Streams   *note 13.13.1(4/1): 5862.
 
 String
-   in Standard   *note A.1(37/3): 5889.
+   in Standard   *note A.1(37/3): 5983.
 
 String_Access
-   in Ada.Strings.Unbounded   *note A.4.5(7): 6366.
+   in Ada.Strings.Unbounded   *note A.4.5(7): 6460.
 
 Subpool_Handle
-   in System.Storage_Pools.Subpools   *note 13.11.4(6/3): 5697.
+   in System.Storage_Pools.Subpools   *note 13.11.4(6/3): 5777.
 
 Suspension_Object
-   in Ada.Synchronous_Task_Control   *note D.10(4): 8555.
+   in Ada.Synchronous_Task_Control   *note D.10(4): 8688.
 
 Synchronous_Barrier
-   in Ada.Synchronous_Barriers   *note D.10.1(5/3): 8569.
+   in Ada.Synchronous_Barriers   *note D.10.1(5/3): 8702.
 
 Tag
-   in Ada.Tags   *note 3.9(6/2): 2230.
+   in Ada.Tags   *note 3.9(6/2): 2248.
 
 Tag_Array
-   in Ada.Tags   *note 3.9(7.3/2): 2240.
+   in Ada.Tags   *note 3.9(7.3/2): 2258.
 
 Task_Array
-   in Ada.Execution_Time.Group_Budgets   *note D.14.2(6/2): 8622.
+   in Ada.Execution_Time.Group_Budgets   *note D.14.2(6/2): 8756.
 
 Task_Id
-   in Ada.Task_Identification   *note C.7.1(2/2): 8273.
+   in Ada.Task_Identification   *note C.7.1(2/2): 8401.
 
 Termination_Handler
-   in Ada.Task_Termination   *note C.7.3(4/2): 8307.
+   in Ada.Task_Termination   *note C.7.3(4/2): 8435.
 
 Time
-   in Ada.Calendar   *note 9.6(10): 4459.
-   in Ada.Real_Time   *note D.8(4): 8522.
+   in Ada.Calendar   *note 9.6(10): 4518.
+   in Ada.Real_Time   *note D.8(4): 8655.
 
 Time_Offset
-   in Ada.Calendar.Time_Zones   *note 9.6.1(4/2): 4486.
+   in Ada.Calendar.Time_Zones   *note 9.6.1(4/2): 4545.
 
 Time_Span
-   in Ada.Real_Time   *note D.8(5): 8526.
+   in Ada.Real_Time   *note D.8(5): 8659.
 
 Timer
-   in Ada.Execution_Time.Timers   *note D.14.1(4/2): 8604.
+   in Ada.Execution_Time.Timers   *note D.14.1(4/2): 8738.
 
 Timer_Handler
-   in Ada.Execution_Time.Timers   *note D.14.1(5/2): 8605.
+   in Ada.Execution_Time.Timers   *note D.14.1(5/2): 8739.
 
 Timing_Event
-   in Ada.Real_Time.Timing_Events   *note D.15(4/2): 8651.
+   in Ada.Real_Time.Timing_Events   *note D.15(4/2): 8785.
 
 Timing_Event_Handler
-   in Ada.Real_Time.Timing_Events   *note D.15(4/2): 8652.
+   in Ada.Real_Time.Timing_Events   *note D.15(4/2): 8786.
 
 Tree
-   in Ada.Containers.Multiway_Trees   *note A.18.10(8/3): 7734.
+   in Ada.Containers.Multiway_Trees   *note A.18.10(8/3): 7835.
 
 Trim_End
-   in Ada.Strings   *note A.4.1(6): 6235.
+   in Ada.Strings   *note A.4.1(6): 6329.
 
 Truncation
-   in Ada.Strings   *note A.4.1(6): 6232.
+   in Ada.Strings   *note A.4.1(6): 6326.
 
 Type_Set
-   in Ada.Text_IO   *note A.10.1(7): 6868.
+   in Ada.Text_IO   *note A.10.1(7): 6966.
 
 Unbounded_String
-   in Ada.Strings.Unbounded   *note A.4.5(4/2): 6363.
+   in Ada.Strings.Unbounded   *note A.4.5(4/2): 6457.
 
 Uniformly_Distributed subtype of Float
-   in Ada.Numerics.Float_Random   *note A.5.2(8): 6624.
+   in Ada.Numerics.Float_Random   *note A.5.2(8): 6718.
 
 unsigned
-   in Interfaces.C   *note B.3(9): 7995.
+   in Interfaces.C   *note B.3(9): 8115.
 
 unsigned_char
-   in Interfaces.C   *note B.3(10): 7998.
+   in Interfaces.C   *note B.3(10): 8118.
 
 unsigned_long
-   in Interfaces.C   *note B.3(9): 7997.
+   in Interfaces.C   *note B.3(9): 8117.
 
 unsigned_short
-   in Interfaces.C   *note B.3(9): 7996.
+   in Interfaces.C   *note B.3(9): 8116.
 
 UTF_16_Wide_String subtype of Wide_String
-   in Ada.Strings.UTF_Encoding   *note A.4.11(7/3): 6540.
+   in Ada.Strings.UTF_Encoding   *note A.4.11(7/3): 6634.
 
 UTF_8_String subtype of String
-   in Ada.Strings.UTF_Encoding   *note A.4.11(6/3): 6539.
+   in Ada.Strings.UTF_Encoding   *note A.4.11(6/3): 6633.
 
 UTF_String subtype of String
-   in Ada.Strings.UTF_Encoding   *note A.4.11(5/3): 6538.
+   in Ada.Strings.UTF_Encoding   *note A.4.11(5/3): 6632.
 
 Vector
-   in Ada.Containers.Vectors   *note A.18.2(8/3): 7239.
+   in Ada.Containers.Vectors   *note A.18.2(8/3): 7339.
 
 wchar_array
-   in Interfaces.C   *note B.3(33/3): 8019.
+   in Interfaces.C   *note B.3(33/3): 8139.
 
 wchar_t
-   in Interfaces.C   *note B.3(30/1): 8015.
+   in Interfaces.C   *note B.3(30/1): 8135.
 
 Wide_Character
-   in Standard   *note A.1(36.1/3): 5885.
+   in Standard   *note A.1(36.1/3): 5979.
 
 Wide_Character_Mapping
-   in Ada.Strings.Wide_Maps   *note A.4.7(20/2): 6463.
+   in Ada.Strings.Wide_Maps   *note A.4.7(20/2): 6557.
 
 Wide_Character_Mapping_Function
-   in Ada.Strings.Wide_Maps   *note A.4.7(26): 6469.
+   in Ada.Strings.Wide_Maps   *note A.4.7(26): 6563.
 
 Wide_Character_Range
-   in Ada.Strings.Wide_Maps   *note A.4.7(6): 6452.
+   in Ada.Strings.Wide_Maps   *note A.4.7(6): 6546.
 
 Wide_Character_Ranges
-   in Ada.Strings.Wide_Maps   *note A.4.7(7): 6453.
+   in Ada.Strings.Wide_Maps   *note A.4.7(7): 6547.
 
 Wide_Character_Sequence subtype of Wide_String
-   in Ada.Strings.Wide_Maps   *note A.4.7(16): 6459.
+   in Ada.Strings.Wide_Maps   *note A.4.7(16): 6553.
 
 Wide_Character_Set
-   in Ada.Strings.Wide_Maps   *note A.4.7(4/2): 6450.
+   in Ada.Strings.Wide_Maps   *note A.4.7(4/2): 6544.
 
 Wide_String
-   in Standard   *note A.1(41/3): 5890.
+   in Standard   *note A.1(41/3): 5984.
 
 Wide_Wide_Character
-   in Standard   *note A.1(36.2/3): 5886.
+   in Standard   *note A.1(36.2/3): 5980.
 
 Wide_Wide_Character_Mapping
-   in Ada.Strings.Wide_Wide_Maps   *note A.4.8(20/2): 6505.
+   in Ada.Strings.Wide_Wide_Maps   *note A.4.8(20/2): 6599.
 
 Wide_Wide_Character_Mapping_Function
-   in Ada.Strings.Wide_Wide_Maps   *note A.4.8(26/2): 6511.
+   in Ada.Strings.Wide_Wide_Maps   *note A.4.8(26/2): 6605.
 
 Wide_Wide_Character_Range
-   in Ada.Strings.Wide_Wide_Maps   *note A.4.8(6/2): 6494.
+   in Ada.Strings.Wide_Wide_Maps   *note A.4.8(6/2): 6588.
 
 Wide_Wide_Character_Ranges
-   in Ada.Strings.Wide_Wide_Maps   *note A.4.8(7/2): 6495.
+   in Ada.Strings.Wide_Wide_Maps   *note A.4.8(7/2): 6589.
 
 Wide_Wide_Character_Sequence subtype of Wide_Wide_String
-   in Ada.Strings.Wide_Wide_Maps   *note A.4.8(16/2): 6501.
+   in Ada.Strings.Wide_Wide_Maps   *note A.4.8(16/2): 6595.
 
 Wide_Wide_Character_Set
-   in Ada.Strings.Wide_Wide_Maps   *note A.4.8(4/2): 6492.
+   in Ada.Strings.Wide_Wide_Maps   *note A.4.8(4/2): 6586.
 
 Wide_Wide_String
-   in Standard   *note A.1(42.1/3): 5891.
+   in Standard   *note A.1(42.1/3): 5985.
 
 Year_Number subtype of Integer
-   in Ada.Calendar   *note 9.6(11/2): 4460.
+   in Ada.Calendar   *note 9.6(11/2): 4519.
 
 
 File: aarm2012.info,  Node: Q.3,  Next: Q.4,  Prev: Q.2,  Up: Annex Q
@@ -125480,1944 +129390,1950 @@ lists all language-defined subprograms.
 
  
 
-Abort_Task in Ada.Task_Identification   *note C.7.1(3/3): 8278.
+Abort_Task in Ada.Task_Identification   *note C.7.1(3/3): 8406.
 
 Activation_Is_Complete
-   in Ada.Task_Identification   *note C.7.1(4/3): 8281.
+   in Ada.Task_Identification   *note C.7.1(4/3): 8409.
 
 Actual_Quantum
-   in Ada.Dispatching.Round_Robin   *note D.2.5(4/2): 8390.
+   in Ada.Dispatching.Round_Robin   *note D.2.5(4/2): 8518.
 
 Ada.Unchecked_Deallocate_Subpool
-   child of Ada   *note 13.11.5(3/3): 5725.
+   child of Ada   *note 13.11.5(3/3): 5806.
 
 Add
-   in Ada.Execution_Time.Group_Budgets   *note D.14.2(9/2): 8630.
+   in Ada.Execution_Time.Group_Budgets   *note D.14.2(9/2): 8764.
 
 Add_Task
-   in Ada.Execution_Time.Group_Budgets   *note D.14.2(8/2): 8624.
+   in Ada.Execution_Time.Group_Budgets   *note D.14.2(8/2): 8758.
 
-Adjust in Ada.Finalization   *note 7.6(6/2): 3930.
+Adjust in Ada.Finalization   *note 7.6(6/2): 3977.
 
 Allocate
-   in System.Storage_Pools   *note 13.11(7): 5624.
-   in System.Storage_Pools.Subpools   *note 13.11.4(14/3): 5704.
+   in System.Storage_Pools   *note 13.11(7): 5697.
+   in System.Storage_Pools.Subpools   *note 13.11.4(14/3): 5784.
 
 Allocate_From_Subpool
-   in System.Storage_Pools.Subpools   *note 13.11.4(11/3): 5701.
+   in System.Storage_Pools.Subpools   *note 13.11.4(11/3): 5781.
 
 Ancestor_Find
-   in Ada.Containers.Multiway_Trees   *note A.18.10(40/3): 7765.
+   in Ada.Containers.Multiway_Trees   *note A.18.10(40/3): 7866.
 
 Append
-   in Ada.Containers.Doubly_Linked_Lists   *note A.18.3(23/2): 7361.
-   in Ada.Containers.Vectors   *note A.18.2(46/2): 7281, *note
-A.18.2(47/2): 7282.
-   in Ada.Strings.Bounded   *note A.4.4(13): 6310, *note A.4.4(14):
-6311, *note A.4.4(15): 6312, *note A.4.4(16): 6313, *note A.4.4(17):
-6314, *note A.4.4(18): 6315, *note A.4.4(19): 6316, *note A.4.4(20):
-6317.
-   in Ada.Strings.Unbounded   *note A.4.5(12): 6372, *note A.4.5(13):
-6373, *note A.4.5(14): 6374.
+   in Ada.Containers.Doubly_Linked_Lists   *note A.18.3(23/2): 7461.
+   in Ada.Containers.Vectors   *note A.18.2(46/2): 7381, *note
+A.18.2(47/2): 7382.
+   in Ada.Strings.Bounded   *note A.4.4(13): 6404, *note A.4.4(14):
+6405, *note A.4.4(15): 6406, *note A.4.4(16): 6407, *note A.4.4(17):
+6408, *note A.4.4(18): 6409, *note A.4.4(19): 6410, *note A.4.4(20):
+6411.
+   in Ada.Strings.Unbounded   *note A.4.5(12): 6466, *note A.4.5(13):
+6467, *note A.4.5(14): 6468.
 
 Append_Child
-   in Ada.Containers.Multiway_Trees   *note A.18.10(52/3): 7777.
+   in Ada.Containers.Multiway_Trees   *note A.18.10(52/3): 7878.
 
 Arccos
    in Ada.Numerics.Generic_Complex_Elementary_Functions   *note
-G.1.2(5): 8904.
-   in Ada.Numerics.Generic_Elementary_Functions   *note A.5.1(6): 6600.
+G.1.2(5): 9046.
+   in Ada.Numerics.Generic_Elementary_Functions   *note A.5.1(6): 6694.
 
 Arccosh
    in Ada.Numerics.Generic_Complex_Elementary_Functions   *note
-G.1.2(7): 8912.
-   in Ada.Numerics.Generic_Elementary_Functions   *note A.5.1(7): 6611.
+G.1.2(7): 9054.
+   in Ada.Numerics.Generic_Elementary_Functions   *note A.5.1(7): 6705.
 
 Arccot
    in Ada.Numerics.Generic_Complex_Elementary_Functions   *note
-G.1.2(5): 8906.
-   in Ada.Numerics.Generic_Elementary_Functions   *note A.5.1(6): 6605.
+G.1.2(5): 9048.
+   in Ada.Numerics.Generic_Elementary_Functions   *note A.5.1(6): 6699.
 
 Arccoth
    in Ada.Numerics.Generic_Complex_Elementary_Functions   *note
-G.1.2(7): 8914.
-   in Ada.Numerics.Generic_Elementary_Functions   *note A.5.1(7): 6613.
+G.1.2(7): 9056.
+   in Ada.Numerics.Generic_Elementary_Functions   *note A.5.1(7): 6707.
 
 Arcsin
    in Ada.Numerics.Generic_Complex_Elementary_Functions   *note
-G.1.2(5): 8903.
-   in Ada.Numerics.Generic_Elementary_Functions   *note A.5.1(6): 6599.
+G.1.2(5): 9045.
+   in Ada.Numerics.Generic_Elementary_Functions   *note A.5.1(6): 6693.
 
 Arcsinh
    in Ada.Numerics.Generic_Complex_Elementary_Functions   *note
-G.1.2(7): 8911.
-   in Ada.Numerics.Generic_Elementary_Functions   *note A.5.1(7): 6610.
+G.1.2(7): 9053.
+   in Ada.Numerics.Generic_Elementary_Functions   *note A.5.1(7): 6704.
 
 Arctan
    in Ada.Numerics.Generic_Complex_Elementary_Functions   *note
-G.1.2(5): 8905.
-   in Ada.Numerics.Generic_Elementary_Functions   *note A.5.1(6): 6602.
+G.1.2(5): 9047.
+   in Ada.Numerics.Generic_Elementary_Functions   *note A.5.1(6): 6697.
 
 Arctanh
    in Ada.Numerics.Generic_Complex_Elementary_Functions   *note
-G.1.2(7): 8913.
-   in Ada.Numerics.Generic_Elementary_Functions   *note A.5.1(7): 6612.
+G.1.2(7): 9055.
+   in Ada.Numerics.Generic_Elementary_Functions   *note A.5.1(7): 6706.
 
 Argument
-   in Ada.Command_Line   *note A.15(5): 7129.
-   in Ada.Numerics.Generic_Complex_Arrays   *note G.3.2(10/2): 9016,
-*note G.3.2(31/2): 9028.
-   in Ada.Numerics.Generic_Complex_Types   *note G.1.1(10): 8881.
+   in Ada.Command_Line   *note A.15(5): 7228.
+   in Ada.Numerics.Generic_Complex_Arrays   *note G.3.2(10/2): 9158,
+*note G.3.2(31/2): 9170.
+   in Ada.Numerics.Generic_Complex_Types   *note G.1.1(10): 9023.
 
-Argument_Count in Ada.Command_Line   *note A.15(4): 7128.
+Argument_Count in Ada.Command_Line   *note A.15(4): 7227.
 
-Assert in Ada.Assertions   *note 11.4.2(14/2): 4974.
+Assert in Ada.Assertions   *note 11.4.2(14/2): 5036.
 
 Assign
-   in Ada.Containers.Doubly_Linked_Lists   *note A.18.3(17.5/3): 7354.
-   in Ada.Containers.Hashed_Maps   *note A.18.5(17.7/3): 7450.
-   in Ada.Containers.Hashed_Sets   *note A.18.8(17.3/3): 7585.
-   in Ada.Containers.Indefinite_Holders   *note A.18.18(20/3): 7838.
-   in Ada.Containers.Multiway_Trees   *note A.18.10(32/3): 7757.
-   in Ada.Containers.Ordered_Maps   *note A.18.6(16.7/3): 7504.
-   in Ada.Containers.Ordered_Sets   *note A.18.9(16.3/3): 7659.
-   in Ada.Containers.Vectors   *note A.18.2(34.7/3): 7268.
+   in Ada.Containers.Doubly_Linked_Lists   *note A.18.3(17.5/3): 7454.
+   in Ada.Containers.Hashed_Maps   *note A.18.5(17.7/3): 7550.
+   in Ada.Containers.Hashed_Sets   *note A.18.8(17.3/3): 7685.
+   in Ada.Containers.Indefinite_Holders   *note A.18.18(20/3): 7946.
+   in Ada.Containers.Multiway_Trees   *note A.18.10(32/3): 7858.
+   in Ada.Containers.Ordered_Maps   *note A.18.6(16.7/3): 7604.
+   in Ada.Containers.Ordered_Sets   *note A.18.9(16.3/3): 7759.
+   in Ada.Containers.Vectors   *note A.18.2(34.7/3): 7368.
 
 Assign_Task
    in System.Multiprocessors.Dispatching_Domains   *note D.16.1(11/3):
-8679.
+8816.
 
-Attach_Handler in Ada.Interrupts   *note C.3.2(7): 8230.
+Attach_Handler in Ada.Interrupts   *note C.3.2(7): 8353.
 
-Base_Name in Ada.Directories   *note A.16(19/2): 7151.
+Base_Name in Ada.Directories   *note A.16(19/2): 7250.
 
 Blank_When_Zero
-   in Ada.Text_IO.Editing   *note F.3.3(7): 8845.
+   in Ada.Text_IO.Editing   *note F.3.3(7): 8987.
 
-Bounded_Slice in Ada.Strings.Bounded   *note A.4.4(28.1/2): 6321, *note
-A.4.4(28.2/2): 6322.
+Bounded_Slice in Ada.Strings.Bounded   *note A.4.4(28.1/2): 6415, *note
+A.4.4(28.2/2): 6416.
 
 Budget_Has_Expired
-   in Ada.Execution_Time.Group_Budgets   *note D.14.2(9/2): 8631.
+   in Ada.Execution_Time.Group_Budgets   *note D.14.2(9/2): 8765.
 
 Budget_Remaining
-   in Ada.Execution_Time.Group_Budgets   *note D.14.2(9/2): 8632.
+   in Ada.Execution_Time.Group_Budgets   *note D.14.2(9/2): 8766.
 
 Cancel_Handler
-   in Ada.Execution_Time.Group_Budgets   *note D.14.2(10/2): 8635.
-   in Ada.Execution_Time.Timers   *note D.14.1(7/2): 8610.
-   in Ada.Real_Time.Timing_Events   *note D.15(5/2): 8656.
+   in Ada.Execution_Time.Group_Budgets   *note D.14.2(10/2): 8769.
+   in Ada.Execution_Time.Timers   *note D.14.1(7/2): 8744.
+   in Ada.Real_Time.Timing_Events   *note D.15(5/2): 8790.
 
 Capacity
-   in Ada.Containers.Hashed_Maps   *note A.18.5(8/2): 7435.
-   in Ada.Containers.Hashed_Sets   *note A.18.8(10/2): 7576.
-   in Ada.Containers.Vectors   *note A.18.2(19/2): 7247.
+   in Ada.Containers.Hashed_Maps   *note A.18.5(8/2): 7535.
+   in Ada.Containers.Hashed_Sets   *note A.18.8(10/2): 7676.
+   in Ada.Containers.Vectors   *note A.18.2(19/2): 7347.
 
 Ceiling
-   in Ada.Containers.Ordered_Maps   *note A.18.6(41/2): 7530.
-   in Ada.Containers.Ordered_Sets   *note A.18.9(51/2): 7691, *note
-A.18.9(71/2): 7704.
+   in Ada.Containers.Ordered_Maps   *note A.18.6(41/2): 7630.
+   in Ada.Containers.Ordered_Sets   *note A.18.9(51/2): 7791, *note
+A.18.9(71/2): 7804.
 
 Character_Set_Version
-   in Ada.Wide_Characters.Handling   *note A.3.5(4/3): 6199.
+   in Ada.Wide_Characters.Handling   *note A.3.5(4/3): 6293.
 
 Child_Count
-   in Ada.Containers.Multiway_Trees   *note A.18.10(46/3): 7771.
+   in Ada.Containers.Multiway_Trees   *note A.18.10(46/3): 7872.
 
 Child_Depth
-   in Ada.Containers.Multiway_Trees   *note A.18.10(47/3): 7772.
+   in Ada.Containers.Multiway_Trees   *note A.18.10(47/3): 7873.
 
 Clear
-   in Ada.Containers.Doubly_Linked_Lists   *note A.18.3(13/2): 7346.
-   in Ada.Containers.Hashed_Maps   *note A.18.5(12/2): 7439.
-   in Ada.Containers.Hashed_Sets   *note A.18.8(14/2): 7580.
-   in Ada.Containers.Indefinite_Holders   *note A.18.18(11/3): 7829.
-   in Ada.Containers.Multiway_Trees   *note A.18.10(23/3): 7748.
-   in Ada.Containers.Ordered_Maps   *note A.18.6(11/2): 7493.
-   in Ada.Containers.Ordered_Sets   *note A.18.9(13/2): 7654.
-   in Ada.Containers.Vectors   *note A.18.2(24/2): 7252.
-   in Ada.Environment_Variables   *note A.17(7/2): 7211.
+   in Ada.Containers.Doubly_Linked_Lists   *note A.18.3(13/2): 7446.
+   in Ada.Containers.Hashed_Maps   *note A.18.5(12/2): 7539.
+   in Ada.Containers.Hashed_Sets   *note A.18.8(14/2): 7680.
+   in Ada.Containers.Indefinite_Holders   *note A.18.18(11/3): 7937.
+   in Ada.Containers.Multiway_Trees   *note A.18.10(23/3): 7849.
+   in Ada.Containers.Ordered_Maps   *note A.18.6(11/2): 7593.
+   in Ada.Containers.Ordered_Sets   *note A.18.9(13/2): 7754.
+   in Ada.Containers.Vectors   *note A.18.2(24/2): 7352.
+   in Ada.Environment_Variables   *note A.17(7/2): 7309.
 
 Clock
-   in Ada.Calendar   *note 9.6(12): 4464.
-   in Ada.Execution_Time   *note D.14(5/2): 8591.
-   in Ada.Execution_Time.Interrupts   *note D.14.3(3/3): 8647.
-   in Ada.Real_Time   *note D.8(6): 8532.
+   in Ada.Calendar   *note 9.6(12): 4523.
+   in Ada.Execution_Time   *note D.14(5/2): 8725.
+   in Ada.Execution_Time.Interrupts   *note D.14.3(3/3): 8781.
+   in Ada.Real_Time   *note D.8(6): 8665.
 
 Clock_For_Interrupts
-   in Ada.Execution_Time   *note D.14(9.3/3): 8596.
+   in Ada.Execution_Time   *note D.14(9.3/3): 8730.
 
 Close
-   in Ada.Direct_IO   *note A.8.4(8): 6814.
-   in Ada.Sequential_IO   *note A.8.1(8): 6786.
-   in Ada.Streams.Stream_IO   *note A.12.1(10): 7073.
-   in Ada.Text_IO   *note A.10.1(11): 6871.
+   in Ada.Direct_IO   *note A.8.4(8): 6910.
+   in Ada.Sequential_IO   *note A.8.1(8): 6880.
+   in Ada.Streams.Stream_IO   *note A.12.1(10): 7171.
+   in Ada.Text_IO   *note A.10.1(11): 6969.
 
-Col in Ada.Text_IO   *note A.10.1(37): 6924.
+Col in Ada.Text_IO   *note A.10.1(37): 7022.
 
-Command_Name in Ada.Command_Line   *note A.15(6): 7130.
+Command_Name in Ada.Command_Line   *note A.15(6): 7229.
 
 Compose
-   in Ada.Directories   *note A.16(20/2): 7152.
+   in Ada.Directories   *note A.16(20/2): 7251.
    in Ada.Directories.Hierarchical_File_Names   *note A.16.1(14/3):
-7202.
+7301.
 
 Compose_From_Cartesian
-   in Ada.Numerics.Generic_Complex_Arrays   *note G.3.2(9/2): 9012,
-*note G.3.2(29/2): 9026.
-   in Ada.Numerics.Generic_Complex_Types   *note G.1.1(8): 8879.
+   in Ada.Numerics.Generic_Complex_Arrays   *note G.3.2(9/2): 9155,
+*note G.3.2(29/2): 9167.
+   in Ada.Numerics.Generic_Complex_Types   *note G.1.1(8): 9020.
 
 Compose_From_Polar
-   in Ada.Numerics.Generic_Complex_Arrays   *note G.3.2(11/2): 9018,
-*note G.3.2(32/2): 9031.
-   in Ada.Numerics.Generic_Complex_Types   *note G.1.1(11): 8884.
+   in Ada.Numerics.Generic_Complex_Arrays   *note G.3.2(11/2): 9159,
+*note G.3.2(32/2): 9172.
+   in Ada.Numerics.Generic_Complex_Types   *note G.1.1(11): 9025.
 
 Conjugate
-   in Ada.Numerics.Generic_Complex_Arrays   *note G.3.2(13/2): 9019,
-*note G.3.2(34/2): 9032.
-   in Ada.Numerics.Generic_Complex_Types   *note G.1.1(12): 8885, *note
-G.1.1(15): 8886.
+   in Ada.Numerics.Generic_Complex_Arrays   *note G.3.2(13/2): 9161,
+*note G.3.2(34/2): 9174.
+   in Ada.Numerics.Generic_Complex_Types   *note G.1.1(12): 9027, *note
+G.1.1(15): 9028.
 
 Constant_Reference
-   in Ada.Containers.Doubly_Linked_Lists   *note A.18.3(17.3/3): 7352.
-   in Ada.Containers.Hashed_Maps   *note A.18.5(17.3/3): 7446, *note
-A.18.5(17.5/3): 7448.
-   in Ada.Containers.Hashed_Sets   *note A.18.8(17.2/3): 7584, *note
-A.18.8(58.3/3): 7625.
-   in Ada.Containers.Indefinite_Holders   *note A.18.18(18/3): 7836.
-   in Ada.Containers.Multiway_Trees   *note A.18.10(30/3): 7755.
-   in Ada.Containers.Ordered_Maps   *note A.18.6(16.3/3): 7500, *note
-A.18.6(16.5/3): 7502.
-   in Ada.Containers.Ordered_Sets   *note A.18.9(16.2/3): 7658, *note
-A.18.9(73.3/3): 7709.
-   in Ada.Containers.Vectors   *note A.18.2(34.3/3): 7264, *note
-A.18.2(34.5/3): 7266.
+   in Ada.Containers.Doubly_Linked_Lists   *note A.18.3(17.3/3): 7452.
+   in Ada.Containers.Hashed_Maps   *note A.18.5(17.3/3): 7546, *note
+A.18.5(17.5/3): 7548.
+   in Ada.Containers.Hashed_Sets   *note A.18.8(17.2/3): 7684, *note
+A.18.8(58.3/3): 7725.
+   in Ada.Containers.Indefinite_Holders   *note A.18.18(18/3): 7944.
+   in Ada.Containers.Multiway_Trees   *note A.18.10(30/3): 7856.
+   in Ada.Containers.Ordered_Maps   *note A.18.6(16.3/3): 7600, *note
+A.18.6(16.5/3): 7602.
+   in Ada.Containers.Ordered_Sets   *note A.18.9(16.2/3): 7758, *note
+A.18.9(73.3/3): 7809.
+   in Ada.Containers.Vectors   *note A.18.2(34.3/3): 7364, *note
+A.18.2(34.5/3): 7366.
 
 Containing_Directory
-   in Ada.Directories   *note A.16(17/2): 7149.
+   in Ada.Directories   *note A.16(17/2): 7248.
    in Ada.Directories.Hierarchical_File_Names   *note A.16.1(11/3):
-7199.
+7298.
 
 Contains
-   in Ada.Containers.Doubly_Linked_Lists   *note A.18.3(43/2): 7381.
-   in Ada.Containers.Hashed_Maps   *note A.18.5(32/2): 7466.
-   in Ada.Containers.Hashed_Sets   *note A.18.8(44/2): 7609, *note
-A.18.8(57/2): 7621.
-   in Ada.Containers.Multiway_Trees   *note A.18.10(41/3): 7766.
-   in Ada.Containers.Ordered_Maps   *note A.18.6(42/2): 7531.
-   in Ada.Containers.Ordered_Sets   *note A.18.9(52/2): 7692, *note
-A.18.9(72/2): 7705.
-   in Ada.Containers.Vectors   *note A.18.2(71/2): 7306.
+   in Ada.Containers.Doubly_Linked_Lists   *note A.18.3(43/2): 7481.
+   in Ada.Containers.Hashed_Maps   *note A.18.5(32/2): 7566.
+   in Ada.Containers.Hashed_Sets   *note A.18.8(44/2): 7709, *note
+A.18.8(57/2): 7721.
+   in Ada.Containers.Multiway_Trees   *note A.18.10(41/3): 7867.
+   in Ada.Containers.Ordered_Maps   *note A.18.6(42/2): 7631.
+   in Ada.Containers.Ordered_Sets   *note A.18.9(52/2): 7792, *note
+A.18.9(72/2): 7805.
+   in Ada.Containers.Vectors   *note A.18.2(71/2): 7406.
 
 Continue
-   in Ada.Asynchronous_Task_Control   *note D.11(3/2): 8574.
+   in Ada.Asynchronous_Task_Control   *note D.11(3/2): 8707.
 
 Convert
-   in Ada.Strings.UTF_Encoding.Conversions   *note A.4.11(16/3): 6548,
-*note A.4.11(17/3): 6549, *note A.4.11(18/3): 6550, *note A.4.11(19/3):
-6551, *note A.4.11(20/3): 6552.
+   in Ada.Strings.UTF_Encoding.Conversions   *note A.4.11(16/3): 6642,
+*note A.4.11(17/3): 6643, *note A.4.11(18/3): 6644, *note A.4.11(19/3):
+6645, *note A.4.11(20/3): 6646.
 
 Copy
-   in Ada.Containers.Doubly_Linked_Lists   *note A.18.3(17.6/3): 7355.
-   in Ada.Containers.Hashed_Maps   *note A.18.5(17.8/3): 7451.
-   in Ada.Containers.Hashed_Sets   *note A.18.8(17.4/3): 7586.
-   in Ada.Containers.Indefinite_Holders   *note A.18.18(21/3): 7839,
-*note A.18.20(10/3): 7853, *note A.18.21(13/3): 7858, *note
-A.18.22(10/3): 7862, *note A.18.23(13/3): 7867, *note A.18.24(10/3):
-7871.
-   in Ada.Containers.Multiway_Trees   *note A.18.10(33/3): 7758.
-   in Ada.Containers.Ordered_Maps   *note A.18.6(16.8/3): 7505.
-   in Ada.Containers.Ordered_Sets   *note A.18.9(16.4/3): 7660.
-   in Ada.Containers.Vectors   *note A.18.2(34.8/3): 7269.
-
-Copy_Array in Interfaces.C.Pointers   *note B.3.2(15): 8085.
-
-Copy_File in Ada.Directories   *note A.16(13/2): 7146.
+   in Ada.Containers.Doubly_Linked_Lists   *note A.18.3(17.6/3): 7455.
+   in Ada.Containers.Hashed_Maps   *note A.18.5(17.8/3): 7551.
+   in Ada.Containers.Hashed_Sets   *note A.18.8(17.4/3): 7686.
+   in Ada.Containers.Indefinite_Holders   *note A.18.18(21/3): 7947,
+*note A.18.20(10/3): 7962, *note A.18.21(13/3): 7967, *note
+A.18.22(10/3): 7971, *note A.18.23(13/3): 7976, *note A.18.24(10/3):
+7980.
+   in Ada.Containers.Multiway_Trees   *note A.18.10(33/3): 7859.
+   in Ada.Containers.Ordered_Maps   *note A.18.6(16.8/3): 7605.
+   in Ada.Containers.Ordered_Sets   *note A.18.9(16.4/3): 7760.
+   in Ada.Containers.Vectors   *note A.18.2(34.8/3): 7369.
+
+Copy_Array in Interfaces.C.Pointers   *note B.3.2(15): 8208.
+
+Copy_File in Ada.Directories   *note A.16(13/2): 7245.
 
 Copy_Subtree
-   in Ada.Containers.Multiway_Trees   *note A.18.10(54/3): 7779.
+   in Ada.Containers.Multiway_Trees   *note A.18.10(54/3): 7880.
 
 Copy_Terminated_Array
-   in Interfaces.C.Pointers   *note B.3.2(14): 8084.
+   in Interfaces.C.Pointers   *note B.3.2(14): 8207.
 
 Cos
    in Ada.Numerics.Generic_Complex_Elementary_Functions   *note
-G.1.2(4): 8900.
-   in Ada.Numerics.Generic_Elementary_Functions   *note A.5.1(5): 6593.
+G.1.2(4): 9042.
+   in Ada.Numerics.Generic_Elementary_Functions   *note A.5.1(5): 6686.
 
 Cosh
    in Ada.Numerics.Generic_Complex_Elementary_Functions   *note
-G.1.2(6): 8908.
-   in Ada.Numerics.Generic_Elementary_Functions   *note A.5.1(7): 6607.
+G.1.2(6): 9050.
+   in Ada.Numerics.Generic_Elementary_Functions   *note A.5.1(7): 6701.
 
 Cot
    in Ada.Numerics.Generic_Complex_Elementary_Functions   *note
-G.1.2(4): 8902.
-   in Ada.Numerics.Generic_Elementary_Functions   *note A.5.1(5): 6597.
+G.1.2(4): 9044.
+   in Ada.Numerics.Generic_Elementary_Functions   *note A.5.1(5): 6690.
 
 Coth
    in Ada.Numerics.Generic_Complex_Elementary_Functions   *note
-G.1.2(6): 8910.
-   in Ada.Numerics.Generic_Elementary_Functions   *note A.5.1(7): 6609.
+G.1.2(6): 9052.
+   in Ada.Numerics.Generic_Elementary_Functions   *note A.5.1(7): 6703.
 
 Count
-   in Ada.Strings.Bounded   *note A.4.4(48): 6331, *note A.4.4(49):
-6332, *note A.4.4(50): 6333.
-   in Ada.Strings.Fixed   *note A.4.3(13): 6272, *note A.4.3(14): 6273,
-*note A.4.3(15): 6274.
-   in Ada.Strings.Unbounded   *note A.4.5(43): 6388, *note A.4.5(44):
-6389, *note A.4.5(45): 6390.
+   in Ada.Strings.Bounded   *note A.4.4(48): 6425, *note A.4.4(49):
+6426, *note A.4.4(50): 6427.
+   in Ada.Strings.Fixed   *note A.4.3(13): 6366, *note A.4.3(14): 6367,
+*note A.4.3(15): 6368.
+   in Ada.Strings.Unbounded   *note A.4.5(43): 6482, *note A.4.5(44):
+6483, *note A.4.5(45): 6484.
 
-Country in Ada.Locales   *note A.19(6/3): 7931.
+Country in Ada.Locales   *note A.19(6/3): 8040.
 
 Create
-   in Ada.Direct_IO   *note A.8.4(6): 6812.
-   in Ada.Sequential_IO   *note A.8.1(6): 6784.
-   in Ada.Streams.Stream_IO   *note A.12.1(8): 7071.
-   in Ada.Text_IO   *note A.10.1(9): 6869.
-   in System.Multiprocessors.Dispatching_Domains   *note D.16.1(7/3):
-8675.
+   in Ada.Direct_IO   *note A.8.4(6): 6908.
+   in Ada.Sequential_IO   *note A.8.1(6): 6878.
+   in Ada.Streams.Stream_IO   *note A.12.1(8): 7169.
+   in Ada.Text_IO   *note A.10.1(9): 6967.
+   in System.Multiprocessors.Dispatching_Domains   *note D.16.1(7/4):
+8809, *note D.16.1(9.2/4): 8813.
 
-Create_Directory in Ada.Directories   *note A.16(7/2): 7140.
+Create_Directory in Ada.Directories   *note A.16(7/2): 7239.
 
-Create_Path in Ada.Directories   *note A.16(9/2): 7142.
+Create_Path in Ada.Directories   *note A.16(9/2): 7241.
 
 Create_Subpool
-   in System.Storage_Pools.Subpools   *note 13.11.4(7/3): 5698.
+   in System.Storage_Pools.Subpools   *note 13.11.4(7/3): 5778.
 
-Current_Directory in Ada.Directories   *note A.16(5/2): 7138.
+Current_Directory in Ada.Directories   *note A.16(5/2): 7237.
 
-Current_Error in Ada.Text_IO   *note A.10.1(17): 6887, *note A.10.1(20):
-6894.
+Current_Error in Ada.Text_IO   *note A.10.1(17): 6985, *note A.10.1(20):
+6992.
 
 Current_Handler
-   in Ada.Execution_Time.Group_Budgets   *note D.14.2(10/2): 8634.
-   in Ada.Execution_Time.Timers   *note D.14.1(7/2): 8609.
-   in Ada.Interrupts   *note C.3.2(6): 8229.
-   in Ada.Real_Time.Timing_Events   *note D.15(5/2): 8655.
+   in Ada.Execution_Time.Group_Budgets   *note D.14.2(10/2): 8768.
+   in Ada.Execution_Time.Timers   *note D.14.1(7/2): 8743.
+   in Ada.Interrupts   *note C.3.2(6): 8352.
+   in Ada.Real_Time.Timing_Events   *note D.15(5/2): 8789.
 
-Current_Input in Ada.Text_IO   *note A.10.1(17): 6885, *note A.10.1(20):
-6892.
+Current_Input in Ada.Text_IO   *note A.10.1(17): 6983, *note A.10.1(20):
+6990.
 
-Current_Output in Ada.Text_IO   *note A.10.1(17): 6886, *note
-A.10.1(20): 6893.
+Current_Output in Ada.Text_IO   *note A.10.1(17): 6984, *note
+A.10.1(20): 6991.
 
 Current_State
-   in Ada.Synchronous_Task_Control   *note D.10(4): 8558.
+   in Ada.Synchronous_Task_Control   *note D.10(4): 8691.
 
 Current_Task
-   in Ada.Task_Identification   *note C.7.1(3/3): 8276.
+   in Ada.Task_Identification   *note C.7.1(3/3): 8404.
 
 Current_Task_Fallback_Handler
-   in Ada.Task_Termination   *note C.7.3(5/2): 8309.
+   in Ada.Task_Termination   *note C.7.3(5/2): 8437.
 
 Current_Use
-   in Ada.Containers.Bounded_Priority_Queues   *note A.18.31(7/3): 7921.
+   in Ada.Containers.Bounded_Priority_Queues   *note A.18.31(7/3): 8030.
    in Ada.Containers.Bounded_Synchronized_Queues   *note A.18.29(6/3):
-7905.
+8014.
    in Ada.Containers.Synchronized_Queue_Interfaces   *note A.18.27(7/3):
-7890.
+7999.
    in Ada.Containers.Unbounded_Priority_Queues   *note A.18.30(7/3):
-7913.
+8022.
    in Ada.Containers.Unbounded_Synchronized_Queues   *note A.18.28(6/3):
-7898.
+8007.
 
 Day
-   in Ada.Calendar   *note 9.6(13): 4467.
-   in Ada.Calendar.Formatting   *note 9.6.1(23/2): 4509.
+   in Ada.Calendar   *note 9.6(13): 4526.
+   in Ada.Calendar.Formatting   *note 9.6.1(23/2): 4568.
 
 Day_of_Week
-   in Ada.Calendar.Formatting   *note 9.6.1(18/2): 4502.
+   in Ada.Calendar.Formatting   *note 9.6.1(18/2): 4561.
 
 Deallocate
-   in System.Storage_Pools   *note 13.11(8): 5625.
-   in System.Storage_Pools.Subpools   *note 13.11.4(15/3): 5705.
+   in System.Storage_Pools   *note 13.11(8): 5698.
+   in System.Storage_Pools.Subpools   *note 13.11.4(15/3): 5785.
 
 Deallocate_Subpool
-   in System.Storage_Pools.Subpools   *note 13.11.4(12/3): 5702.
+   in System.Storage_Pools.Subpools   *note 13.11.4(12/3): 5782.
 
 Decode
-   in Ada.Strings.UTF_Encoding.Strings   *note A.4.11(26/3): 6557, *note
-A.4.11(27/3): 6558, *note A.4.11(28/3): 6559.
-   in Ada.Strings.UTF_Encoding.Wide_Strings   *note A.4.11(34/3): 6564,
-*note A.4.11(35/3): 6565, *note A.4.11(36/3): 6566.
+   in Ada.Strings.UTF_Encoding.Strings   *note A.4.11(26/3): 6651, *note
+A.4.11(27/3): 6652, *note A.4.11(28/3): 6653.
+   in Ada.Strings.UTF_Encoding.Wide_Strings   *note A.4.11(34/3): 6658,
+*note A.4.11(35/3): 6659, *note A.4.11(36/3): 6660.
    in Ada.Strings.UTF_Encoding.Wide_Wide_Strings   *note A.4.11(42/3):
-6571, *note A.4.11(43/3): 6572, *note A.4.11(44/3): 6573.
+6665, *note A.4.11(43/3): 6666, *note A.4.11(44/3): 6667.
 
-Decrement in Interfaces.C.Pointers   *note B.3.2(11/3): 8082.
+Decrement in Interfaces.C.Pointers   *note B.3.2(11/3): 8205.
 
 Default_Modulus
-   in Ada.Containers.Indefinite_Holders   *note A.18.21(10/3): 7857,
-*note A.18.23(10/3): 7866.
+   in Ada.Containers.Indefinite_Holders   *note A.18.21(10/3): 7966,
+*note A.18.23(10/3): 7975.
 
 Default_Subpool_for_Pool
-   in System.Storage_Pools.Subpools   *note 13.11.4(13/3): 5703.
+   in System.Storage_Pools.Subpools   *note 13.11.4(13/3): 5783.
 
 Delay_Until_And_Set_CPU
    in System.Multiprocessors.Dispatching_Domains   *note D.16.1(14/3):
-8682.
+8819.
 
 Delay_Until_And_Set_Deadline
-   in Ada.Dispatching.EDF   *note D.2.6(9/2): 8399.
+   in Ada.Dispatching.EDF   *note D.2.6(9/2): 8527.
 
 Delete
-   in Ada.Containers.Doubly_Linked_Lists   *note A.18.3(24/2): 7362.
-   in Ada.Containers.Hashed_Maps   *note A.18.5(25/2): 7459, *note
-A.18.5(26/2): 7460.
-   in Ada.Containers.Hashed_Sets   *note A.18.8(24/2): 7593, *note
-A.18.8(25/2): 7594, *note A.18.8(55/2): 7619.
-   in Ada.Containers.Ordered_Maps   *note A.18.6(24/2): 7513, *note
-A.18.6(25/2): 7514.
-   in Ada.Containers.Ordered_Sets   *note A.18.9(23/2): 7667, *note
-A.18.9(24/2): 7668, *note A.18.9(68/2): 7701.
-   in Ada.Containers.Vectors   *note A.18.2(50/2): 7285, *note
-A.18.2(51/2): 7286.
-   in Ada.Direct_IO   *note A.8.4(8): 6815.
-   in Ada.Sequential_IO   *note A.8.1(8): 6787.
-   in Ada.Streams.Stream_IO   *note A.12.1(10): 7074.
-   in Ada.Strings.Bounded   *note A.4.4(64): 6346, *note A.4.4(65):
-6347.
-   in Ada.Strings.Fixed   *note A.4.3(29): 6287, *note A.4.3(30): 6288.
-   in Ada.Strings.Unbounded   *note A.4.5(59): 6403, *note A.4.5(60):
-6404.
-   in Ada.Text_IO   *note A.10.1(11): 6872.
+   in Ada.Containers.Doubly_Linked_Lists   *note A.18.3(24/2): 7462.
+   in Ada.Containers.Hashed_Maps   *note A.18.5(25/2): 7559, *note
+A.18.5(26/2): 7560.
+   in Ada.Containers.Hashed_Sets   *note A.18.8(24/2): 7693, *note
+A.18.8(25/2): 7694, *note A.18.8(55/2): 7719.
+   in Ada.Containers.Ordered_Maps   *note A.18.6(24/2): 7613, *note
+A.18.6(25/2): 7614.
+   in Ada.Containers.Ordered_Sets   *note A.18.9(23/2): 7767, *note
+A.18.9(24/2): 7768, *note A.18.9(68/2): 7801.
+   in Ada.Containers.Vectors   *note A.18.2(50/2): 7385, *note
+A.18.2(51/2): 7386.
+   in Ada.Direct_IO   *note A.8.4(8): 6911.
+   in Ada.Sequential_IO   *note A.8.1(8): 6881.
+   in Ada.Streams.Stream_IO   *note A.12.1(10): 7172.
+   in Ada.Strings.Bounded   *note A.4.4(64): 6440, *note A.4.4(65):
+6441.
+   in Ada.Strings.Fixed   *note A.4.3(29): 6381, *note A.4.3(30): 6382.
+   in Ada.Strings.Unbounded   *note A.4.5(59): 6497, *note A.4.5(60):
+6498.
+   in Ada.Text_IO   *note A.10.1(11): 6970.
 
 Delete_Children
-   in Ada.Containers.Multiway_Trees   *note A.18.10(53/3): 7778.
+   in Ada.Containers.Multiway_Trees   *note A.18.10(53/3): 7879.
 
-Delete_Directory in Ada.Directories   *note A.16(8/2): 7141.
+Delete_Directory in Ada.Directories   *note A.16(8/2): 7240.
 
-Delete_File in Ada.Directories   *note A.16(11/2): 7144.
+Delete_File in Ada.Directories   *note A.16(11/2): 7243.
 
 Delete_First
-   in Ada.Containers.Doubly_Linked_Lists   *note A.18.3(25/2): 7363.
-   in Ada.Containers.Ordered_Maps   *note A.18.6(26/2): 7515.
-   in Ada.Containers.Ordered_Sets   *note A.18.9(25/2): 7669.
-   in Ada.Containers.Vectors   *note A.18.2(52/2): 7287.
+   in Ada.Containers.Doubly_Linked_Lists   *note A.18.3(25/2): 7463.
+   in Ada.Containers.Ordered_Maps   *note A.18.6(26/2): 7615.
+   in Ada.Containers.Ordered_Sets   *note A.18.9(25/2): 7769.
+   in Ada.Containers.Vectors   *note A.18.2(52/2): 7387.
 
 Delete_Last
-   in Ada.Containers.Doubly_Linked_Lists   *note A.18.3(26/2): 7364.
-   in Ada.Containers.Ordered_Maps   *note A.18.6(27/2): 7516.
-   in Ada.Containers.Ordered_Sets   *note A.18.9(26/2): 7670.
-   in Ada.Containers.Vectors   *note A.18.2(53/2): 7288.
+   in Ada.Containers.Doubly_Linked_Lists   *note A.18.3(26/2): 7464.
+   in Ada.Containers.Ordered_Maps   *note A.18.6(27/2): 7616.
+   in Ada.Containers.Ordered_Sets   *note A.18.9(26/2): 7770.
+   in Ada.Containers.Vectors   *note A.18.2(53/2): 7388.
 
 Delete_Leaf
-   in Ada.Containers.Multiway_Trees   *note A.18.10(35/3): 7760.
+   in Ada.Containers.Multiway_Trees   *note A.18.10(35/3): 7861.
 
 Delete_Subtree
-   in Ada.Containers.Multiway_Trees   *note A.18.10(36/3): 7761.
+   in Ada.Containers.Multiway_Trees   *note A.18.10(36/3): 7862.
 
-Delete_Tree in Ada.Directories   *note A.16(10/2): 7143.
+Delete_Tree in Ada.Directories   *note A.16(10/2): 7242.
 
 Depth
-   in Ada.Containers.Multiway_Trees   *note A.18.10(19/3): 7744.
+   in Ada.Containers.Multiway_Trees   *note A.18.10(19/3): 7845.
 
 Dequeue
-   in Ada.Containers.Bounded_Priority_Queues   *note A.18.31(5/3): 7919.
+   in Ada.Containers.Bounded_Priority_Queues   *note A.18.31(5/3): 8028.
    in Ada.Containers.Bounded_Synchronized_Queues   *note A.18.29(5/3):
-7904.
+8013.
    in Ada.Containers.Synchronized_Queue_Interfaces   *note A.18.27(6/3):
-7889.
+7998.
    in Ada.Containers.Unbounded_Priority_Queues   *note A.18.30(5/3):
-7911.
+8020.
    in Ada.Containers.Unbounded_Synchronized_Queues   *note A.18.28(5/3):
-7897.
+8006.
 
 Dequeue_Only_High_Priority
-   in Ada.Containers.Bounded_Priority_Queues   *note A.18.31(6/3): 7920.
+   in Ada.Containers.Bounded_Priority_Queues   *note A.18.31(6/3): 8029.
    in Ada.Containers.Unbounded_Priority_Queues   *note A.18.30(6/3):
-7912.
+8021.
 
 Dereference_Error
-   in Interfaces.C.Strings   *note B.3.1(12): 8061.
+   in Interfaces.C.Strings   *note B.3.1(12): 8184.
 
-Descendant_Tag in Ada.Tags   *note 3.9(7.1/2): 2237.
+Descendant_Tag in Ada.Tags   *note 3.9(7.1/2): 2255.
 
-Detach_Handler in Ada.Interrupts   *note C.3.2(9): 8232.
+Detach_Handler in Ada.Interrupts   *note C.3.2(9): 8355.
 
 Determinant
-   in Ada.Numerics.Generic_Complex_Arrays   *note G.3.2(46/2): 9037.
-   in Ada.Numerics.Generic_Real_Arrays   *note G.3.1(24/2): 8996.
+   in Ada.Numerics.Generic_Complex_Arrays   *note G.3.2(46/2): 9179.
+   in Ada.Numerics.Generic_Real_Arrays   *note G.3.1(24/2): 9138.
 
 Difference
-   in Ada.Calendar.Arithmetic   *note 9.6.1(12/2): 4492.
-   in Ada.Containers.Hashed_Sets   *note A.18.8(32/2): 7599, *note
-A.18.8(33/2): 7600.
-   in Ada.Containers.Ordered_Sets   *note A.18.9(33/2): 7675, *note
-A.18.9(34/2): 7676.
+   in Ada.Calendar.Arithmetic   *note 9.6.1(12/2): 4551.
+   in Ada.Containers.Hashed_Sets   *note A.18.8(32/2): 7699, *note
+A.18.8(33/2): 7700.
+   in Ada.Containers.Ordered_Sets   *note A.18.9(33/2): 7775, *note
+A.18.9(34/2): 7776.
 
-Divide in Ada.Decimal   *note F.2(6/3): 8835.
+Divide in Ada.Decimal   *note F.2(6/3): 8977.
 
-Do_APC in System.RPC   *note E.5(10): 8815.
+Do_APC in System.RPC   *note E.5(10): 8957.
 
-Do_RPC in System.RPC   *note E.5(9): 8814.
+Do_RPC in System.RPC   *note E.5(9): 8956.
 
 Eigensystem
-   in Ada.Numerics.Generic_Complex_Arrays   *note G.3.2(49/2): 9039.
-   in Ada.Numerics.Generic_Real_Arrays   *note G.3.1(27/2): 8998.
+   in Ada.Numerics.Generic_Complex_Arrays   *note G.3.2(49/2): 9181.
+   in Ada.Numerics.Generic_Real_Arrays   *note G.3.1(27/2): 9140.
 
 Eigenvalues
-   in Ada.Numerics.Generic_Complex_Arrays   *note G.3.2(48/2): 9038.
-   in Ada.Numerics.Generic_Real_Arrays   *note G.3.1(26/2): 8997.
+   in Ada.Numerics.Generic_Complex_Arrays   *note G.3.2(48/2): 9180.
+   in Ada.Numerics.Generic_Real_Arrays   *note G.3.1(26/2): 9139.
 
 Element
-   in Ada.Containers.Doubly_Linked_Lists   *note A.18.3(14/2): 7347.
-   in Ada.Containers.Hashed_Maps   *note A.18.5(14/2): 7441, *note
-A.18.5(31/2): 7465.
-   in Ada.Containers.Hashed_Sets   *note A.18.8(15/2): 7581, *note
-A.18.8(52/2): 7616.
-   in Ada.Containers.Indefinite_Holders   *note A.18.18(12/3): 7830.
-   in Ada.Containers.Multiway_Trees   *note A.18.10(24/3): 7749.
-   in Ada.Containers.Ordered_Maps   *note A.18.6(13/2): 7495, *note
-A.18.6(39/2): 7528.
-   in Ada.Containers.Ordered_Sets   *note A.18.9(14/2): 7655, *note
-A.18.9(65/2): 7698.
-   in Ada.Containers.Vectors   *note A.18.2(27/2): 7255, *note
-A.18.2(28/2): 7256.
-   in Ada.Strings.Bounded   *note A.4.4(26): 6318.
-   in Ada.Strings.Unbounded   *note A.4.5(20): 6375.
+   in Ada.Containers.Doubly_Linked_Lists   *note A.18.3(14/2): 7447.
+   in Ada.Containers.Hashed_Maps   *note A.18.5(14/2): 7541, *note
+A.18.5(31/2): 7565.
+   in Ada.Containers.Hashed_Sets   *note A.18.8(15/2): 7681, *note
+A.18.8(52/2): 7716.
+   in Ada.Containers.Indefinite_Holders   *note A.18.18(12/3): 7938.
+   in Ada.Containers.Multiway_Trees   *note A.18.10(24/3): 7850.
+   in Ada.Containers.Ordered_Maps   *note A.18.6(13/2): 7595, *note
+A.18.6(39/2): 7628.
+   in Ada.Containers.Ordered_Sets   *note A.18.9(14/2): 7755, *note
+A.18.9(65/2): 7798.
+   in Ada.Containers.Vectors   *note A.18.2(27/2): 7355, *note
+A.18.2(28/2): 7356.
+   in Ada.Strings.Bounded   *note A.4.4(26): 6412.
+   in Ada.Strings.Unbounded   *note A.4.5(20): 6469.
 
 Encode
-   in Ada.Strings.UTF_Encoding.Strings   *note A.4.11(23/3): 6554, *note
-A.4.11(24/3): 6555, *note A.4.11(25/3): 6556.
-   in Ada.Strings.UTF_Encoding.Wide_Strings   *note A.4.11(31/3): 6561,
-*note A.4.11(32/3): 6562, *note A.4.11(33/3): 6563.
+   in Ada.Strings.UTF_Encoding.Strings   *note A.4.11(23/3): 6648, *note
+A.4.11(24/3): 6649, *note A.4.11(25/3): 6650.
+   in Ada.Strings.UTF_Encoding.Wide_Strings   *note A.4.11(31/3): 6655,
+*note A.4.11(32/3): 6656, *note A.4.11(33/3): 6657.
    in Ada.Strings.UTF_Encoding.Wide_Wide_Strings   *note A.4.11(39/3):
-6568, *note A.4.11(40/3): 6569, *note A.4.11(41/3): 6570.
+6662, *note A.4.11(40/3): 6663, *note A.4.11(41/3): 6664.
 
-Encoding in Ada.Strings.UTF_Encoding   *note A.4.11(13/3): 6546.
+Encoding in Ada.Strings.UTF_Encoding   *note A.4.11(13/3): 6640.
 
 End_Of_File
-   in Ada.Direct_IO   *note A.8.4(16): 6829.
-   in Ada.Sequential_IO   *note A.8.1(13): 6796.
-   in Ada.Streams.Stream_IO   *note A.12.1(12): 7081.
-   in Ada.Text_IO   *note A.10.1(34): 6917.
+   in Ada.Direct_IO   *note A.8.4(16): 6926.
+   in Ada.Sequential_IO   *note A.8.1(13): 6891.
+   in Ada.Streams.Stream_IO   *note A.12.1(12): 7179.
+   in Ada.Text_IO   *note A.10.1(34): 7015.
 
-End_Of_Line in Ada.Text_IO   *note A.10.1(30): 6910.
+End_Of_Line in Ada.Text_IO   *note A.10.1(30): 7008.
 
-End_Of_Page in Ada.Text_IO   *note A.10.1(33): 6915.
+End_Of_Page in Ada.Text_IO   *note A.10.1(33): 7014.
 
-End_Search in Ada.Directories   *note A.16(33/2): 7165.
+End_Search in Ada.Directories   *note A.16(33/2): 7264.
 
 Enqueue
-   in Ada.Containers.Bounded_Priority_Queues   *note A.18.31(5/3): 7918.
+   in Ada.Containers.Bounded_Priority_Queues   *note A.18.31(5/3): 8027.
    in Ada.Containers.Bounded_Synchronized_Queues   *note A.18.29(5/3):
-7903.
+8012.
    in Ada.Containers.Synchronized_Queue_Interfaces   *note A.18.27(5/3):
-7888.
+7997.
    in Ada.Containers.Unbounded_Priority_Queues   *note A.18.30(5/3):
-7910.
+8019.
    in Ada.Containers.Unbounded_Synchronized_Queues   *note A.18.28(5/3):
-7896.
+8005.
 
 Environment_Task
-   in Ada.Task_Identification   *note C.7.1(3/3): 8277.
+   in Ada.Task_Identification   *note C.7.1(3/3): 8405.
 
 Equal_Case_Insensitive
-   child of Ada.Strings   *note A.4.10(2/3): 6527.
-   child of Ada.Strings.Bounded   *note A.4.10(7/3): 6529.
-   child of Ada.Strings.Fixed   *note A.4.10(5/3): 6528.
-   child of Ada.Strings.Unbounded   *note A.4.10(10/3): 6530.
+   child of Ada.Strings   *note A.4.10(2/3): 6621.
+   child of Ada.Strings.Bounded   *note A.4.10(7/3): 6623.
+   child of Ada.Strings.Fixed   *note A.4.10(5/3): 6622.
+   child of Ada.Strings.Unbounded   *note A.4.10(10/3): 6624.
 
 Equal_Subtree
-   in Ada.Containers.Multiway_Trees   *note A.18.10(14/3): 7740.
+   in Ada.Containers.Multiway_Trees   *note A.18.10(14/3): 7841.
 
 Equivalent_Elements
-   in Ada.Containers.Hashed_Sets   *note A.18.8(46/2): 7610, *note
-A.18.8(47/2): 7611, *note A.18.8(48/2): 7612.
-   in Ada.Containers.Ordered_Sets   *note A.18.9(3/2): 7643.
+   in Ada.Containers.Hashed_Sets   *note A.18.8(46/2): 7710, *note
+A.18.8(47/2): 7711, *note A.18.8(48/2): 7712.
+   in Ada.Containers.Ordered_Sets   *note A.18.9(3/2): 7743.
 
 Equivalent_Keys
-   in Ada.Containers.Hashed_Maps   *note A.18.5(34/2): 7467, *note
-A.18.5(35/2): 7468, *note A.18.5(36/2): 7469.
-   in Ada.Containers.Ordered_Maps   *note A.18.6(3/2): 7484.
-   in Ada.Containers.Ordered_Sets   *note A.18.9(63/2): 7696.
+   in Ada.Containers.Hashed_Maps   *note A.18.5(34/2): 7567, *note
+A.18.5(35/2): 7568, *note A.18.5(36/2): 7569.
+   in Ada.Containers.Ordered_Maps   *note A.18.6(3/2): 7584.
+   in Ada.Containers.Ordered_Sets   *note A.18.9(63/2): 7796.
 
 Equivalent_Sets
-   in Ada.Containers.Hashed_Sets   *note A.18.8(8/2): 7574.
-   in Ada.Containers.Ordered_Sets   *note A.18.9(9/2): 7650.
+   in Ada.Containers.Hashed_Sets   *note A.18.8(8/2): 7674.
+   in Ada.Containers.Ordered_Sets   *note A.18.9(9/2): 7750.
 
-Establish_RPC_Receiver in System.RPC   *note E.5(12): 8817.
+Establish_RPC_Receiver in System.RPC   *note E.5(12): 8959.
 
-Exception_Identity in Ada.Exceptions   *note 11.4.1(5/2): 4939.
+Exception_Identity in Ada.Exceptions   *note 11.4.1(5/2): 5002.
 
 Exception_Information
-   in Ada.Exceptions   *note 11.4.1(5/2): 4943.
+   in Ada.Exceptions   *note 11.4.1(5/2): 5006.
 
-Exception_Message in Ada.Exceptions   *note 11.4.1(4/3): 4937.
+Exception_Message in Ada.Exceptions   *note 11.4.1(4/3): 5000.
 
-Exception_Name in Ada.Exceptions   *note 11.4.1(2/2): 4930, *note
-11.4.1(5/2): 4940.
+Exception_Name in Ada.Exceptions   *note 11.4.1(2/2): 4993, *note
+11.4.1(5/2): 5003.
 
-Exchange_Handler in Ada.Interrupts   *note C.3.2(8): 8231.
+Exchange_Handler in Ada.Interrupts   *note C.3.2(8): 8354.
 
 Exclude
-   in Ada.Containers.Hashed_Maps   *note A.18.5(24/2): 7458.
-   in Ada.Containers.Hashed_Sets   *note A.18.8(23/2): 7592, *note
-A.18.8(54/2): 7618.
-   in Ada.Containers.Ordered_Maps   *note A.18.6(23/2): 7512.
-   in Ada.Containers.Ordered_Sets   *note A.18.9(22/2): 7666, *note
-A.18.9(67/2): 7700.
+   in Ada.Containers.Hashed_Maps   *note A.18.5(24/2): 7558.
+   in Ada.Containers.Hashed_Sets   *note A.18.8(23/2): 7692, *note
+A.18.8(54/2): 7718.
+   in Ada.Containers.Ordered_Maps   *note A.18.6(23/2): 7612.
+   in Ada.Containers.Ordered_Sets   *note A.18.9(22/2): 7766, *note
+A.18.9(67/2): 7800.
 
 Exists
-   in Ada.Directories   *note A.16(24/2): 7157.
-   in Ada.Environment_Variables   *note A.17(5/2): 7208.
+   in Ada.Directories   *note A.16(24/2): 7256.
+   in Ada.Environment_Variables   *note A.17(5/2): 7307.
 
 Exp
    in Ada.Numerics.Generic_Complex_Elementary_Functions   *note
-G.1.2(3): 8898.
-   in Ada.Numerics.Generic_Elementary_Functions   *note A.5.1(4): 6589.
+G.1.2(3): 9039.
+   in Ada.Numerics.Generic_Elementary_Functions   *note A.5.1(4): 6683.
 
-Expanded_Name in Ada.Tags   *note 3.9(7/2): 2232.
+Expanded_Name in Ada.Tags   *note 3.9(7/2): 2250.
 
-Extension in Ada.Directories   *note A.16(18/2): 7150.
+Extension in Ada.Directories   *note A.16(18/2): 7249.
 
-External_Tag in Ada.Tags   *note 3.9(7/2): 2235.
+External_Tag in Ada.Tags   *note 3.9(7/2): 2253.
 
-Finalize in Ada.Finalization   *note 7.6(6/2): 3931, *note 7.6(8/2):
-3934.
+Finalize in Ada.Finalization   *note 7.6(6/2): 3978, *note 7.6(8/2):
+3981.
 
 Find
-   in Ada.Containers.Doubly_Linked_Lists   *note A.18.3(41/2): 7379.
-   in Ada.Containers.Hashed_Maps   *note A.18.5(30/2): 7464.
-   in Ada.Containers.Hashed_Sets   *note A.18.8(43/2): 7608, *note
-A.18.8(56/2): 7620.
-   in Ada.Containers.Multiway_Trees   *note A.18.10(38/3): 7763.
-   in Ada.Containers.Ordered_Maps   *note A.18.6(38/2): 7527.
-   in Ada.Containers.Ordered_Sets   *note A.18.9(49/2): 7689, *note
-A.18.9(69/2): 7702.
-   in Ada.Containers.Vectors   *note A.18.2(68/2): 7303.
+   in Ada.Containers.Doubly_Linked_Lists   *note A.18.3(41/2): 7479.
+   in Ada.Containers.Hashed_Maps   *note A.18.5(30/2): 7564.
+   in Ada.Containers.Hashed_Sets   *note A.18.8(43/2): 7708, *note
+A.18.8(56/2): 7720.
+   in Ada.Containers.Multiway_Trees   *note A.18.10(38/3): 7864.
+   in Ada.Containers.Ordered_Maps   *note A.18.6(38/2): 7627.
+   in Ada.Containers.Ordered_Sets   *note A.18.9(49/2): 7789, *note
+A.18.9(69/2): 7802.
+   in Ada.Containers.Vectors   *note A.18.2(68/2): 7403.
 
 Find_In_Subtree
-   in Ada.Containers.Multiway_Trees   *note A.18.10(39/3): 7764.
+   in Ada.Containers.Multiway_Trees   *note A.18.10(39/3): 7865.
 
-Find_Index in Ada.Containers.Vectors   *note A.18.2(67/2): 7302.
+Find_Index in Ada.Containers.Vectors   *note A.18.2(67/2): 7402.
 
 Find_Token
-   in Ada.Strings.Bounded   *note A.4.4(50.1/3): 6334, *note A.4.4(51):
-6335.
-   in Ada.Strings.Fixed   *note A.4.3(15.1/3): 6275, *note A.4.3(16):
-6276.
-   in Ada.Strings.Unbounded   *note A.4.5(45.1/3): 6391, *note
-A.4.5(46): 6392.
+   in Ada.Strings.Bounded   *note A.4.4(50.1/3): 6428, *note A.4.4(51):
+6429.
+   in Ada.Strings.Fixed   *note A.4.3(15.1/3): 6369, *note A.4.3(16):
+6370.
+   in Ada.Strings.Unbounded   *note A.4.5(45.1/3): 6485, *note
+A.4.5(46): 6486.
 
 First
-   in Ada.Containers.Doubly_Linked_Lists   *note A.18.3(33/2): 7371.
-   in Ada.Containers.Hashed_Maps   *note A.18.5(27/2): 7461.
-   in Ada.Containers.Hashed_Sets   *note A.18.8(40/2): 7605.
-   in Ada.Containers.Ordered_Maps   *note A.18.6(28/2): 7517.
-   in Ada.Containers.Ordered_Sets   *note A.18.9(41/2): 7681.
-   in Ada.Containers.Vectors   *note A.18.2(58/2): 7293.
-   in Ada.Iterator_Interfaces   *note 5.5.1(3/3): 3441.
+   in Ada.Containers.Doubly_Linked_Lists   *note A.18.3(33/2): 7471.
+   in Ada.Containers.Hashed_Maps   *note A.18.5(27/2): 7561.
+   in Ada.Containers.Hashed_Sets   *note A.18.8(40/2): 7705.
+   in Ada.Containers.Ordered_Maps   *note A.18.6(28/2): 7617.
+   in Ada.Containers.Ordered_Sets   *note A.18.9(41/2): 7781.
+   in Ada.Containers.Vectors   *note A.18.2(58/2): 7393.
+   in Ada.Iterator_Interfaces   *note 5.5.1(3/3): 3466.
 
 First_Child
-   in Ada.Containers.Multiway_Trees   *note A.18.10(60/3): 7785.
+   in Ada.Containers.Multiway_Trees   *note A.18.10(60/3): 7886.
 
 First_Child_Element
-   in Ada.Containers.Multiway_Trees   *note A.18.10(61/3): 7786.
+   in Ada.Containers.Multiway_Trees   *note A.18.10(61/3): 7887.
 
 First_Element
-   in Ada.Containers.Doubly_Linked_Lists   *note A.18.3(34/2): 7372.
-   in Ada.Containers.Ordered_Maps   *note A.18.6(29/2): 7518.
-   in Ada.Containers.Ordered_Sets   *note A.18.9(42/2): 7682.
-   in Ada.Containers.Vectors   *note A.18.2(59/2): 7294.
+   in Ada.Containers.Doubly_Linked_Lists   *note A.18.3(34/2): 7472.
+   in Ada.Containers.Ordered_Maps   *note A.18.6(29/2): 7618.
+   in Ada.Containers.Ordered_Sets   *note A.18.9(42/2): 7782.
+   in Ada.Containers.Vectors   *note A.18.2(59/2): 7394.
 
-First_Index in Ada.Containers.Vectors   *note A.18.2(57/2): 7292.
+First_Index in Ada.Containers.Vectors   *note A.18.2(57/2): 7392.
 
 First_Key
-   in Ada.Containers.Ordered_Maps   *note A.18.6(30/2): 7519.
+   in Ada.Containers.Ordered_Maps   *note A.18.6(30/2): 7619.
 
 Floor
-   in Ada.Containers.Ordered_Maps   *note A.18.6(40/2): 7529.
-   in Ada.Containers.Ordered_Sets   *note A.18.9(50/2): 7690, *note
-A.18.9(70/2): 7703.
+   in Ada.Containers.Ordered_Maps   *note A.18.6(40/2): 7629.
+   in Ada.Containers.Ordered_Sets   *note A.18.9(50/2): 7790, *note
+A.18.9(70/2): 7803.
 
 Flush
-   in Ada.Streams.Stream_IO   *note A.12.1(25/1): 7091.
-   in Ada.Text_IO   *note A.10.1(21/1): 6896.
+   in Ada.Direct_IO   *note A.8.4(10.1/4): 6918.
+   in Ada.Sequential_IO   *note A.8.1(10.1/4): 6888.
+   in Ada.Streams.Stream_IO   *note A.12.1(25/1): 7189.
+   in Ada.Text_IO   *note A.10.1(21/1): 6994.
 
 Form
-   in Ada.Direct_IO   *note A.8.4(9): 6820.
-   in Ada.Sequential_IO   *note A.8.1(9): 6792.
-   in Ada.Streams.Stream_IO   *note A.12.1(11): 7079.
-   in Ada.Text_IO   *note A.10.1(12): 6877.
+   in Ada.Direct_IO   *note A.8.4(9): 6916.
+   in Ada.Sequential_IO   *note A.8.1(9): 6886.
+   in Ada.Streams.Stream_IO   *note A.12.1(11): 7177.
+   in Ada.Text_IO   *note A.10.1(12): 6975.
 
 Free
-   in Ada.Strings.Unbounded   *note A.4.5(7): 6367.
-   in Interfaces.C.Strings   *note B.3.1(11): 8060.
+   in Ada.Strings.Unbounded   *note A.4.5(7): 6461.
+   in Interfaces.C.Strings   *note B.3.1(11): 8183.
 
-Full_Name in Ada.Directories   *note A.16(15/2): 7147, *note A.16(39/2):
-7169.
+Full_Name in Ada.Directories   *note A.16(15/2): 7246, *note A.16(39/2):
+7268.
 
 Generic_Array_Sort
-   child of Ada.Containers   *note A.18.26(3/2): 7878.
+   child of Ada.Containers   *note A.18.26(3/2): 7987.
 
 Generic_Constrained_Array_Sort
-   child of Ada.Containers   *note A.18.26(7/2): 7880.
+   child of Ada.Containers   *note A.18.26(7/2): 7989.
 
 Generic_Sort
-   child of Ada.Containers   *note A.18.26(9.2/3): 7882.
+   child of Ada.Containers   *note A.18.26(9.2/4): 7991.
 
 Get
-   in Ada.Text_IO   *note A.10.1(41): 6929, *note A.10.1(47): 6939,
-*note A.10.1(54): 6953, *note A.10.1(55): 6956, *note A.10.1(59): 6961,
-*note A.10.1(60): 6965, *note A.10.1(65): 6972, *note A.10.1(67): 6975,
-*note A.10.1(70): 6981, *note A.10.1(72): 6985, *note A.10.1(75): 6992,
-*note A.10.1(77): 6995, *note A.10.1(81): 7001, *note A.10.1(83): 7004.
-   in Ada.Text_IO.Complex_IO   *note G.1.3(6): 8927, *note G.1.3(8):
-8931.
+   in Ada.Text_IO   *note A.10.1(41): 7028, *note A.10.1(47): 7037,
+*note A.10.1(54): 7050, *note A.10.1(55): 7054, *note A.10.1(59): 7060,
+*note A.10.1(60): 7063, *note A.10.1(65): 7070, *note A.10.1(67): 7073,
+*note A.10.1(70): 7080, *note A.10.1(72): 7083, *note A.10.1(75): 7090,
+*note A.10.1(77): 7093, *note A.10.1(81): 7099, *note A.10.1(83): 7102.
+   in Ada.Text_IO.Complex_IO   *note G.1.3(6): 9070, *note G.1.3(8):
+9073.
 
 Get_CPU
-   in Ada.Interrupts   *note C.3.2(10.1/3): 8234.
+   in Ada.Interrupts   *note C.3.2(10.1/3): 8357.
    in System.Multiprocessors.Dispatching_Domains   *note D.16.1(13/3):
-8681.
+8818.
 
-Get_Deadline in Ada.Dispatching.EDF   *note D.2.6(9/2): 8400.
+Get_CPU_Set
+   in System.Multiprocessors.Dispatching_Domains   *note D.16.1(9.3/4):
+8814.
+
+Get_Deadline in Ada.Dispatching.EDF   *note D.2.6(9/2): 8528.
 
 Get_Dispatching_Domain
    in System.Multiprocessors.Dispatching_Domains   *note D.16.1(10/3):
-8678.
+8815.
 
 Get_First_CPU
    in System.Multiprocessors.Dispatching_Domains   *note D.16.1(8/3):
-8676.
+8810.
 
-Get_Immediate in Ada.Text_IO   *note A.10.1(44): 6936, *note A.10.1(45):
-6937.
+Get_Immediate in Ada.Text_IO   *note A.10.1(44): 7034, *note A.10.1(45):
+7035.
 
 Get_Last_CPU
-   in System.Multiprocessors.Dispatching_Domains   *note D.16.1(9/3):
-8677.
+   in System.Multiprocessors.Dispatching_Domains   *note D.16.1(9/4):
+8811.
 
 Get_Line
-   in Ada.Text_IO   *note A.10.1(49): 6944, *note A.10.1(49.1/2): 6946.
-   in Ada.Text_IO.Bounded_IO   *note A.10.11(8/2): 7035, *note
-A.10.11(9/2): 7036, *note A.10.11(10/2): 7037, *note A.10.11(11/2):
-7038.
-   in Ada.Text_IO.Unbounded_IO   *note A.10.12(8/2): 7045, *note
-A.10.12(9/2): 7046, *note A.10.12(10/2): 7047, *note A.10.12(11/2):
-7048.
+   in Ada.Text_IO   *note A.10.1(49): 7042, *note A.10.1(49.1/2): 7043.
+   in Ada.Text_IO.Bounded_IO   *note A.10.11(8/2): 7133, *note
+A.10.11(9/2): 7134, *note A.10.11(10/2): 7135, *note A.10.11(11/2):
+7136.
+   in Ada.Text_IO.Unbounded_IO   *note A.10.12(8/2): 7143, *note
+A.10.12(9/2): 7144, *note A.10.12(10/2): 7145, *note A.10.12(11/2):
+7146.
 
-Get_Next_Entry in Ada.Directories   *note A.16(35/2): 7167.
+Get_Next_Entry in Ada.Directories   *note A.16(35/2): 7266.
 
 Get_Priority
-   in Ada.Dynamic_Priorities   *note D.5.1(5): 8445.
+   in Ada.Dynamic_Priorities   *note D.5.1(5): 8573.
 
 Has_Element
-   in Ada.Containers.Doubly_Linked_Lists   *note A.18.3(9.1/3): 7342.
-   in Ada.Containers.Hashed_Maps   *note A.18.5(6.1/3): 7433.
-   in Ada.Containers.Hashed_Sets   *note A.18.8(6.1/3): 7572.
-   in Ada.Containers.Multiway_Trees   *note A.18.10(12/3): 7738.
-   in Ada.Containers.Ordered_Maps   *note A.18.6(7.1/3): 7489.
-   in Ada.Containers.Ordered_Sets   *note A.18.9(7.1/3): 7648.
-   in Ada.Containers.Vectors   *note A.18.2(11.1/3): 7243.
+   in Ada.Containers.Doubly_Linked_Lists   *note A.18.3(9.1/3): 7442.
+   in Ada.Containers.Hashed_Maps   *note A.18.5(6.1/3): 7533.
+   in Ada.Containers.Hashed_Sets   *note A.18.8(6.1/3): 7672.
+   in Ada.Containers.Multiway_Trees   *note A.18.10(12/3): 7839.
+   in Ada.Containers.Ordered_Maps   *note A.18.6(7.1/3): 7589.
+   in Ada.Containers.Ordered_Sets   *note A.18.9(7.1/3): 7748.
+   in Ada.Containers.Vectors   *note A.18.2(11.1/3): 7343.
 
 Hash
-   child of Ada.Strings   *note A.4.9(2/3): 6518.
-   child of Ada.Strings.Bounded   *note A.4.9(7/3): 6519.
-   child of Ada.Strings.Unbounded   *note A.4.9(10/3): 6520.
+   child of Ada.Strings   *note A.4.9(2/3): 6612.
+   child of Ada.Strings.Bounded   *note A.4.9(7/3): 6613.
+   child of Ada.Strings.Unbounded   *note A.4.9(10/3): 6614.
 
 Hash_Case_Insensitive
-   child of Ada.Strings   *note A.4.9(11.2/3): 6521.
-   child of Ada.Strings.Bounded   *note A.4.9(11.7/3): 6523.
-   child of Ada.Strings.Fixed   *note A.4.9(11.5/3): 6522.
-   child of Ada.Strings.Unbounded   *note A.4.9(11.10/3): 6524.
+   child of Ada.Strings   *note A.4.9(11.2/3): 6615.
+   child of Ada.Strings.Bounded   *note A.4.9(11.7/3): 6617.
+   child of Ada.Strings.Fixed   *note A.4.9(11.5/3): 6616.
+   child of Ada.Strings.Unbounded   *note A.4.9(11.10/3): 6618.
 
 Head
-   in Ada.Strings.Bounded   *note A.4.4(70): 6352, *note A.4.4(71):
-6353.
-   in Ada.Strings.Fixed   *note A.4.3(35): 6293, *note A.4.3(36): 6294.
-   in Ada.Strings.Unbounded   *note A.4.5(65): 6409, *note A.4.5(66):
-6410.
+   in Ada.Strings.Bounded   *note A.4.4(70): 6446, *note A.4.4(71):
+6447.
+   in Ada.Strings.Fixed   *note A.4.3(35): 6387, *note A.4.3(36): 6388.
+   in Ada.Strings.Unbounded   *note A.4.5(65): 6503, *note A.4.5(66):
+6504.
 
-Hold in Ada.Asynchronous_Task_Control   *note D.11(3/2): 8573.
+Hold in Ada.Asynchronous_Task_Control   *note D.11(3/2): 8706.
 
-Hour in Ada.Calendar.Formatting   *note 9.6.1(24/2): 4510.
+Hour in Ada.Calendar.Formatting   *note 9.6.1(24/2): 4569.
 
 Im
-   in Ada.Numerics.Generic_Complex_Arrays   *note G.3.2(7/2): 9009,
-*note G.3.2(27/2): 9022.
-   in Ada.Numerics.Generic_Complex_Types   *note G.1.1(6): 8872.
+   in Ada.Numerics.Generic_Complex_Arrays   *note G.3.2(7/2): 9151,
+*note G.3.2(27/2): 9164.
+   in Ada.Numerics.Generic_Complex_Types   *note G.1.1(6): 9014.
 
 Image
-   in Ada.Calendar.Formatting   *note 9.6.1(35/2): 4521, *note
-9.6.1(37/2): 4523.
-   in Ada.Numerics.Discrete_Random   *note A.5.2(26): 6644.
-   in Ada.Numerics.Float_Random   *note A.5.2(14): 6632.
-   in Ada.Task_Identification   *note C.7.1(3/3): 8275.
-   in Ada.Text_IO.Editing   *note F.3.3(13): 8855.
+   in Ada.Calendar.Formatting   *note 9.6.1(35/2): 4580, *note
+9.6.1(37/2): 4582.
+   in Ada.Numerics.Discrete_Random   *note A.5.2(26): 6738.
+   in Ada.Numerics.Float_Random   *note A.5.2(14): 6726.
+   in Ada.Task_Identification   *note C.7.1(3/3): 8403.
+   in Ada.Text_IO.Editing   *note F.3.3(13): 8997.
 
 Include
-   in Ada.Containers.Hashed_Maps   *note A.18.5(22/2): 7456.
-   in Ada.Containers.Hashed_Sets   *note A.18.8(21/2): 7590.
-   in Ada.Containers.Ordered_Maps   *note A.18.6(21/2): 7510.
-   in Ada.Containers.Ordered_Sets   *note A.18.9(20/2): 7664.
+   in Ada.Containers.Hashed_Maps   *note A.18.5(22/2): 7556.
+   in Ada.Containers.Hashed_Sets   *note A.18.8(21/2): 7690.
+   in Ada.Containers.Ordered_Maps   *note A.18.6(21/2): 7610.
+   in Ada.Containers.Ordered_Sets   *note A.18.9(20/2): 7764.
 
-Increment in Interfaces.C.Pointers   *note B.3.2(11/3): 8081.
+Increment in Interfaces.C.Pointers   *note B.3.2(11/3): 8204.
 
 Index
-   in Ada.Direct_IO   *note A.8.4(15): 6827.
-   in Ada.Streams.Stream_IO   *note A.12.1(23): 7088.
-   in Ada.Strings.Bounded   *note A.4.4(43.1/2): 6323, *note
-A.4.4(43.2/2): 6324, *note A.4.4(44): 6325, *note A.4.4(45): 6326, *note
-A.4.4(45.1/2): 6327, *note A.4.4(46): 6328.
-   in Ada.Strings.Fixed   *note A.4.3(8.1/2): 6264, *note A.4.3(8.2/2):
-6265, *note A.4.3(9): 6266, *note A.4.3(10): 6267, *note A.4.3(10.1/2):
-6268, *note A.4.3(11): 6269.
-   in Ada.Strings.Unbounded   *note A.4.5(38.1/2): 6380, *note
-A.4.5(38.2/2): 6381, *note A.4.5(39): 6382, *note A.4.5(40): 6383, *note
-A.4.5(40.1/2): 6384, *note A.4.5(41): 6385.
+   in Ada.Direct_IO   *note A.8.4(15): 6924.
+   in Ada.Streams.Stream_IO   *note A.12.1(23): 7186.
+   in Ada.Strings.Bounded   *note A.4.4(43.1/2): 6417, *note
+A.4.4(43.2/2): 6418, *note A.4.4(44): 6419, *note A.4.4(45): 6420, *note
+A.4.4(45.1/2): 6421, *note A.4.4(46): 6422.
+   in Ada.Strings.Fixed   *note A.4.3(8.1/2): 6358, *note A.4.3(8.2/2):
+6359, *note A.4.3(9): 6360, *note A.4.3(10): 6361, *note A.4.3(10.1/2):
+6362, *note A.4.3(11): 6363.
+   in Ada.Strings.Unbounded   *note A.4.5(38.1/2): 6474, *note
+A.4.5(38.2/2): 6475, *note A.4.5(39): 6476, *note A.4.5(40): 6477, *note
+A.4.5(40.1/2): 6478, *note A.4.5(41): 6479.
 
 Index_Non_Blank
-   in Ada.Strings.Bounded   *note A.4.4(46.1/2): 6329, *note A.4.4(47):
-6330.
-   in Ada.Strings.Fixed   *note A.4.3(11.1/2): 6270, *note A.4.3(12):
-6271.
-   in Ada.Strings.Unbounded   *note A.4.5(41.1/2): 6386, *note
-A.4.5(42): 6387.
+   in Ada.Strings.Bounded   *note A.4.4(46.1/2): 6423, *note A.4.4(47):
+6424.
+   in Ada.Strings.Fixed   *note A.4.3(11.1/2): 6364, *note A.4.3(12):
+6365.
+   in Ada.Strings.Unbounded   *note A.4.5(41.1/2): 6480, *note
+A.4.5(42): 6481.
 
 Initial_Directory
    in Ada.Directories.Hierarchical_File_Names   *note A.16.1(12/3):
-7200.
+7299.
 
-Initialize in Ada.Finalization   *note 7.6(6/2): 3929, *note 7.6(8/2):
-3933.
+Initialize in Ada.Finalization   *note 7.6(6/2): 3976, *note 7.6(8/2):
+3980.
 
 Insert
-   in Ada.Containers.Doubly_Linked_Lists   *note A.18.3(19/2): 7357,
-*note A.18.3(20/2): 7358, *note A.18.3(21/2): 7359.
-   in Ada.Containers.Hashed_Maps   *note A.18.5(19/2): 7453, *note
-A.18.5(20/2): 7454, *note A.18.5(21/2): 7455.
-   in Ada.Containers.Hashed_Sets   *note A.18.8(19/2): 7588, *note
-A.18.8(20/2): 7589.
-   in Ada.Containers.Ordered_Maps   *note A.18.6(18/2): 7507, *note
-A.18.6(19/2): 7508, *note A.18.6(20/2): 7509.
-   in Ada.Containers.Ordered_Sets   *note A.18.9(18/2): 7662, *note
-A.18.9(19/2): 7663.
-   in Ada.Containers.Vectors   *note A.18.2(36/2): 7271, *note
-A.18.2(37/2): 7272, *note A.18.2(38/2): 7273, *note A.18.2(39/2): 7274,
-*note A.18.2(40/2): 7275, *note A.18.2(41/2): 7276, *note A.18.2(42/2):
-7277, *note A.18.2(43/2): 7278.
-   in Ada.Strings.Bounded   *note A.4.4(60): 6342, *note A.4.4(61):
-6343.
-   in Ada.Strings.Fixed   *note A.4.3(25): 6283, *note A.4.3(26): 6284.
-   in Ada.Strings.Unbounded   *note A.4.5(55): 6399, *note A.4.5(56):
-6400.
+   in Ada.Containers.Doubly_Linked_Lists   *note A.18.3(19/2): 7457,
+*note A.18.3(20/2): 7458, *note A.18.3(21/2): 7459.
+   in Ada.Containers.Hashed_Maps   *note A.18.5(19/2): 7553, *note
+A.18.5(20/2): 7554, *note A.18.5(21/2): 7555.
+   in Ada.Containers.Hashed_Sets   *note A.18.8(19/2): 7688, *note
+A.18.8(20/2): 7689.
+   in Ada.Containers.Ordered_Maps   *note A.18.6(18/2): 7607, *note
+A.18.6(19/2): 7608, *note A.18.6(20/2): 7609.
+   in Ada.Containers.Ordered_Sets   *note A.18.9(18/2): 7762, *note
+A.18.9(19/2): 7763.
+   in Ada.Containers.Vectors   *note A.18.2(36/2): 7371, *note
+A.18.2(37/2): 7372, *note A.18.2(38/2): 7373, *note A.18.2(39/2): 7374,
+*note A.18.2(40/2): 7375, *note A.18.2(41/2): 7376, *note A.18.2(42/2):
+7377, *note A.18.2(43/2): 7378.
+   in Ada.Strings.Bounded   *note A.4.4(60): 6436, *note A.4.4(61):
+6437.
+   in Ada.Strings.Fixed   *note A.4.3(25): 6377, *note A.4.3(26): 6378.
+   in Ada.Strings.Unbounded   *note A.4.5(55): 6493, *note A.4.5(56):
+6494.
 
 Insert_Child
-   in Ada.Containers.Multiway_Trees   *note A.18.10(48/3): 7773, *note
-A.18.10(49/3): 7774, *note A.18.10(50/3): 7775.
+   in Ada.Containers.Multiway_Trees   *note A.18.10(48/3): 7874, *note
+A.18.10(49/3): 7875, *note A.18.10(50/3): 7876.
 
 Insert_Space
-   in Ada.Containers.Vectors   *note A.18.2(48/2): 7283, *note
-A.18.2(49/2): 7284.
+   in Ada.Containers.Vectors   *note A.18.2(48/2): 7383, *note
+A.18.2(49/2): 7384.
 
-Interface_Ancestor_Tags in Ada.Tags   *note 3.9(7.4/2): 2241.
+Interface_Ancestor_Tags in Ada.Tags   *note 3.9(7.4/2): 2259.
 
-Internal_Tag in Ada.Tags   *note 3.9(7/2): 2236.
+Internal_Tag in Ada.Tags   *note 3.9(7/2): 2254.
 
 Intersection
-   in Ada.Containers.Hashed_Sets   *note A.18.8(29/2): 7597, *note
-A.18.8(30/2): 7598.
-   in Ada.Containers.Ordered_Sets   *note A.18.9(30/2): 7673, *note
-A.18.9(31/2): 7674.
+   in Ada.Containers.Hashed_Sets   *note A.18.8(29/2): 7697, *note
+A.18.8(30/2): 7698.
+   in Ada.Containers.Ordered_Sets   *note A.18.9(30/2): 7773, *note
+A.18.9(31/2): 7774.
 
 Inverse
-   in Ada.Numerics.Generic_Complex_Arrays   *note G.3.2(46/2): 9036.
-   in Ada.Numerics.Generic_Real_Arrays   *note G.3.1(24/2): 8995.
+   in Ada.Numerics.Generic_Complex_Arrays   *note G.3.2(46/2): 9178.
+   in Ada.Numerics.Generic_Real_Arrays   *note G.3.1(24/2): 9137.
 
 Is_A_Group_Member
-   in Ada.Execution_Time.Group_Budgets   *note D.14.2(8/2): 8627.
+   in Ada.Execution_Time.Group_Budgets   *note D.14.2(8/2): 8761.
 
-Is_Abstract in Ada.Tags   *note 3.9(7.5/3): 2242.
+Is_Abstract in Ada.Tags   *note 3.9(7.5/3): 2260.
 
 Is_Alphanumeric
-   in Ada.Characters.Handling   *note A.3.2(4/3): 5917.
-   in Ada.Wide_Characters.Handling   *note A.3.5(12/3): 6207.
+   in Ada.Characters.Handling   *note A.3.2(4/3): 6011.
+   in Ada.Wide_Characters.Handling   *note A.3.5(12/3): 6301.
 
-Is_Attached in Ada.Interrupts   *note C.3.2(5): 8228.
+Is_Attached in Ada.Interrupts   *note C.3.2(5): 8351.
 
-Is_Basic in Ada.Characters.Handling   *note A.3.2(4/3): 5913.
+Is_Basic in Ada.Characters.Handling   *note A.3.2(4/3): 6007.
 
 Is_Callable
-   in Ada.Task_Identification   *note C.7.1(4/3): 8280.
+   in Ada.Task_Identification   *note C.7.1(4/3): 8408.
 
 Is_Character
-   in Ada.Characters.Conversions   *note A.3.4(3/2): 6181.
+   in Ada.Characters.Conversions   *note A.3.4(3/2): 6275.
 
 Is_Control
-   in Ada.Characters.Handling   *note A.3.2(4/3): 5908.
-   in Ada.Wide_Characters.Handling   *note A.3.5(5/3): 6200.
+   in Ada.Characters.Handling   *note A.3.2(4/3): 6002.
+   in Ada.Wide_Characters.Handling   *note A.3.5(5/3): 6294.
 
 Is_Current_Directory_Name
-   in Ada.Directories.Hierarchical_File_Names   *note A.16.1(7/3): 7195.
+   in Ada.Directories.Hierarchical_File_Names   *note A.16.1(7/3): 7294.
 
 Is_Decimal_Digit
-   in Ada.Characters.Handling   *note A.3.2(4/3): 5915.
-   in Ada.Wide_Characters.Handling   *note A.3.5(10/3): 6205.
+   in Ada.Characters.Handling   *note A.3.2(4/3): 6009.
+   in Ada.Wide_Characters.Handling   *note A.3.5(10/3): 6299.
 
 Is_Descendant_At_Same_Level
-   in Ada.Tags   *note 3.9(7.1/2): 2238.
+   in Ada.Tags   *note 3.9(7.1/2): 2256.
 
 Is_Digit
-   in Ada.Characters.Handling   *note A.3.2(4/3): 5914.
-   in Ada.Wide_Characters.Handling   *note A.3.5(9/3): 6204.
+   in Ada.Characters.Handling   *note A.3.2(4/3): 6008.
+   in Ada.Wide_Characters.Handling   *note A.3.5(9/3): 6298.
 
 Is_Empty
-   in Ada.Containers.Doubly_Linked_Lists   *note A.18.3(12/2): 7345.
-   in Ada.Containers.Hashed_Maps   *note A.18.5(11/2): 7438.
-   in Ada.Containers.Hashed_Sets   *note A.18.8(13/2): 7579.
-   in Ada.Containers.Indefinite_Holders   *note A.18.18(10/3): 7828.
-   in Ada.Containers.Multiway_Trees   *note A.18.10(16/3): 7741.
-   in Ada.Containers.Ordered_Maps   *note A.18.6(10/2): 7492.
-   in Ada.Containers.Ordered_Sets   *note A.18.9(12/2): 7653.
-   in Ada.Containers.Vectors   *note A.18.2(23/2): 7251.
+   in Ada.Containers.Doubly_Linked_Lists   *note A.18.3(12/2): 7445.
+   in Ada.Containers.Hashed_Maps   *note A.18.5(11/2): 7538.
+   in Ada.Containers.Hashed_Sets   *note A.18.8(13/2): 7679.
+   in Ada.Containers.Indefinite_Holders   *note A.18.18(10/3): 7936.
+   in Ada.Containers.Multiway_Trees   *note A.18.10(16/3): 7842.
+   in Ada.Containers.Ordered_Maps   *note A.18.6(10/2): 7592.
+   in Ada.Containers.Ordered_Sets   *note A.18.9(12/2): 7753.
+   in Ada.Containers.Vectors   *note A.18.2(23/2): 7351.
 
 Is_Full_Name
-   in Ada.Directories.Hierarchical_File_Names   *note A.16.1(8/3): 7196.
+   in Ada.Directories.Hierarchical_File_Names   *note A.16.1(8/3): 7295.
 
 Is_Graphic
-   in Ada.Characters.Handling   *note A.3.2(4/3): 5909.
-   in Ada.Wide_Characters.Handling   *note A.3.5(19/3): 6214.
+   in Ada.Characters.Handling   *note A.3.2(4/3): 6003.
+   in Ada.Wide_Characters.Handling   *note A.3.5(19/3): 6308.
 
 Is_Held
-   in Ada.Asynchronous_Task_Control   *note D.11(3/2): 8575.
+   in Ada.Asynchronous_Task_Control   *note D.11(3/2): 8708.
 
 Is_Hexadecimal_Digit
-   in Ada.Characters.Handling   *note A.3.2(4/3): 5916.
-   in Ada.Wide_Characters.Handling   *note A.3.5(11/3): 6206.
+   in Ada.Characters.Handling   *note A.3.2(4/3): 6010.
+   in Ada.Wide_Characters.Handling   *note A.3.5(11/3): 6300.
 
 Is_In
-   in Ada.Strings.Maps   *note A.4.2(13): 6245.
-   in Ada.Strings.Wide_Maps   *note A.4.7(13): 6457.
-   in Ada.Strings.Wide_Wide_Maps   *note A.4.8(13/2): 6499.
+   in Ada.Strings.Maps   *note A.4.2(13): 6339.
+   in Ada.Strings.Wide_Maps   *note A.4.7(13): 6551.
+   in Ada.Strings.Wide_Wide_Maps   *note A.4.8(13/2): 6593.
 
-Is_ISO_646 in Ada.Characters.Handling   *note A.3.2(10): 5932.
+Is_ISO_646 in Ada.Characters.Handling   *note A.3.2(10): 6026.
 
 Is_Leaf
-   in Ada.Containers.Multiway_Trees   *note A.18.10(21/3): 7746.
+   in Ada.Containers.Multiway_Trees   *note A.18.10(21/3): 7847.
 
 Is_Letter
-   in Ada.Characters.Handling   *note A.3.2(4/3): 5910.
-   in Ada.Wide_Characters.Handling   *note A.3.5(6/3): 6201.
+   in Ada.Characters.Handling   *note A.3.2(4/3): 6004.
+   in Ada.Wide_Characters.Handling   *note A.3.5(6/3): 6295.
 
 Is_Line_Terminator
-   in Ada.Characters.Handling   *note A.3.2(4/3): 5919.
-   in Ada.Wide_Characters.Handling   *note A.3.5(14/3): 6209.
+   in Ada.Characters.Handling   *note A.3.2(4/3): 6013.
+   in Ada.Wide_Characters.Handling   *note A.3.5(14/3): 6303.
 
 Is_Lower
-   in Ada.Characters.Handling   *note A.3.2(4/3): 5911.
-   in Ada.Wide_Characters.Handling   *note A.3.5(7/3): 6202.
+   in Ada.Characters.Handling   *note A.3.2(4/3): 6005.
+   in Ada.Wide_Characters.Handling   *note A.3.5(7/3): 6296.
 
 Is_Mark
-   in Ada.Characters.Handling   *note A.3.2(4/3): 5920.
-   in Ada.Wide_Characters.Handling   *note A.3.5(15/3): 6210.
+   in Ada.Characters.Handling   *note A.3.2(4/3): 6014.
+   in Ada.Wide_Characters.Handling   *note A.3.5(15/3): 6304.
 
 Is_Member
-   in Ada.Execution_Time.Group_Budgets   *note D.14.2(8/2): 8626.
+   in Ada.Execution_Time.Group_Budgets   *note D.14.2(8/2): 8760.
 
-Is_Nul_Terminated in Interfaces.C   *note B.3(24): 8010, *note B.3(35):
-8020, *note B.3(39.16/2): 8040, *note B.3(39.7/2): 8030.
+Is_Nul_Terminated in Interfaces.C   *note B.3(24): 8130, *note B.3(35):
+8140, *note B.3(39.16/2): 8160, *note B.3(39.7/2): 8150.
 
 Is_Open
-   in Ada.Direct_IO   *note A.8.4(10): 6821.
-   in Ada.Sequential_IO   *note A.8.1(10): 6793.
-   in Ada.Streams.Stream_IO   *note A.12.1(12): 7080.
-   in Ada.Text_IO   *note A.10.1(13): 6878.
+   in Ada.Direct_IO   *note A.8.4(10): 6917.
+   in Ada.Sequential_IO   *note A.8.1(10): 6887.
+   in Ada.Streams.Stream_IO   *note A.12.1(12): 7178.
+   in Ada.Text_IO   *note A.10.1(13): 6976.
 
 Is_Other_Format
-   in Ada.Characters.Handling   *note A.3.2(4/3): 5921.
-   in Ada.Wide_Characters.Handling   *note A.3.5(16/3): 6211.
+   in Ada.Characters.Handling   *note A.3.2(4/3): 6015.
+   in Ada.Wide_Characters.Handling   *note A.3.5(16/3): 6305.
 
 Is_Parent_Directory_Name
-   in Ada.Directories.Hierarchical_File_Names   *note A.16.1(6/3): 7194.
+   in Ada.Directories.Hierarchical_File_Names   *note A.16.1(6/3): 7293.
 
 Is_Punctuation_Connector
-   in Ada.Characters.Handling   *note A.3.2(4/3): 5922.
-   in Ada.Wide_Characters.Handling   *note A.3.5(17/3): 6212.
+   in Ada.Characters.Handling   *note A.3.2(4/3): 6016.
+   in Ada.Wide_Characters.Handling   *note A.3.5(17/3): 6306.
 
 Is_Relative_Name
-   in Ada.Directories.Hierarchical_File_Names   *note A.16.1(9/3): 7197.
+   in Ada.Directories.Hierarchical_File_Names   *note A.16.1(9/3): 7296.
 
-Is_Reserved in Ada.Interrupts   *note C.3.2(4): 8227.
+Is_Reserved in Ada.Interrupts   *note C.3.2(4): 8350.
 
 Is_Root
-   in Ada.Containers.Multiway_Trees   *note A.18.10(20/3): 7745.
+   in Ada.Containers.Multiway_Trees   *note A.18.10(20/3): 7846.
 
 Is_Root_Directory_Name
-   in Ada.Directories.Hierarchical_File_Names   *note A.16.1(5/3): 7193.
+   in Ada.Directories.Hierarchical_File_Names   *note A.16.1(5/3): 7292.
 
 Is_Round_Robin
-   in Ada.Dispatching.Round_Robin   *note D.2.5(4/2): 8391.
+   in Ada.Dispatching.Round_Robin   *note D.2.5(4/2): 8519.
 
 Is_Simple_Name
-   in Ada.Directories.Hierarchical_File_Names   *note A.16.1(4/3): 7192.
+   in Ada.Directories.Hierarchical_File_Names   *note A.16.1(4/3): 7291.
 
 Is_Sorted
-   in Ada.Containers.Doubly_Linked_Lists   *note A.18.3(48/2): 7385.
-   in Ada.Containers.Vectors   *note A.18.2(76/2): 7310.
+   in Ada.Containers.Doubly_Linked_Lists   *note A.18.3(48/2): 7485.
+   in Ada.Containers.Vectors   *note A.18.2(76/2): 7410.
 
 Is_Space
-   in Ada.Characters.Handling   *note A.3.2(4/3): 5923.
-   in Ada.Wide_Characters.Handling   *note A.3.5(18/3): 6213.
+   in Ada.Characters.Handling   *note A.3.2(4/3): 6017.
+   in Ada.Wide_Characters.Handling   *note A.3.5(18/3): 6307.
 
 Is_Special
-   in Ada.Characters.Handling   *note A.3.2(4/3): 5918.
-   in Ada.Wide_Characters.Handling   *note A.3.5(13/3): 6208.
+   in Ada.Characters.Handling   *note A.3.2(4/3): 6012.
+   in Ada.Wide_Characters.Handling   *note A.3.5(13/3): 6302.
 
 Is_String
-   in Ada.Characters.Conversions   *note A.3.4(3/2): 6182.
+   in Ada.Characters.Conversions   *note A.3.4(3/2): 6274.
 
 Is_Subset
-   in Ada.Containers.Hashed_Sets   *note A.18.8(39/2): 7604.
-   in Ada.Containers.Ordered_Sets   *note A.18.9(40/2): 7680.
-   in Ada.Strings.Maps   *note A.4.2(14): 6246.
-   in Ada.Strings.Wide_Maps   *note A.4.7(14): 6458.
-   in Ada.Strings.Wide_Wide_Maps   *note A.4.8(14/2): 6500.
+   in Ada.Containers.Hashed_Sets   *note A.18.8(39/2): 7704.
+   in Ada.Containers.Ordered_Sets   *note A.18.9(40/2): 7780.
+   in Ada.Strings.Maps   *note A.4.2(14): 6340.
+   in Ada.Strings.Wide_Maps   *note A.4.7(14): 6552.
+   in Ada.Strings.Wide_Wide_Maps   *note A.4.8(14/2): 6594.
 
 Is_Terminated
-   in Ada.Task_Identification   *note C.7.1(4/3): 8279.
+   in Ada.Task_Identification   *note C.7.1(4/3): 8407.
 
 Is_Upper
-   in Ada.Characters.Handling   *note A.3.2(4/3): 5912.
-   in Ada.Wide_Characters.Handling   *note A.3.5(8/3): 6203.
+   in Ada.Characters.Handling   *note A.3.2(4/3): 6006.
+   in Ada.Wide_Characters.Handling   *note A.3.5(8/3): 6297.
 
 Is_Wide_Character
-   in Ada.Characters.Conversions   *note A.3.4(3/2): 6183.
+   in Ada.Characters.Conversions   *note A.3.4(3/2): 6277.
 
 Is_Wide_String
-   in Ada.Characters.Conversions   *note A.3.4(3/2): 6184.
+   in Ada.Characters.Conversions   *note A.3.4(3/2): 6278.
 
 Iterate
-   in Ada.Containers.Doubly_Linked_Lists   *note A.18.3(45/2): 7382.
-   in Ada.Containers.Hashed_Maps   *note A.18.5(37/2): 7470.
-   in Ada.Containers.Hashed_Sets   *note A.18.8(49/2): 7613.
-   in Ada.Containers.Multiway_Trees   *note A.18.10(42/3): 7767, *note
-A.18.10(44/3): 7769.
-   in Ada.Containers.Ordered_Maps   *note A.18.6(50/2): 7532.
-   in Ada.Containers.Ordered_Sets   *note A.18.9(60/2): 7693.
-   in Ada.Containers.Vectors   *note A.18.2(73/2): 7307.
-   in Ada.Environment_Variables   *note A.17(8/3): 7212.
+   in Ada.Containers.Doubly_Linked_Lists   *note A.18.3(45/2): 7482.
+   in Ada.Containers.Hashed_Maps   *note A.18.5(37/2): 7570.
+   in Ada.Containers.Hashed_Sets   *note A.18.8(49/2): 7713.
+   in Ada.Containers.Multiway_Trees   *note A.18.10(42/3): 7868, *note
+A.18.10(44/3): 7870.
+   in Ada.Containers.Ordered_Maps   *note A.18.6(50/2): 7632.
+   in Ada.Containers.Ordered_Sets   *note A.18.9(60/2): 7793.
+   in Ada.Containers.Vectors   *note A.18.2(73/2): 7407.
+   in Ada.Environment_Variables   *note A.17(8/3): 7311.
 
 Iterate_Children
-   in Ada.Containers.Multiway_Trees   *note A.18.10(68/3): 7793, *note
-A.18.10(70/3): 7795.
+   in Ada.Containers.Multiway_Trees   *note A.18.10(68/3): 7894, *note
+A.18.10(70/3): 7896.
 
 Iterate_Subtree
-   in Ada.Containers.Multiway_Trees   *note A.18.10(43/3): 7768, *note
-A.18.10(45/3): 7770.
+   in Ada.Containers.Multiway_Trees   *note A.18.10(43/3): 7869, *note
+A.18.10(45/3): 7871.
 
 Key
-   in Ada.Containers.Hashed_Maps   *note A.18.5(13/2): 7440.
-   in Ada.Containers.Hashed_Sets   *note A.18.8(51/2): 7615.
-   in Ada.Containers.Ordered_Maps   *note A.18.6(12/2): 7494.
-   in Ada.Containers.Ordered_Sets   *note A.18.9(64/2): 7697.
+   in Ada.Containers.Hashed_Maps   *note A.18.5(13/2): 7540.
+   in Ada.Containers.Hashed_Sets   *note A.18.8(51/2): 7715.
+   in Ada.Containers.Ordered_Maps   *note A.18.6(12/2): 7594.
+   in Ada.Containers.Ordered_Sets   *note A.18.9(64/2): 7797.
 
-Kind in Ada.Directories   *note A.16(25/2): 7158, *note A.16(40/2):
-7170.
+Kind in Ada.Directories   *note A.16(25/2): 7257, *note A.16(40/2):
+7269.
 
-Language in Ada.Locales   *note A.19(6/3): 7930.
+Language in Ada.Locales   *note A.19(6/3): 8039.
 
 Last
-   in Ada.Containers.Doubly_Linked_Lists   *note A.18.3(35/2): 7373.
-   in Ada.Containers.Ordered_Maps   *note A.18.6(31/2): 7520.
-   in Ada.Containers.Ordered_Sets   *note A.18.9(43/2): 7683.
-   in Ada.Containers.Vectors   *note A.18.2(61/2): 7296.
-   in Ada.Iterator_Interfaces   *note 5.5.1(4/3): 3444.
+   in Ada.Containers.Doubly_Linked_Lists   *note A.18.3(35/2): 7473.
+   in Ada.Containers.Ordered_Maps   *note A.18.6(31/2): 7620.
+   in Ada.Containers.Ordered_Sets   *note A.18.9(43/2): 7783.
+   in Ada.Containers.Vectors   *note A.18.2(61/2): 7396.
+   in Ada.Iterator_Interfaces   *note 5.5.1(4/3): 3469.
 
 Last_Child
-   in Ada.Containers.Multiway_Trees   *note A.18.10(62/3): 7787.
+   in Ada.Containers.Multiway_Trees   *note A.18.10(62/3): 7888.
 
 Last_Child_Element
-   in Ada.Containers.Multiway_Trees   *note A.18.10(63/3): 7788.
+   in Ada.Containers.Multiway_Trees   *note A.18.10(63/3): 7889.
 
 Last_Element
-   in Ada.Containers.Doubly_Linked_Lists   *note A.18.3(36/2): 7374.
-   in Ada.Containers.Ordered_Maps   *note A.18.6(32/2): 7521.
-   in Ada.Containers.Ordered_Sets   *note A.18.9(44/2): 7684.
-   in Ada.Containers.Vectors   *note A.18.2(62/2): 7297.
+   in Ada.Containers.Doubly_Linked_Lists   *note A.18.3(36/2): 7474.
+   in Ada.Containers.Ordered_Maps   *note A.18.6(32/2): 7621.
+   in Ada.Containers.Ordered_Sets   *note A.18.9(44/2): 7784.
+   in Ada.Containers.Vectors   *note A.18.2(62/2): 7397.
 
-Last_Index in Ada.Containers.Vectors   *note A.18.2(60/2): 7295.
+Last_Index in Ada.Containers.Vectors   *note A.18.2(60/2): 7395.
 
 Last_Key
-   in Ada.Containers.Ordered_Maps   *note A.18.6(33/2): 7522.
+   in Ada.Containers.Ordered_Maps   *note A.18.6(33/2): 7622.
 
 Length
-   in Ada.Containers.Doubly_Linked_Lists   *note A.18.3(11/2): 7344.
-   in Ada.Containers.Hashed_Maps   *note A.18.5(10/2): 7437.
-   in Ada.Containers.Hashed_Sets   *note A.18.8(12/2): 7578.
-   in Ada.Containers.Ordered_Maps   *note A.18.6(9/2): 7491.
-   in Ada.Containers.Ordered_Sets   *note A.18.9(11/2): 7652.
-   in Ada.Containers.Vectors   *note A.18.2(21/2): 7249.
-   in Ada.Strings.Bounded   *note A.4.4(9): 6306.
-   in Ada.Strings.Unbounded   *note A.4.5(6): 6365.
-   in Ada.Text_IO.Editing   *note F.3.3(11): 8853.
-   in Interfaces.COBOL   *note B.4(34): 8142, *note B.4(39): 8146, *note
-B.4(44): 8150.
+   in Ada.Containers.Doubly_Linked_Lists   *note A.18.3(11/2): 7444.
+   in Ada.Containers.Hashed_Maps   *note A.18.5(10/2): 7537.
+   in Ada.Containers.Hashed_Sets   *note A.18.8(12/2): 7678.
+   in Ada.Containers.Ordered_Maps   *note A.18.6(9/2): 7591.
+   in Ada.Containers.Ordered_Sets   *note A.18.9(11/2): 7752.
+   in Ada.Containers.Vectors   *note A.18.2(21/2): 7349.
+   in Ada.Strings.Bounded   *note A.4.4(9): 6400.
+   in Ada.Strings.Unbounded   *note A.4.5(6): 6459.
+   in Ada.Text_IO.Editing   *note F.3.3(11): 8995.
+   in Interfaces.COBOL   *note B.4(34): 8265, *note B.4(39): 8269, *note
+B.4(44): 8273.
 
 Less_Case_Insensitive
-   child of Ada.Strings   *note A.4.10(13/3): 6531.
-   child of Ada.Strings.Bounded   *note A.4.10(18/3): 6533.
-   child of Ada.Strings.Fixed   *note A.4.10(16/3): 6532.
-   child of Ada.Strings.Unbounded   *note A.4.10(21/3): 6534.
+   child of Ada.Strings   *note A.4.10(13/3): 6625.
+   child of Ada.Strings.Bounded   *note A.4.10(18/3): 6627.
+   child of Ada.Strings.Fixed   *note A.4.10(16/3): 6626.
+   child of Ada.Strings.Unbounded   *note A.4.10(21/3): 6628.
 
-Line in Ada.Text_IO   *note A.10.1(38): 6926.
+Line in Ada.Text_IO   *note A.10.1(38): 7024.
 
-Line_Length in Ada.Text_IO   *note A.10.1(25): 6902.
+Line_Length in Ada.Text_IO   *note A.10.1(25): 6999.
 
 Log
    in Ada.Numerics.Generic_Complex_Elementary_Functions   *note
-G.1.2(3): 8896.
-   in Ada.Numerics.Generic_Elementary_Functions   *note A.5.1(4): 6587.
+G.1.2(3): 9038.
+   in Ada.Numerics.Generic_Elementary_Functions   *note A.5.1(4): 6682.
 
-Look_Ahead in Ada.Text_IO   *note A.10.1(43): 6933.
+Look_Ahead in Ada.Text_IO   *note A.10.1(43): 7032.
 
 Members
-   in Ada.Execution_Time.Group_Budgets   *note D.14.2(8/2): 8628.
+   in Ada.Execution_Time.Group_Budgets   *note D.14.2(8/2): 8762.
 
 Merge
-   in Ada.Containers.Doubly_Linked_Lists   *note A.18.3(50/2): 7387.
-   in Ada.Containers.Vectors   *note A.18.2(78/2): 7312.
+   in Ada.Containers.Doubly_Linked_Lists   *note A.18.3(50/2): 7487.
+   in Ada.Containers.Vectors   *note A.18.2(78/2): 7412.
 
-Microseconds in Ada.Real_Time   *note D.8(14/2): 8536.
+Microseconds in Ada.Real_Time   *note D.8(14/2): 8669.
 
-Milliseconds in Ada.Real_Time   *note D.8(14/2): 8537.
+Milliseconds in Ada.Real_Time   *note D.8(14/2): 8670.
 
-Minute in Ada.Calendar.Formatting   *note 9.6.1(25/2): 4511.
+Minute in Ada.Calendar.Formatting   *note 9.6.1(25/2): 4570.
 
-Minutes in Ada.Real_Time   *note D.8(14/2): 8539.
+Minutes in Ada.Real_Time   *note D.8(14/2): 8672.
 
 Mode
-   in Ada.Direct_IO   *note A.8.4(9): 6818.
-   in Ada.Sequential_IO   *note A.8.1(9): 6790.
-   in Ada.Streams.Stream_IO   *note A.12.1(11): 7077.
-   in Ada.Text_IO   *note A.10.1(12): 6875.
+   in Ada.Direct_IO   *note A.8.4(9): 6914.
+   in Ada.Sequential_IO   *note A.8.1(9): 6884.
+   in Ada.Streams.Stream_IO   *note A.12.1(11): 7175.
+   in Ada.Text_IO   *note A.10.1(12): 6973.
 
-Modification_Time in Ada.Directories   *note A.16(27/2): 7160, *note
-A.16(42/2): 7172.
+Modification_Time in Ada.Directories   *note A.16(27/2): 7259, *note
+A.16(42/2): 7271.
 
 Modulus
-   in Ada.Numerics.Generic_Complex_Arrays   *note G.3.2(10/2): 9014,
-*note G.3.2(30/2): 9027.
-   in Ada.Numerics.Generic_Complex_Types   *note G.1.1(9): 8880.
+   in Ada.Numerics.Generic_Complex_Arrays   *note G.3.2(10/2): 9156,
+*note G.3.2(30/2): 9169.
+   in Ada.Numerics.Generic_Complex_Types   *note G.1.1(9): 9022.
 
 Month
-   in Ada.Calendar   *note 9.6(13): 4466.
-   in Ada.Calendar.Formatting   *note 9.6.1(22/2): 4508.
+   in Ada.Calendar   *note 9.6(13): 4525.
+   in Ada.Calendar.Formatting   *note 9.6.1(22/2): 4567.
 
-More_Entries in Ada.Directories   *note A.16(34/2): 7166.
+More_Entries in Ada.Directories   *note A.16(34/2): 7265.
 
 Move
-   in Ada.Containers.Doubly_Linked_Lists   *note A.18.3(18/2): 7356.
-   in Ada.Containers.Hashed_Maps   *note A.18.5(18/2): 7452.
-   in Ada.Containers.Hashed_Sets   *note A.18.8(18/2): 7587.
-   in Ada.Containers.Indefinite_Holders   *note A.18.18(22/3): 7840.
-   in Ada.Containers.Multiway_Trees   *note A.18.10(34/3): 7759.
-   in Ada.Containers.Ordered_Maps   *note A.18.6(17/2): 7506.
-   in Ada.Containers.Ordered_Sets   *note A.18.9(17/2): 7661.
-   in Ada.Containers.Vectors   *note A.18.2(35/2): 7270.
-   in Ada.Strings.Fixed   *note A.4.3(7): 6263.
+   in Ada.Containers.Doubly_Linked_Lists   *note A.18.3(18/2): 7456.
+   in Ada.Containers.Hashed_Maps   *note A.18.5(18/2): 7552.
+   in Ada.Containers.Hashed_Sets   *note A.18.8(18/2): 7687.
+   in Ada.Containers.Indefinite_Holders   *note A.18.18(22/3): 7948.
+   in Ada.Containers.Multiway_Trees   *note A.18.10(34/3): 7860.
+   in Ada.Containers.Ordered_Maps   *note A.18.6(17/2): 7606.
+   in Ada.Containers.Ordered_Sets   *note A.18.9(17/2): 7761.
+   in Ada.Containers.Vectors   *note A.18.2(35/2): 7370.
+   in Ada.Strings.Fixed   *note A.4.3(7): 6357.
 
 Name
-   in Ada.Direct_IO   *note A.8.4(9): 6819.
-   in Ada.Sequential_IO   *note A.8.1(9): 6791.
-   in Ada.Streams.Stream_IO   *note A.12.1(11): 7078.
-   in Ada.Text_IO   *note A.10.1(12): 6876.
+   in Ada.Direct_IO   *note A.8.4(9): 6915.
+   in Ada.Sequential_IO   *note A.8.1(9): 6885.
+   in Ada.Streams.Stream_IO   *note A.12.1(11): 7176.
+   in Ada.Text_IO   *note A.10.1(12): 6974.
 
 Name_Case_Equivalence
-   in Ada.Directories   *note A.16(20.2/3): 7154.
+   in Ada.Directories   *note A.16(20.2/3): 7253.
 
-Nanoseconds in Ada.Real_Time   *note D.8(14/2): 8535.
+Nanoseconds in Ada.Real_Time   *note D.8(14/2): 8668.
 
 New_Char_Array
-   in Interfaces.C.Strings   *note B.3.1(9): 8058.
+   in Interfaces.C.Strings   *note B.3.1(9): 8181.
 
-New_Line in Ada.Text_IO   *note A.10.1(28): 6906.
+New_Line in Ada.Text_IO   *note A.10.1(28): 7004.
 
-New_Page in Ada.Text_IO   *note A.10.1(31): 6911.
+New_Page in Ada.Text_IO   *note A.10.1(31): 7010.
 
-New_String in Interfaces.C.Strings   *note B.3.1(10): 8059.
+New_String in Interfaces.C.Strings   *note B.3.1(10): 8182.
 
 Next
-   in Ada.Containers.Doubly_Linked_Lists   *note A.18.3(37/2): 7375,
-*note A.18.3(39/2): 7377.
-   in Ada.Containers.Hashed_Maps   *note A.18.5(28/2): 7462, *note
-A.18.5(29/2): 7463.
-   in Ada.Containers.Hashed_Sets   *note A.18.8(41/2): 7606, *note
-A.18.8(42/2): 7607.
-   in Ada.Containers.Ordered_Maps   *note A.18.6(34/2): 7523, *note
-A.18.6(35/2): 7524.
-   in Ada.Containers.Ordered_Sets   *note A.18.9(45/2): 7685, *note
-A.18.9(46/2): 7686.
-   in Ada.Containers.Vectors   *note A.18.2(63/2): 7298, *note
-A.18.2(64/2): 7299.
-   in Ada.Iterator_Interfaces   *note 5.5.1(3/3): 3442.
+   in Ada.Containers.Doubly_Linked_Lists   *note A.18.3(37/2): 7475,
+*note A.18.3(39/2): 7477.
+   in Ada.Containers.Hashed_Maps   *note A.18.5(28/2): 7562, *note
+A.18.5(29/2): 7563.
+   in Ada.Containers.Hashed_Sets   *note A.18.8(41/2): 7706, *note
+A.18.8(42/2): 7707.
+   in Ada.Containers.Ordered_Maps   *note A.18.6(34/2): 7623, *note
+A.18.6(35/2): 7624.
+   in Ada.Containers.Ordered_Sets   *note A.18.9(45/2): 7785, *note
+A.18.9(46/2): 7786.
+   in Ada.Containers.Vectors   *note A.18.2(63/2): 7398, *note
+A.18.2(64/2): 7399.
+   in Ada.Iterator_Interfaces   *note 5.5.1(3/3): 3467.
 
 Next_Sibling
-   in Ada.Containers.Multiway_Trees   *note A.18.10(64/3): 7789, *note
-A.18.10(66/3): 7791.
+   in Ada.Containers.Multiway_Trees   *note A.18.10(64/3): 7890, *note
+A.18.10(66/3): 7892.
 
 Node_Count
-   in Ada.Containers.Multiway_Trees   *note A.18.10(17/3): 7742.
+   in Ada.Containers.Multiway_Trees   *note A.18.10(17/3): 7843.
 
 Null_Task_Id
-   in Ada.Task_Identification   *note C.7.1(2/2): 8274.
+   in Ada.Task_Identification   *note C.7.1(2/2): 8402.
 
 Number_Of_CPUs
-   in System.Multiprocessors   *note D.16(5/3): 8667.
+   in System.Multiprocessors   *note D.16(5/3): 8801.
 
 Open
-   in Ada.Direct_IO   *note A.8.4(7): 6813.
-   in Ada.Sequential_IO   *note A.8.1(7): 6785.
-   in Ada.Streams.Stream_IO   *note A.12.1(9): 7072.
-   in Ada.Text_IO   *note A.10.1(10): 6870.
+   in Ada.Direct_IO   *note A.8.4(7): 6909.
+   in Ada.Sequential_IO   *note A.8.1(7): 6879.
+   in Ada.Streams.Stream_IO   *note A.12.1(9): 7170.
+   in Ada.Text_IO   *note A.10.1(10): 6968.
 
 Overlap
-   in Ada.Containers.Hashed_Sets   *note A.18.8(38/2): 7603.
-   in Ada.Containers.Ordered_Sets   *note A.18.9(39/2): 7679.
+   in Ada.Containers.Hashed_Sets   *note A.18.8(38/2): 7703.
+   in Ada.Containers.Ordered_Sets   *note A.18.9(39/2): 7779.
 
 Overwrite
-   in Ada.Strings.Bounded   *note A.4.4(62): 6344, *note A.4.4(63):
-6345.
-   in Ada.Strings.Fixed   *note A.4.3(27): 6285, *note A.4.3(28): 6286.
-   in Ada.Strings.Unbounded   *note A.4.5(57): 6401, *note A.4.5(58):
-6402.
+   in Ada.Strings.Bounded   *note A.4.4(62): 6438, *note A.4.4(63):
+6439.
+   in Ada.Strings.Fixed   *note A.4.3(27): 6379, *note A.4.3(28): 6380.
+   in Ada.Strings.Unbounded   *note A.4.5(57): 6495, *note A.4.5(58):
+6496.
 
-Page in Ada.Text_IO   *note A.10.1(39): 6928.
+Page in Ada.Text_IO   *note A.10.1(39): 7025.
 
-Page_Length in Ada.Text_IO   *note A.10.1(26): 6903.
+Page_Length in Ada.Text_IO   *note A.10.1(26): 7001.
 
 Parent
-   in Ada.Containers.Multiway_Trees   *note A.18.10(59/3): 7784.
+   in Ada.Containers.Multiway_Trees   *note A.18.10(59/3): 7885.
 
-Parent_Tag in Ada.Tags   *note 3.9(7.2/2): 2239.
+Parent_Tag in Ada.Tags   *note 3.9(7.2/2): 2257.
 
 Peak_Use
-   in Ada.Containers.Bounded_Priority_Queues   *note A.18.31(7/3): 7922.
+   in Ada.Containers.Bounded_Priority_Queues   *note A.18.31(7/3): 8031.
    in Ada.Containers.Bounded_Synchronized_Queues   *note A.18.29(6/3):
-7906.
+8015.
    in Ada.Containers.Synchronized_Queue_Interfaces   *note A.18.27(7/3):
-7891.
+8000.
    in Ada.Containers.Unbounded_Priority_Queues   *note A.18.30(7/3):
-7914.
+8023.
    in Ada.Containers.Unbounded_Synchronized_Queues   *note A.18.28(6/3):
-7899.
+8008.
 
-Pic_String in Ada.Text_IO.Editing   *note F.3.3(7): 8844.
+Pic_String in Ada.Text_IO.Editing   *note F.3.3(7): 8986.
 
 Pool_of_Subpool
-   in System.Storage_Pools.Subpools   *note 13.11.4(9/3): 5699.
+   in System.Storage_Pools.Subpools   *note 13.11.4(9/3): 5779.
 
 Prepend
-   in Ada.Containers.Doubly_Linked_Lists   *note A.18.3(22/2): 7360.
-   in Ada.Containers.Vectors   *note A.18.2(44/2): 7279, *note
-A.18.2(45/2): 7280.
+   in Ada.Containers.Doubly_Linked_Lists   *note A.18.3(22/2): 7460.
+   in Ada.Containers.Vectors   *note A.18.2(44/2): 7379, *note
+A.18.2(45/2): 7380.
 
 Prepend_Child
-   in Ada.Containers.Multiway_Trees   *note A.18.10(51/3): 7776.
+   in Ada.Containers.Multiway_Trees   *note A.18.10(51/3): 7877.
 
 Previous
-   in Ada.Containers.Doubly_Linked_Lists   *note A.18.3(38/2): 7376,
-*note A.18.3(40/2): 7378.
-   in Ada.Containers.Ordered_Maps   *note A.18.6(36/2): 7525, *note
-A.18.6(37/2): 7526.
-   in Ada.Containers.Ordered_Sets   *note A.18.9(47/2): 7687, *note
-A.18.9(48/2): 7688.
-   in Ada.Containers.Vectors   *note A.18.2(65/2): 7300, *note
-A.18.2(66/2): 7301.
-   in Ada.Iterator_Interfaces   *note 5.5.1(4/3): 3445.
+   in Ada.Containers.Doubly_Linked_Lists   *note A.18.3(38/2): 7476,
+*note A.18.3(40/2): 7478.
+   in Ada.Containers.Ordered_Maps   *note A.18.6(36/2): 7625, *note
+A.18.6(37/2): 7626.
+   in Ada.Containers.Ordered_Sets   *note A.18.9(47/2): 7787, *note
+A.18.9(48/2): 7788.
+   in Ada.Containers.Vectors   *note A.18.2(65/2): 7400, *note
+A.18.2(66/2): 7401.
+   in Ada.Iterator_Interfaces   *note 5.5.1(4/3): 3470.
 
 Previous_Sibling
-   in Ada.Containers.Multiway_Trees   *note A.18.10(65/3): 7790, *note
-A.18.10(67/3): 7792.
+   in Ada.Containers.Multiway_Trees   *note A.18.10(65/3): 7891, *note
+A.18.10(67/3): 7893.
 
 Put
-   in Ada.Text_IO   *note A.10.1(42): 6931, *note A.10.1(48): 6941,
-*note A.10.1(55): 6957, *note A.10.1(60): 6963, *note A.10.1(66): 6973,
-*note A.10.1(67): 6976, *note A.10.1(71): 6984, *note A.10.1(72): 6986,
-*note A.10.1(76): 6994, *note A.10.1(77): 6996, *note A.10.1(82): 7002,
-*note A.10.1(83): 7005.
-   in Ada.Text_IO.Bounded_IO   *note A.10.11(4/2): 7031, *note
-A.10.11(5/2): 7032.
-   in Ada.Text_IO.Complex_IO   *note G.1.3(7): 8930, *note G.1.3(8):
-8932.
-   in Ada.Text_IO.Editing   *note F.3.3(14): 8856, *note F.3.3(15):
-8857, *note F.3.3(16): 8858.
-   in Ada.Text_IO.Unbounded_IO   *note A.10.12(4/2): 7041, *note
-A.10.12(5/2): 7042.
+   in Ada.Text_IO   *note A.10.1(42): 7030, *note A.10.1(48): 7040,
+*note A.10.1(55): 7055, *note A.10.1(60): 7062, *note A.10.1(66): 7071,
+*note A.10.1(67): 7074, *note A.10.1(71): 7082, *note A.10.1(72): 7084,
+*note A.10.1(76): 7091, *note A.10.1(77): 7094, *note A.10.1(82): 7100,
+*note A.10.1(83): 7103.
+   in Ada.Text_IO.Bounded_IO   *note A.10.11(4/2): 7129, *note
+A.10.11(5/2): 7130.
+   in Ada.Text_IO.Complex_IO   *note G.1.3(7): 9072, *note G.1.3(8):
+9074.
+   in Ada.Text_IO.Editing   *note F.3.3(14): 8998, *note F.3.3(15):
+8999, *note F.3.3(16): 9000.
+   in Ada.Text_IO.Unbounded_IO   *note A.10.12(4/2): 7139, *note
+A.10.12(5/2): 7140.
 
 Put_Line
-   in Ada.Text_IO   *note A.10.1(50): 6948.
-   in Ada.Text_IO.Bounded_IO   *note A.10.11(6/2): 7033, *note
-A.10.11(7/2): 7034.
-   in Ada.Text_IO.Unbounded_IO   *note A.10.12(6/2): 7043, *note
-A.10.12(7/2): 7044.
+   in Ada.Text_IO   *note A.10.1(50): 7046.
+   in Ada.Text_IO.Bounded_IO   *note A.10.11(6/2): 7131, *note
+A.10.11(7/2): 7132.
+   in Ada.Text_IO.Unbounded_IO   *note A.10.12(6/2): 7141, *note
+A.10.12(7/2): 7142.
 
 Query_Element
-   in Ada.Containers.Doubly_Linked_Lists   *note A.18.3(16/2): 7349.
-   in Ada.Containers.Hashed_Maps   *note A.18.5(16/2): 7443.
-   in Ada.Containers.Hashed_Sets   *note A.18.8(17/2): 7583.
-   in Ada.Containers.Indefinite_Holders   *note A.18.18(14/3): 7832.
-   in Ada.Containers.Multiway_Trees   *note A.18.10(26/3): 7751.
-   in Ada.Containers.Ordered_Maps   *note A.18.6(15/2): 7497.
-   in Ada.Containers.Ordered_Sets   *note A.18.9(16/2): 7657.
-   in Ada.Containers.Vectors   *note A.18.2(31/2): 7259, *note
-A.18.2(32/2): 7260.
-
-Raise_Exception in Ada.Exceptions   *note 11.4.1(4/3): 4936.
+   in Ada.Containers.Doubly_Linked_Lists   *note A.18.3(16/2): 7449.
+   in Ada.Containers.Hashed_Maps   *note A.18.5(16/2): 7543.
+   in Ada.Containers.Hashed_Sets   *note A.18.8(17/2): 7683.
+   in Ada.Containers.Indefinite_Holders   *note A.18.18(14/3): 7940.
+   in Ada.Containers.Multiway_Trees   *note A.18.10(26/3): 7852.
+   in Ada.Containers.Ordered_Maps   *note A.18.6(15/2): 7597.
+   in Ada.Containers.Ordered_Sets   *note A.18.9(16/2): 7757.
+   in Ada.Containers.Vectors   *note A.18.2(31/2): 7359, *note
+A.18.2(32/2): 7360.
+
+Raise_Exception in Ada.Exceptions   *note 11.4.1(4/3): 4999.
 
 Random
-   in Ada.Numerics.Discrete_Random   *note A.5.2(20): 6637.
-   in Ada.Numerics.Float_Random   *note A.5.2(8): 6625.
+   in Ada.Numerics.Discrete_Random   *note A.5.2(20): 6731.
+   in Ada.Numerics.Float_Random   *note A.5.2(8): 6719.
 
 Re
-   in Ada.Numerics.Generic_Complex_Arrays   *note G.3.2(7/2): 9008,
-*note G.3.2(27/2): 9021.
-   in Ada.Numerics.Generic_Complex_Types   *note G.1.1(6): 8871.
+   in Ada.Numerics.Generic_Complex_Arrays   *note G.3.2(7/2): 9150,
+*note G.3.2(27/2): 9163.
+   in Ada.Numerics.Generic_Complex_Types   *note G.1.1(6): 9013.
 
 Read
-   in Ada.Direct_IO   *note A.8.4(12): 6822.
-   in Ada.Sequential_IO   *note A.8.1(12): 6794.
-   in Ada.Storage_IO   *note A.9(6): 6842.
-   in Ada.Streams   *note 13.13.1(5): 5783.
-   in Ada.Streams.Stream_IO   *note A.12.1(15): 7083, *note A.12.1(16):
-7084.
-   in System.RPC   *note E.5(7): 8812.
+   in Ada.Direct_IO   *note A.8.4(12): 6919.
+   in Ada.Sequential_IO   *note A.8.1(12): 6889.
+   in Ada.Storage_IO   *note A.9(6): 6940.
+   in Ada.Streams   *note 13.13.1(5): 5865.
+   in Ada.Streams.Stream_IO   *note A.12.1(15): 7181, *note A.12.1(16):
+7182.
+   in System.RPC   *note E.5(7): 8954.
 
 Reference
-   in Ada.Containers.Doubly_Linked_Lists   *note A.18.3(17.4/3): 7353.
-   in Ada.Containers.Hashed_Maps   *note A.18.5(17.4/3): 7447, *note
-A.18.5(17.6/3): 7449.
-   in Ada.Containers.Indefinite_Holders   *note A.18.18(19/3): 7837.
-   in Ada.Containers.Multiway_Trees   *note A.18.10(31/3): 7756.
-   in Ada.Containers.Ordered_Maps   *note A.18.6(16.4/3): 7501, *note
-A.18.6(16.6/3): 7503.
-   in Ada.Containers.Vectors   *note A.18.2(34.4/3): 7265, *note
-A.18.2(34.6/3): 7267.
-   in Ada.Interrupts   *note C.3.2(10): 8233.
-   in Ada.Task_Attributes   *note C.7.2(5): 8296.
+   in Ada.Containers.Doubly_Linked_Lists   *note A.18.3(17.4/3): 7453.
+   in Ada.Containers.Hashed_Maps   *note A.18.5(17.4/3): 7547, *note
+A.18.5(17.6/3): 7549.
+   in Ada.Containers.Indefinite_Holders   *note A.18.18(19/3): 7945.
+   in Ada.Containers.Multiway_Trees   *note A.18.10(31/3): 7857.
+   in Ada.Containers.Ordered_Maps   *note A.18.6(16.4/3): 7601, *note
+A.18.6(16.6/3): 7603.
+   in Ada.Containers.Vectors   *note A.18.2(34.4/3): 7365, *note
+A.18.2(34.6/3): 7367.
+   in Ada.Interrupts   *note C.3.2(10): 8356.
+   in Ada.Task_Attributes   *note C.7.2(5): 8424.
 
 Reference_Preserving_Key
-   in Ada.Containers.Hashed_Sets   *note A.18.8(58.2/3): 7624, *note
-A.18.8(58.4/3): 7626.
-   in Ada.Containers.Ordered_Sets   *note A.18.9(73.2/3): 7708, *note
-A.18.9(73.4/3): 7710.
+   in Ada.Containers.Hashed_Sets   *note A.18.8(58.2/3): 7724, *note
+A.18.8(58.4/3): 7726.
+   in Ada.Containers.Ordered_Sets   *note A.18.9(73.2/3): 7808, *note
+A.18.9(73.4/3): 7810.
 
-Reinitialize in Ada.Task_Attributes   *note C.7.2(6): 8298.
+Reinitialize in Ada.Task_Attributes   *note C.7.2(6): 8426.
 
 Relative_Name
    in Ada.Directories.Hierarchical_File_Names   *note A.16.1(13/3):
-7201.
+7300.
 
 Remove_Task
-   in Ada.Execution_Time.Group_Budgets   *note D.14.2(8/2): 8625.
+   in Ada.Execution_Time.Group_Budgets   *note D.14.2(8/2): 8759.
 
-Rename in Ada.Directories   *note A.16(12/2): 7145.
+Rename in Ada.Directories   *note A.16(12/2): 7244.
 
 Replace
-   in Ada.Containers.Hashed_Maps   *note A.18.5(23/2): 7457.
-   in Ada.Containers.Hashed_Sets   *note A.18.8(22/2): 7591, *note
-A.18.8(53/2): 7617.
-   in Ada.Containers.Ordered_Maps   *note A.18.6(22/2): 7511.
-   in Ada.Containers.Ordered_Sets   *note A.18.9(21/2): 7665, *note
-A.18.9(66/2): 7699.
+   in Ada.Containers.Hashed_Maps   *note A.18.5(23/2): 7557.
+   in Ada.Containers.Hashed_Sets   *note A.18.8(22/2): 7691, *note
+A.18.8(53/2): 7717.
+   in Ada.Containers.Ordered_Maps   *note A.18.6(22/2): 7611.
+   in Ada.Containers.Ordered_Sets   *note A.18.9(21/2): 7765, *note
+A.18.9(66/2): 7799.
 
 Replace_Element
-   in Ada.Containers.Doubly_Linked_Lists   *note A.18.3(15/2): 7348.
-   in Ada.Containers.Hashed_Maps   *note A.18.5(15/2): 7442.
-   in Ada.Containers.Hashed_Sets   *note A.18.8(16/2): 7582.
-   in Ada.Containers.Indefinite_Holders   *note A.18.18(13/3): 7831.
-   in Ada.Containers.Multiway_Trees   *note A.18.10(25/3): 7750.
-   in Ada.Containers.Ordered_Maps   *note A.18.6(14/2): 7496.
-   in Ada.Containers.Ordered_Sets   *note A.18.9(15/2): 7656.
-   in Ada.Containers.Vectors   *note A.18.2(29/2): 7257, *note
-A.18.2(30/2): 7258.
-   in Ada.Strings.Bounded   *note A.4.4(27): 6319.
-   in Ada.Strings.Unbounded   *note A.4.5(21): 6376.
+   in Ada.Containers.Doubly_Linked_Lists   *note A.18.3(15/2): 7448.
+   in Ada.Containers.Hashed_Maps   *note A.18.5(15/2): 7542.
+   in Ada.Containers.Hashed_Sets   *note A.18.8(16/2): 7682.
+   in Ada.Containers.Indefinite_Holders   *note A.18.18(13/3): 7939.
+   in Ada.Containers.Multiway_Trees   *note A.18.10(25/3): 7851.
+   in Ada.Containers.Ordered_Maps   *note A.18.6(14/2): 7596.
+   in Ada.Containers.Ordered_Sets   *note A.18.9(15/2): 7756.
+   in Ada.Containers.Vectors   *note A.18.2(29/2): 7357, *note
+A.18.2(30/2): 7358.
+   in Ada.Strings.Bounded   *note A.4.4(27): 6413.
+   in Ada.Strings.Unbounded   *note A.4.5(21): 6470.
 
 Replace_Slice
-   in Ada.Strings.Bounded   *note A.4.4(58): 6340, *note A.4.4(59):
-6341.
-   in Ada.Strings.Fixed   *note A.4.3(23): 6281, *note A.4.3(24): 6282.
-   in Ada.Strings.Unbounded   *note A.4.5(53): 6397, *note A.4.5(54):
-6398.
+   in Ada.Strings.Bounded   *note A.4.4(58): 6434, *note A.4.4(59):
+6435.
+   in Ada.Strings.Fixed   *note A.4.3(23): 6375, *note A.4.3(24): 6376.
+   in Ada.Strings.Unbounded   *note A.4.5(53): 6491, *note A.4.5(54):
+6492.
 
 Replenish
-   in Ada.Execution_Time.Group_Budgets   *note D.14.2(9/2): 8629.
+   in Ada.Execution_Time.Group_Budgets   *note D.14.2(9/2): 8763.
 
-Replicate in Ada.Strings.Bounded   *note A.4.4(78): 6356, *note
-A.4.4(79): 6357, *note A.4.4(80): 6358.
+Replicate in Ada.Strings.Bounded   *note A.4.4(78): 6450, *note
+A.4.4(79): 6451, *note A.4.4(80): 6452.
 
-Reraise_Occurrence in Ada.Exceptions   *note 11.4.1(4/3): 4938.
+Reraise_Occurrence in Ada.Exceptions   *note 11.4.1(4/3): 5001.
 
 Reserve_Capacity
-   in Ada.Containers.Hashed_Maps   *note A.18.5(9/2): 7436.
-   in Ada.Containers.Hashed_Sets   *note A.18.8(11/2): 7577.
-   in Ada.Containers.Vectors   *note A.18.2(20/2): 7248.
+   in Ada.Containers.Hashed_Maps   *note A.18.5(9/2): 7536.
+   in Ada.Containers.Hashed_Sets   *note A.18.8(11/2): 7677.
+   in Ada.Containers.Vectors   *note A.18.2(20/2): 7348.
 
 Reset
-   in Ada.Direct_IO   *note A.8.4(8): 6817.
-   in Ada.Numerics.Discrete_Random   *note A.5.2(21): 6639, *note
-A.5.2(24): 6642.
-   in Ada.Numerics.Float_Random   *note A.5.2(9): 6627, *note A.5.2(12):
-6630.
-   in Ada.Sequential_IO   *note A.8.1(8): 6788.
-   in Ada.Streams.Stream_IO   *note A.12.1(10): 7076.
-   in Ada.Text_IO   *note A.10.1(11): 6874.
+   in Ada.Direct_IO   *note A.8.4(8): 6913.
+   in Ada.Numerics.Discrete_Random   *note A.5.2(21): 6733, *note
+A.5.2(24): 6736.
+   in Ada.Numerics.Float_Random   *note A.5.2(9): 6720, *note A.5.2(12):
+6724.
+   in Ada.Sequential_IO   *note A.8.1(8): 6883.
+   in Ada.Streams.Stream_IO   *note A.12.1(10): 7173.
+   in Ada.Text_IO   *note A.10.1(11): 6972.
 
 Reverse_Elements
-   in Ada.Containers.Doubly_Linked_Lists   *note A.18.3(27/2): 7365.
-   in Ada.Containers.Vectors   *note A.18.2(54/2): 7289.
+   in Ada.Containers.Doubly_Linked_Lists   *note A.18.3(27/2): 7465.
+   in Ada.Containers.Vectors   *note A.18.2(54/2): 7389.
 
 Reverse_Find
-   in Ada.Containers.Doubly_Linked_Lists   *note A.18.3(42/2): 7380.
-   in Ada.Containers.Vectors   *note A.18.2(70/2): 7305.
+   in Ada.Containers.Doubly_Linked_Lists   *note A.18.3(42/2): 7480.
+   in Ada.Containers.Vectors   *note A.18.2(70/2): 7405.
 
 Reverse_Find_Index
-   in Ada.Containers.Vectors   *note A.18.2(69/2): 7304.
+   in Ada.Containers.Vectors   *note A.18.2(69/2): 7404.
 
 Reverse_Iterate
-   in Ada.Containers.Doubly_Linked_Lists   *note A.18.3(46/2): 7383.
-   in Ada.Containers.Ordered_Maps   *note A.18.6(51/2): 7533.
-   in Ada.Containers.Ordered_Sets   *note A.18.9(61/2): 7694.
-   in Ada.Containers.Vectors   *note A.18.2(74/2): 7308.
+   in Ada.Containers.Doubly_Linked_Lists   *note A.18.3(46/2): 7483.
+   in Ada.Containers.Ordered_Maps   *note A.18.6(51/2): 7633.
+   in Ada.Containers.Ordered_Sets   *note A.18.9(61/2): 7794.
+   in Ada.Containers.Vectors   *note A.18.2(74/2): 7408.
 
 Reverse_Iterate_Children
-   in Ada.Containers.Multiway_Trees   *note A.18.10(69/3): 7794.
+   in Ada.Containers.Multiway_Trees   *note A.18.10(69/3): 7895.
 
-Root in Ada.Containers.Multiway_Trees   *note A.18.10(22/3): 7747.
+Root in Ada.Containers.Multiway_Trees   *note A.18.10(22/3): 7848.
 
 Save
-   in Ada.Numerics.Discrete_Random   *note A.5.2(24): 6641.
-   in Ada.Numerics.Float_Random   *note A.5.2(12): 6629.
+   in Ada.Numerics.Discrete_Random   *note A.5.2(24): 6735.
+   in Ada.Numerics.Float_Random   *note A.5.2(12): 6723.
 
-Save_Occurrence in Ada.Exceptions   *note 11.4.1(6/2): 4944.
+Save_Occurrence in Ada.Exceptions   *note 11.4.1(6/2): 5008.
 
-Second in Ada.Calendar.Formatting   *note 9.6.1(26/2): 4512.
+Second in Ada.Calendar.Formatting   *note 9.6.1(26/2): 4571.
 
 Seconds
-   in Ada.Calendar   *note 9.6(13): 4468.
-   in Ada.Real_Time   *note D.8(14/2): 8538.
+   in Ada.Calendar   *note 9.6(13): 4527.
+   in Ada.Real_Time   *note D.8(14/2): 8671.
 
-Seconds_Of in Ada.Calendar.Formatting   *note 9.6.1(28/2): 4514.
+Seconds_Of in Ada.Calendar.Formatting   *note 9.6.1(28/2): 4573.
 
-Set in Ada.Environment_Variables   *note A.17(6/2): 7209.
+Set in Ada.Environment_Variables   *note A.17(6/2): 7308.
 
 Set_Bounded_String
-   in Ada.Strings.Bounded   *note A.4.4(12.1/2): 6309.
+   in Ada.Strings.Bounded   *note A.4.4(12.1/2): 6403.
 
-Set_Col in Ada.Text_IO   *note A.10.1(35): 6920.
+Set_Col in Ada.Text_IO   *note A.10.1(35): 7018.
 
 Set_CPU
    in System.Multiprocessors.Dispatching_Domains   *note D.16.1(12/3):
-8680.
+8817.
 
-Set_Deadline in Ada.Dispatching.EDF   *note D.2.6(9/2): 8398.
+Set_Deadline in Ada.Dispatching.EDF   *note D.2.6(9/2): 8526.
 
 Set_Dependents_Fallback_Handler
-   in Ada.Task_Termination   *note C.7.3(5/2): 8308.
+   in Ada.Task_Termination   *note C.7.3(5/2): 8436.
 
-Set_Directory in Ada.Directories   *note A.16(6/2): 7139.
+Set_Directory in Ada.Directories   *note A.16(6/2): 7238.
 
-Set_Error in Ada.Text_IO   *note A.10.1(15): 6881.
+Set_Error in Ada.Text_IO   *note A.10.1(15): 6979.
 
-Set_Exit_Status in Ada.Command_Line   *note A.15(9): 7134.
+Set_Exit_Status in Ada.Command_Line   *note A.15(9): 7233.
 
 Set_False
-   in Ada.Synchronous_Task_Control   *note D.10(4): 8557.
+   in Ada.Synchronous_Task_Control   *note D.10(4): 8690.
 
 Set_Handler
-   in Ada.Execution_Time.Group_Budgets   *note D.14.2(10/2): 8633.
-   in Ada.Execution_Time.Timers   *note D.14.1(7/2): 8607.
-   in Ada.Real_Time.Timing_Events   *note D.15(5/2): 8654.
+   in Ada.Execution_Time.Group_Budgets   *note D.14.2(10/2): 8767.
+   in Ada.Execution_Time.Timers   *note D.14.1(7/2): 8742.
+   in Ada.Real_Time.Timing_Events   *note D.15(5/2): 8787.
 
 Set_Im
-   in Ada.Numerics.Generic_Complex_Arrays   *note G.3.2(8/2): 9011,
-*note G.3.2(28/2): 9024.
-   in Ada.Numerics.Generic_Complex_Types   *note G.1.1(7): 8876.
+   in Ada.Numerics.Generic_Complex_Arrays   *note G.3.2(8/2): 9153,
+*note G.3.2(28/2): 9166.
+   in Ada.Numerics.Generic_Complex_Types   *note G.1.1(7): 9017.
 
 Set_Index
-   in Ada.Direct_IO   *note A.8.4(14): 6826.
-   in Ada.Streams.Stream_IO   *note A.12.1(22): 7087.
+   in Ada.Direct_IO   *note A.8.4(14): 6923.
+   in Ada.Streams.Stream_IO   *note A.12.1(22): 7185.
 
-Set_Input in Ada.Text_IO   *note A.10.1(15): 6879.
+Set_Input in Ada.Text_IO   *note A.10.1(15): 6977.
 
-Set_Length in Ada.Containers.Vectors   *note A.18.2(22/2): 7250.
+Set_Length in Ada.Containers.Vectors   *note A.18.2(22/2): 7350.
 
-Set_Line in Ada.Text_IO   *note A.10.1(36): 6922.
+Set_Line in Ada.Text_IO   *note A.10.1(36): 7020.
 
-Set_Line_Length in Ada.Text_IO   *note A.10.1(23): 6897.
+Set_Line_Length in Ada.Text_IO   *note A.10.1(23): 6995.
 
-Set_Mode in Ada.Streams.Stream_IO   *note A.12.1(24): 7090.
+Set_Mode in Ada.Streams.Stream_IO   *note A.12.1(24): 7188.
 
-Set_Output in Ada.Text_IO   *note A.10.1(15): 6880.
+Set_Output in Ada.Text_IO   *note A.10.1(15): 6978.
 
-Set_Page_Length in Ada.Text_IO   *note A.10.1(24): 6899.
+Set_Page_Length in Ada.Text_IO   *note A.10.1(24): 6998.
 
 Set_Pool_of_Subpool
-   in System.Storage_Pools.Subpools   *note 13.11.4(10/3): 5700.
+   in System.Storage_Pools.Subpools   *note 13.11.4(10/3): 5780.
 
 Set_Priority
-   in Ada.Dynamic_Priorities   *note D.5.1(4): 8444.
+   in Ada.Dynamic_Priorities   *note D.5.1(4): 8572.
 
 Set_Quantum
-   in Ada.Dispatching.Round_Robin   *note D.2.5(4/2): 8388.
+   in Ada.Dispatching.Round_Robin   *note D.2.5(4/2): 8516.
 
 Set_Re
-   in Ada.Numerics.Generic_Complex_Arrays   *note G.3.2(8/2): 9010,
-*note G.3.2(28/2): 9023.
-   in Ada.Numerics.Generic_Complex_Types   *note G.1.1(7): 8874.
+   in Ada.Numerics.Generic_Complex_Arrays   *note G.3.2(8/2): 9152,
+*note G.3.2(28/2): 9165.
+   in Ada.Numerics.Generic_Complex_Types   *note G.1.1(7): 9016.
 
 Set_Specific_Handler
-   in Ada.Task_Termination   *note C.7.3(6/2): 8310.
+   in Ada.Task_Termination   *note C.7.3(6/2): 8438.
 
 Set_True
-   in Ada.Synchronous_Task_Control   *note D.10(4): 8556.
+   in Ada.Synchronous_Task_Control   *note D.10(4): 8689.
 
 Set_Unbounded_String
-   in Ada.Strings.Unbounded   *note A.4.5(11.1/2): 6371.
+   in Ada.Strings.Unbounded   *note A.4.5(11.1/2): 6465.
 
-Set_Value in Ada.Task_Attributes   *note C.7.2(6): 8297.
+Set_Value in Ada.Task_Attributes   *note C.7.2(6): 8425.
 
 Simple_Name
-   in Ada.Directories   *note A.16(16/2): 7148, *note A.16(38/2): 7168.
+   in Ada.Directories   *note A.16(16/2): 7247, *note A.16(38/2): 7267.
    in Ada.Directories.Hierarchical_File_Names   *note A.16.1(10/3):
-7198.
+7297.
 
 Sin
    in Ada.Numerics.Generic_Complex_Elementary_Functions   *note
-G.1.2(4): 8899.
-   in Ada.Numerics.Generic_Elementary_Functions   *note A.5.1(5): 6590.
+G.1.2(4): 9041.
+   in Ada.Numerics.Generic_Elementary_Functions   *note A.5.1(5): 6685.
 
 Sinh
    in Ada.Numerics.Generic_Complex_Elementary_Functions   *note
-G.1.2(6): 8907.
-   in Ada.Numerics.Generic_Elementary_Functions   *note A.5.1(7): 6606.
+G.1.2(6): 9049.
+   in Ada.Numerics.Generic_Elementary_Functions   *note A.5.1(7): 6700.
 
 Size
-   in Ada.Direct_IO   *note A.8.4(15): 6828.
-   in Ada.Directories   *note A.16(26/2): 7159, *note A.16(41/2): 7171.
-   in Ada.Streams.Stream_IO   *note A.12.1(23): 7089.
+   in Ada.Direct_IO   *note A.8.4(15): 6925.
+   in Ada.Directories   *note A.16(26/2): 7258, *note A.16(41/2): 7270.
+   in Ada.Streams.Stream_IO   *note A.12.1(23): 7187.
 
-Skip_Line in Ada.Text_IO   *note A.10.1(29): 6908.
+Skip_Line in Ada.Text_IO   *note A.10.1(29): 7006.
 
-Skip_Page in Ada.Text_IO   *note A.10.1(32): 6914.
+Skip_Page in Ada.Text_IO   *note A.10.1(32): 7012.
 
 Slice
-   in Ada.Strings.Bounded   *note A.4.4(28): 6320.
-   in Ada.Strings.Unbounded   *note A.4.5(22): 6377.
+   in Ada.Strings.Bounded   *note A.4.4(28): 6414.
+   in Ada.Strings.Unbounded   *note A.4.5(22): 6471.
 
 Solve
-   in Ada.Numerics.Generic_Complex_Arrays   *note G.3.2(46/2): 9035.
-   in Ada.Numerics.Generic_Real_Arrays   *note G.3.1(24/2): 8994.
+   in Ada.Numerics.Generic_Complex_Arrays   *note G.3.2(46/2): 9176.
+   in Ada.Numerics.Generic_Real_Arrays   *note G.3.1(24/2): 9136.
 
 Sort
-   in Ada.Containers.Doubly_Linked_Lists   *note A.18.3(49/2): 7386.
-   in Ada.Containers.Vectors   *note A.18.2(77/2): 7311.
+   in Ada.Containers.Doubly_Linked_Lists   *note A.18.3(49/2): 7486.
+   in Ada.Containers.Vectors   *note A.18.2(77/2): 7411.
 
 Specific_Handler
-   in Ada.Task_Termination   *note C.7.3(6/2): 8311.
+   in Ada.Task_Termination   *note C.7.3(6/2): 8439.
 
 Splice
-   in Ada.Containers.Doubly_Linked_Lists   *note A.18.3(30/2): 7368,
-*note A.18.3(31/2): 7369, *note A.18.3(32/2): 7370.
+   in Ada.Containers.Doubly_Linked_Lists   *note A.18.3(30/2): 7468,
+*note A.18.3(31/2): 7469, *note A.18.3(32/2): 7470.
 
 Splice_Children
-   in Ada.Containers.Multiway_Trees   *note A.18.10(57/3): 7782, *note
-A.18.10(58/3): 7783.
+   in Ada.Containers.Multiway_Trees   *note A.18.10(57/3): 7883, *note
+A.18.10(58/3): 7884.
 
 Splice_Subtree
-   in Ada.Containers.Multiway_Trees   *note A.18.10(55/3): 7780, *note
-A.18.10(56/3): 7781.
+   in Ada.Containers.Multiway_Trees   *note A.18.10(55/3): 7881, *note
+A.18.10(56/3): 7882.
 
 Split
-   in Ada.Calendar   *note 9.6(14): 4469.
-   in Ada.Calendar.Formatting   *note 9.6.1(29/2): 4515, *note
-9.6.1(32/2): 4518, *note 9.6.1(33/2): 4519, *note 9.6.1(34/2): 4520.
-   in Ada.Execution_Time   *note D.14(8/2): 8592.
-   in Ada.Real_Time   *note D.8(16): 8541.
+   in Ada.Calendar   *note 9.6(14): 4528.
+   in Ada.Calendar.Formatting   *note 9.6.1(29/2): 4574, *note
+9.6.1(32/2): 4577, *note 9.6.1(33/2): 4578, *note 9.6.1(34/2): 4579.
+   in Ada.Execution_Time   *note D.14(8/2): 8726.
+   in Ada.Real_Time   *note D.8(16): 8674.
 
 Sqrt
    in Ada.Numerics.Generic_Complex_Elementary_Functions   *note
-G.1.2(3): 8895.
-   in Ada.Numerics.Generic_Elementary_Functions   *note A.5.1(4): 6586.
+G.1.2(3): 9037.
+   in Ada.Numerics.Generic_Elementary_Functions   *note A.5.1(4): 6680.
 
-Standard_Error in Ada.Text_IO   *note A.10.1(16): 6884, *note
-A.10.1(19): 6891.
+Standard_Error in Ada.Text_IO   *note A.10.1(16): 6982, *note
+A.10.1(19): 6989.
 
-Standard_Input in Ada.Text_IO   *note A.10.1(16): 6882, *note
-A.10.1(19): 6889.
+Standard_Input in Ada.Text_IO   *note A.10.1(16): 6980, *note
+A.10.1(19): 6987.
 
-Standard_Output in Ada.Text_IO   *note A.10.1(16): 6883, *note
-A.10.1(19): 6890.
+Standard_Output in Ada.Text_IO   *note A.10.1(16): 6981, *note
+A.10.1(19): 6988.
 
-Start_Search in Ada.Directories   *note A.16(32/2): 7164.
+Start_Search in Ada.Directories   *note A.16(32/2): 7263.
 
 Storage_Size
-   in System.Storage_Pools   *note 13.11(9): 5626.
-   in System.Storage_Pools.Subpools   *note 13.11.4(16/3): 5706.
+   in System.Storage_Pools   *note 13.11(9): 5699.
+   in System.Storage_Pools.Subpools   *note 13.11.4(16/3): 5786.
 
 Stream
-   in Ada.Streams.Stream_IO   *note A.12.1(13): 7082.
-   in Ada.Text_IO.Text_Streams   *note A.12.2(4): 7106.
-   in Ada.Wide_Text_IO.Text_Streams   *note A.12.3(4): 7109.
-   in Ada.Wide_Wide_Text_IO.Text_Streams   *note A.12.4(4/2): 7112.
+   in Ada.Streams.Stream_IO   *note A.12.1(13): 7180.
+   in Ada.Text_IO.Text_Streams   *note A.12.2(4): 7205.
+   in Ada.Wide_Text_IO.Text_Streams   *note A.12.3(4): 7208.
+   in Ada.Wide_Wide_Text_IO.Text_Streams   *note A.12.4(4/2): 7211.
 
-Strlen in Interfaces.C.Strings   *note B.3.1(17): 8066.
+Strlen in Interfaces.C.Strings   *note B.3.1(17): 8189.
 
-Sub_Second in Ada.Calendar.Formatting   *note 9.6.1(27/2): 4513.
+Sub_Second in Ada.Calendar.Formatting   *note 9.6.1(27/2): 4572.
 
 Subtree_Node_Count
-   in Ada.Containers.Multiway_Trees   *note A.18.10(18/3): 7743.
+   in Ada.Containers.Multiway_Trees   *note A.18.10(18/3): 7844.
 
 Supported
-   in Ada.Execution_Time.Interrupts   *note D.14.3(3/3): 8648.
+   in Ada.Execution_Time.Interrupts   *note D.14.3(3/3): 8782.
 
 Suspend_Until_True
-   in Ada.Synchronous_Task_Control   *note D.10(4): 8559.
+   in Ada.Synchronous_Task_Control   *note D.10(4): 8692.
 
 Suspend_Until_True_And_Set_Deadline
-   in Ada.Synchronous_Task_Control.EDF   *note D.10(5.2/3): 8561.
+   in Ada.Synchronous_Task_Control.EDF   *note D.10(5.2/3): 8694.
 
 Swap
-   in Ada.Containers.Doubly_Linked_Lists   *note A.18.3(28/2): 7366.
-   in Ada.Containers.Multiway_Trees   *note A.18.10(37/3): 7762.
-   in Ada.Containers.Vectors   *note A.18.2(55/2): 7290, *note
-A.18.2(56/2): 7291.
+   in Ada.Containers.Doubly_Linked_Lists   *note A.18.3(28/2): 7466.
+   in Ada.Containers.Multiway_Trees   *note A.18.10(37/3): 7863.
+   in Ada.Containers.Vectors   *note A.18.2(55/2): 7390, *note
+A.18.2(56/2): 7391.
 
 Swap_Links
-   in Ada.Containers.Doubly_Linked_Lists   *note A.18.3(29/2): 7367.
+   in Ada.Containers.Doubly_Linked_Lists   *note A.18.3(29/2): 7467.
 
 Symmetric_Difference
-   in Ada.Containers.Hashed_Sets   *note A.18.8(35/2): 7601, *note
-A.18.8(36/2): 7602.
-   in Ada.Containers.Ordered_Sets   *note A.18.9(36/2): 7677, *note
-A.18.9(37/2): 7678.
+   in Ada.Containers.Hashed_Sets   *note A.18.8(35/2): 7701, *note
+A.18.8(36/2): 7702.
+   in Ada.Containers.Ordered_Sets   *note A.18.9(36/2): 7777, *note
+A.18.9(37/2): 7778.
 
 Tail
-   in Ada.Strings.Bounded   *note A.4.4(72): 6354, *note A.4.4(73):
-6355.
-   in Ada.Strings.Fixed   *note A.4.3(37): 6295, *note A.4.3(38): 6296.
-   in Ada.Strings.Unbounded   *note A.4.5(67): 6411, *note A.4.5(68):
-6412.
+   in Ada.Strings.Bounded   *note A.4.4(72): 6448, *note A.4.4(73):
+6449.
+   in Ada.Strings.Fixed   *note A.4.3(37): 6389, *note A.4.3(38): 6390.
+   in Ada.Strings.Unbounded   *note A.4.5(67): 6505, *note A.4.5(68):
+6506.
 
 Tan
    in Ada.Numerics.Generic_Complex_Elementary_Functions   *note
-G.1.2(4): 8901.
-   in Ada.Numerics.Generic_Elementary_Functions   *note A.5.1(5): 6594.
+G.1.2(4): 9043.
+   in Ada.Numerics.Generic_Elementary_Functions   *note A.5.1(5): 6688.
 
 Tanh
    in Ada.Numerics.Generic_Complex_Elementary_Functions   *note
-G.1.2(6): 8909.
-   in Ada.Numerics.Generic_Elementary_Functions   *note A.5.1(7): 6608.
+G.1.2(6): 9051.
+   in Ada.Numerics.Generic_Elementary_Functions   *note A.5.1(7): 6702.
 
 Time_Of
-   in Ada.Calendar   *note 9.6(15): 4470.
-   in Ada.Calendar.Formatting   *note 9.6.1(30/2): 4516, *note
-9.6.1(31/2): 4517.
-   in Ada.Execution_Time   *note D.14(9/2): 8593.
-   in Ada.Real_Time   *note D.8(16): 8542.
+   in Ada.Calendar   *note 9.6(15): 4529.
+   in Ada.Calendar.Formatting   *note 9.6.1(30/2): 4575, *note
+9.6.1(31/2): 4576.
+   in Ada.Execution_Time   *note D.14(9/2): 8727.
+   in Ada.Real_Time   *note D.8(16): 8675.
 
 Time_Of_Event
-   in Ada.Real_Time.Timing_Events   *note D.15(6/2): 8657.
+   in Ada.Real_Time.Timing_Events   *note D.15(6/2): 8791.
 
 Time_Remaining
-   in Ada.Execution_Time.Timers   *note D.14.1(8/2): 8611.
+   in Ada.Execution_Time.Timers   *note D.14.1(8/2): 8745.
 
 To_Ada
-   in Interfaces.C   *note B.3(22): 8008, *note B.3(26): 8012, *note
-B.3(28): 8014, *note B.3(32): 8018, *note B.3(37): 8022, *note B.3(39):
-8024, *note B.3(39.10/2): 8034, *note B.3(39.13/2): 8038, *note
-B.3(39.17/2): 8042, *note B.3(39.19/2): 8044, *note B.3(39.4/2): 8028,
-*note B.3(39.8/2): 8032.
-   in Interfaces.COBOL   *note B.4(17): 8120, *note B.4(19): 8122.
-   in Interfaces.Fortran   *note B.5(13): 8173, *note B.5(14): 8175,
-*note B.5(16): 8177.
+   in Interfaces.C   *note B.3(22): 8128, *note B.3(26): 8132, *note
+B.3(28): 8134, *note B.3(32): 8138, *note B.3(37): 8142, *note B.3(39):
+8144, *note B.3(39.10/2): 8154, *note B.3(39.13/2): 8158, *note
+B.3(39.17/2): 8162, *note B.3(39.19/2): 8164, *note B.3(39.4/2): 8148,
+*note B.3(39.8/2): 8152.
+   in Interfaces.COBOL   *note B.4(17): 8243, *note B.4(19): 8245.
+   in Interfaces.Fortran   *note B.5(13): 8296, *note B.5(14): 8298,
+*note B.5(16): 8300.
 
 To_Address
-   in System.Address_To_Access_Conversions   *note 13.7.2(3/3): 5574.
-   in System.Storage_Elements   *note 13.7.1(10/3): 5566.
+   in System.Address_To_Access_Conversions   *note 13.7.2(3/3): 5647.
+   in System.Storage_Elements   *note 13.7.1(10/3): 5639.
 
-To_Basic in Ada.Characters.Handling   *note A.3.2(6): 5926, *note
-A.3.2(7): 5929.
+To_Basic in Ada.Characters.Handling   *note A.3.2(6): 6020, *note
+A.3.2(7): 6023.
 
-To_Binary in Interfaces.COBOL   *note B.4(45): 8152, *note B.4(48):
-8155.
+To_Binary in Interfaces.COBOL   *note B.4(45): 8275, *note B.4(48):
+8278.
 
 To_Bounded_String
-   in Ada.Strings.Bounded   *note A.4.4(11): 6307.
+   in Ada.Strings.Bounded   *note A.4.4(11): 6401.
 
-To_C in Interfaces.C   *note B.3(21): 8007, *note B.3(25): 8011, *note
-B.3(27): 8013, *note B.3(32): 8017, *note B.3(36): 8021, *note B.3(38):
-8023, *note B.3(39.13/2): 8037, *note B.3(39.16/2): 8041, *note
-B.3(39.18/2): 8043, *note B.3(39.4/2): 8027, *note B.3(39.7/2): 8031,
-*note B.3(39.9/2): 8033.
+To_C in Interfaces.C   *note B.3(21): 8127, *note B.3(25): 8131, *note
+B.3(27): 8133, *note B.3(32): 8137, *note B.3(36): 8141, *note B.3(38):
+8143, *note B.3(39.13/2): 8157, *note B.3(39.16/2): 8161, *note
+B.3(39.18/2): 8163, *note B.3(39.4/2): 8147, *note B.3(39.7/2): 8151,
+*note B.3(39.9/2): 8153.
 
 To_Character
-   in Ada.Characters.Conversions   *note A.3.4(5/2): 6193.
+   in Ada.Characters.Conversions   *note A.3.4(5/2): 6287.
 
-To_Chars_Ptr in Interfaces.C.Strings   *note B.3.1(8): 8057.
+To_Chars_Ptr in Interfaces.C.Strings   *note B.3.1(8): 8180.
 
-To_COBOL in Interfaces.COBOL   *note B.4(17): 8119, *note B.4(18): 8121.
+To_COBOL in Interfaces.COBOL   *note B.4(17): 8242, *note B.4(18): 8244.
 
-To_Cursor in Ada.Containers.Vectors   *note A.18.2(25/2): 7253.
+To_Cursor in Ada.Containers.Vectors   *note A.18.2(25/2): 7353.
 
-To_Decimal in Interfaces.COBOL   *note B.4(35): 8143, *note B.4(40):
-8147, *note B.4(44): 8151, *note B.4(47): 8153.
+To_Decimal in Interfaces.COBOL   *note B.4(35): 8266, *note B.4(40):
+8270, *note B.4(44): 8274, *note B.4(47): 8276.
 
-To_Display in Interfaces.COBOL   *note B.4(36): 8144.
+To_Display in Interfaces.COBOL   *note B.4(36): 8267.
 
 To_Domain
-   in Ada.Strings.Maps   *note A.4.2(24): 6255.
-   in Ada.Strings.Wide_Maps   *note A.4.7(24): 6467.
-   in Ada.Strings.Wide_Wide_Maps   *note A.4.8(24/2): 6509.
+   in Ada.Strings.Maps   *note A.4.2(24): 6349.
+   in Ada.Strings.Wide_Maps   *note A.4.7(24): 6561.
+   in Ada.Strings.Wide_Wide_Maps   *note A.4.8(24/2): 6603.
 
-To_Duration in Ada.Real_Time   *note D.8(13): 8533.
+To_Duration in Ada.Real_Time   *note D.8(13): 8666.
 
-To_Fortran in Interfaces.Fortran   *note B.5(13): 8172, *note B.5(14):
-8174, *note B.5(15): 8176.
+To_Fortran in Interfaces.Fortran   *note B.5(13): 8295, *note B.5(14):
+8297, *note B.5(15): 8299.
 
 To_Holder
-   in Ada.Containers.Indefinite_Holders   *note A.18.18(9/3): 7827.
+   in Ada.Containers.Indefinite_Holders   *note A.18.18(9/3): 7935.
 
-To_Index in Ada.Containers.Vectors   *note A.18.2(26/2): 7254.
+To_Index in Ada.Containers.Vectors   *note A.18.2(26/2): 7354.
 
-To_Integer in System.Storage_Elements   *note 13.7.1(10/3): 5567.
+To_Integer in System.Storage_Elements   *note 13.7.1(10/3): 5640.
 
-To_ISO_646 in Ada.Characters.Handling   *note A.3.2(11): 5933, *note
-A.3.2(12): 5934.
+To_ISO_646 in Ada.Characters.Handling   *note A.3.2(11): 6027, *note
+A.3.2(12): 6028.
 
-To_Long_Binary in Interfaces.COBOL   *note B.4(48): 8156.
+To_Long_Binary in Interfaces.COBOL   *note B.4(48): 8279.
 
 To_Lower
-   in Ada.Characters.Handling   *note A.3.2(6): 5924, *note A.3.2(7):
-5927.
-   in Ada.Wide_Characters.Handling   *note A.3.5(20/3): 6215, *note
-A.3.5(21/3): 6217.
+   in Ada.Characters.Handling   *note A.3.2(6): 6018, *note A.3.2(7):
+6021.
+   in Ada.Wide_Characters.Handling   *note A.3.5(20/3): 6309, *note
+A.3.5(21/3): 6311.
 
 To_Mapping
-   in Ada.Strings.Maps   *note A.4.2(23): 6254.
-   in Ada.Strings.Wide_Maps   *note A.4.7(23): 6466.
-   in Ada.Strings.Wide_Wide_Maps   *note A.4.8(23/2): 6508.
+   in Ada.Strings.Maps   *note A.4.2(23): 6348.
+   in Ada.Strings.Wide_Maps   *note A.4.7(23): 6560.
+   in Ada.Strings.Wide_Wide_Maps   *note A.4.8(23/2): 6602.
 
-To_Packed in Interfaces.COBOL   *note B.4(41): 8148.
+To_Packed in Interfaces.COBOL   *note B.4(41): 8271.
 
-To_Picture in Ada.Text_IO.Editing   *note F.3.3(6): 8843.
+To_Picture in Ada.Text_IO.Editing   *note F.3.3(6): 8985.
 
 To_Pointer
-   in System.Address_To_Access_Conversions   *note 13.7.2(3/3): 5573.
+   in System.Address_To_Access_Conversions   *note 13.7.2(3/3): 5646.
 
 To_Range
-   in Ada.Strings.Maps   *note A.4.2(24): 6256.
-   in Ada.Strings.Wide_Maps   *note A.4.7(25): 6468.
-   in Ada.Strings.Wide_Wide_Maps   *note A.4.8(25/2): 6510.
+   in Ada.Strings.Maps   *note A.4.2(24): 6350.
+   in Ada.Strings.Wide_Maps   *note A.4.7(25): 6562.
+   in Ada.Strings.Wide_Wide_Maps   *note A.4.8(25/2): 6604.
 
 To_Ranges
-   in Ada.Strings.Maps   *note A.4.2(10): 6244.
-   in Ada.Strings.Wide_Maps   *note A.4.7(10): 6456.
-   in Ada.Strings.Wide_Wide_Maps   *note A.4.8(10/2): 6498.
+   in Ada.Strings.Maps   *note A.4.2(10): 6338.
+   in Ada.Strings.Wide_Maps   *note A.4.7(10): 6550.
+   in Ada.Strings.Wide_Wide_Maps   *note A.4.8(10/2): 6592.
 
 To_Sequence
-   in Ada.Strings.Maps   *note A.4.2(19): 6250.
-   in Ada.Strings.Wide_Maps   *note A.4.7(19): 6462.
-   in Ada.Strings.Wide_Wide_Maps   *note A.4.8(19/2): 6504.
+   in Ada.Strings.Maps   *note A.4.2(19): 6344.
+   in Ada.Strings.Wide_Maps   *note A.4.7(19): 6556.
+   in Ada.Strings.Wide_Wide_Maps   *note A.4.8(19/2): 6598.
 
 To_Set
-   in Ada.Containers.Hashed_Sets   *note A.18.8(9/2): 7575.
-   in Ada.Containers.Ordered_Sets   *note A.18.9(10/2): 7651.
-   in Ada.Strings.Maps   *note A.4.2(8): 6242, *note A.4.2(9): 6243,
-*note A.4.2(17): 6248, *note A.4.2(18): 6249.
-   in Ada.Strings.Wide_Maps   *note A.4.7(8): 6454, *note A.4.7(9):
-6455, *note A.4.7(17): 6460, *note A.4.7(18): 6461.
-   in Ada.Strings.Wide_Wide_Maps   *note A.4.8(8/2): 6496, *note
-A.4.8(9/2): 6497, *note A.4.8(17/2): 6502, *note A.4.8(18/2): 6503.
+   in Ada.Containers.Hashed_Sets   *note A.18.8(9/2): 7675.
+   in Ada.Containers.Ordered_Sets   *note A.18.9(10/2): 7751.
+   in Ada.Strings.Maps   *note A.4.2(8): 6336, *note A.4.2(9): 6337,
+*note A.4.2(17): 6342, *note A.4.2(18): 6343.
+   in Ada.Strings.Wide_Maps   *note A.4.7(8): 6548, *note A.4.7(9):
+6549, *note A.4.7(17): 6554, *note A.4.7(18): 6555.
+   in Ada.Strings.Wide_Wide_Maps   *note A.4.8(8/2): 6590, *note
+A.4.8(9/2): 6591, *note A.4.8(17/2): 6596, *note A.4.8(18/2): 6597.
 
 To_String
-   in Ada.Characters.Conversions   *note A.3.4(5/2): 6192.
-   in Ada.Strings.Bounded   *note A.4.4(12): 6308.
-   in Ada.Strings.Unbounded   *note A.4.5(11): 6370.
+   in Ada.Characters.Conversions   *note A.3.4(5/2): 6286.
+   in Ada.Strings.Bounded   *note A.4.4(12): 6402.
+   in Ada.Strings.Unbounded   *note A.4.5(11): 6464.
 
-To_Time_Span in Ada.Real_Time   *note D.8(13): 8534.
+To_Time_Span in Ada.Real_Time   *note D.8(13): 8667.
 
 To_Unbounded_String
-   in Ada.Strings.Unbounded   *note A.4.5(9): 6368, *note A.4.5(10):
-6369.
+   in Ada.Strings.Unbounded   *note A.4.5(9): 6462, *note A.4.5(10):
+6463.
 
 To_Upper
-   in Ada.Characters.Handling   *note A.3.2(6): 5925, *note A.3.2(7):
-5928.
-   in Ada.Wide_Characters.Handling   *note A.3.5(20/3): 6216, *note
-A.3.5(21/3): 6218.
+   in Ada.Characters.Handling   *note A.3.2(6): 6019, *note A.3.2(7):
+6022.
+   in Ada.Wide_Characters.Handling   *note A.3.5(20/3): 6310, *note
+A.3.5(21/3): 6312.
 
-To_Vector in Ada.Containers.Vectors   *note A.18.2(13/2): 7245, *note
-A.18.2(14/2): 7246.
+To_Vector in Ada.Containers.Vectors   *note A.18.2(13/2): 7345, *note
+A.18.2(14/2): 7346.
 
 To_Wide_Character
-   in Ada.Characters.Conversions   *note A.3.4(4/2): 6185, *note
-A.3.4(5/2): 6195.
+   in Ada.Characters.Conversions   *note A.3.4(4/2): 6279, *note
+A.3.4(5/2): 6289.
 
 To_Wide_String
-   in Ada.Characters.Conversions   *note A.3.4(4/2): 6186, *note
-A.3.4(5/2): 6196.
+   in Ada.Characters.Conversions   *note A.3.4(4/2): 6280, *note
+A.3.4(5/2): 6290.
 
 To_Wide_Wide_Character
-   in Ada.Characters.Conversions   *note A.3.4(4/2): 6189.
+   in Ada.Characters.Conversions   *note A.3.4(4/2): 6283.
 
 To_Wide_Wide_String
-   in Ada.Characters.Conversions   *note A.3.4(4/2): 6190.
+   in Ada.Characters.Conversions   *note A.3.4(4/2): 6284.
 
 Translate
-   in Ada.Strings.Bounded   *note A.4.4(53): 6336, *note A.4.4(54):
-6337, *note A.4.4(55): 6338, *note A.4.4(56): 6339.
-   in Ada.Strings.Fixed   *note A.4.3(18): 6277, *note A.4.3(19): 6278,
-*note A.4.3(20): 6279, *note A.4.3(21): 6280.
-   in Ada.Strings.Unbounded   *note A.4.5(48): 6393, *note A.4.5(49):
-6394, *note A.4.5(50): 6395, *note A.4.5(51): 6396.
+   in Ada.Strings.Bounded   *note A.4.4(53): 6430, *note A.4.4(54):
+6431, *note A.4.4(55): 6432, *note A.4.4(56): 6433.
+   in Ada.Strings.Fixed   *note A.4.3(18): 6371, *note A.4.3(19): 6372,
+*note A.4.3(20): 6373, *note A.4.3(21): 6374.
+   in Ada.Strings.Unbounded   *note A.4.5(48): 6487, *note A.4.5(49):
+6488, *note A.4.5(50): 6489, *note A.4.5(51): 6490.
 
 Transpose
-   in Ada.Numerics.Generic_Complex_Arrays   *note G.3.2(34/2): 9033.
-   in Ada.Numerics.Generic_Real_Arrays   *note G.3.1(17/2): 8992.
+   in Ada.Numerics.Generic_Complex_Arrays   *note G.3.2(34/2): 9175.
+   in Ada.Numerics.Generic_Real_Arrays   *note G.3.1(17/2): 9134.
 
 Trim
-   in Ada.Strings.Bounded   *note A.4.4(67): 6348, *note A.4.4(68):
-6350, *note A.4.4(69): 6351.
-   in Ada.Strings.Fixed   *note A.4.3(31): 6289, *note A.4.3(32): 6290,
-*note A.4.3(33): 6291, *note A.4.3(34): 6292.
-   in Ada.Strings.Unbounded   *note A.4.5(61): 6405, *note A.4.5(62):
-6406, *note A.4.5(63): 6407, *note A.4.5(64): 6408.
+   in Ada.Strings.Bounded   *note A.4.4(67): 6442, *note A.4.4(68):
+6444, *note A.4.4(69): 6445.
+   in Ada.Strings.Fixed   *note A.4.3(31): 6383, *note A.4.3(32): 6384,
+*note A.4.3(33): 6385, *note A.4.3(34): 6386.
+   in Ada.Strings.Unbounded   *note A.4.5(61): 6499, *note A.4.5(62):
+6500, *note A.4.5(63): 6501, *note A.4.5(64): 6502.
 
 Unbounded_Slice
-   in Ada.Strings.Unbounded   *note A.4.5(22.1/2): 6378, *note
-A.4.5(22.2/2): 6379.
+   in Ada.Strings.Unbounded   *note A.4.5(22.1/2): 6472, *note
+A.4.5(22.2/2): 6473.
 
 Unchecked_Conversion
-   child of Ada   *note 13.9(3/3): 5590.
+   child of Ada   *note 13.9(3/3): 5663.
 
 Unchecked_Deallocation
-   child of Ada   *note 13.11.2(3/3): 5669.
+   child of Ada   *note 13.11.2(3/3): 5742.
 
 Union
-   in Ada.Containers.Hashed_Sets   *note A.18.8(26/2): 7595, *note
-A.18.8(27/2): 7596.
-   in Ada.Containers.Ordered_Sets   *note A.18.9(27/2): 7671, *note
-A.18.9(28/2): 7672.
+   in Ada.Containers.Hashed_Sets   *note A.18.8(26/2): 7695, *note
+A.18.8(27/2): 7696.
+   in Ada.Containers.Ordered_Sets   *note A.18.9(27/2): 7771, *note
+A.18.9(28/2): 7772.
 
 Unit_Matrix
-   in Ada.Numerics.Generic_Complex_Arrays   *note G.3.2(51/2): 9040.
-   in Ada.Numerics.Generic_Real_Arrays   *note G.3.1(29/2): 8999.
+   in Ada.Numerics.Generic_Complex_Arrays   *note G.3.2(51/2): 9182.
+   in Ada.Numerics.Generic_Real_Arrays   *note G.3.1(29/2): 9141.
 
 Unit_Vector
-   in Ada.Numerics.Generic_Complex_Arrays   *note G.3.2(24/2): 9020.
-   in Ada.Numerics.Generic_Real_Arrays   *note G.3.1(14/2): 8991.
+   in Ada.Numerics.Generic_Complex_Arrays   *note G.3.2(24/2): 9162.
+   in Ada.Numerics.Generic_Real_Arrays   *note G.3.1(14/2): 9133.
 
-Update in Interfaces.C.Strings   *note B.3.1(18): 8067, *note B.3.1(19):
-8068.
+Update in Interfaces.C.Strings   *note B.3.1(18): 8190, *note B.3.1(19):
+8191.
 
 Update_Element
-   in Ada.Containers.Doubly_Linked_Lists   *note A.18.3(17/2): 7350.
-   in Ada.Containers.Hashed_Maps   *note A.18.5(17/2): 7444.
-   in Ada.Containers.Indefinite_Holders   *note A.18.18(15/3): 7833.
-   in Ada.Containers.Multiway_Trees   *note A.18.10(27/3): 7752.
-   in Ada.Containers.Ordered_Maps   *note A.18.6(16/2): 7498.
-   in Ada.Containers.Vectors   *note A.18.2(33/2): 7261, *note
-A.18.2(34/2): 7262.
+   in Ada.Containers.Doubly_Linked_Lists   *note A.18.3(17/2): 7450.
+   in Ada.Containers.Hashed_Maps   *note A.18.5(17/2): 7544.
+   in Ada.Containers.Indefinite_Holders   *note A.18.18(15/3): 7941.
+   in Ada.Containers.Multiway_Trees   *note A.18.10(27/3): 7853.
+   in Ada.Containers.Ordered_Maps   *note A.18.6(16/2): 7598.
+   in Ada.Containers.Vectors   *note A.18.2(33/2): 7361, *note
+A.18.2(34/2): 7362.
 
 Update_Element_Preserving_Key
-   in Ada.Containers.Hashed_Sets   *note A.18.8(58/2): 7622.
-   in Ada.Containers.Ordered_Sets   *note A.18.9(73/2): 7706.
+   in Ada.Containers.Hashed_Sets   *note A.18.8(58/2): 7722.
+   in Ada.Containers.Ordered_Sets   *note A.18.9(73/2): 7806.
 
-Update_Error in Interfaces.C.Strings   *note B.3.1(20): 8069.
+Update_Error in Interfaces.C.Strings   *note B.3.1(20): 8192.
 
 UTC_Time_Offset
-   in Ada.Calendar.Time_Zones   *note 9.6.1(6/2): 4488.
+   in Ada.Calendar.Time_Zones   *note 9.6.1(6/2): 4547.
 
 Valid
-   in Ada.Text_IO.Editing   *note F.3.3(5): 8842, *note F.3.3(12): 8854.
-   in Interfaces.COBOL   *note B.4(33): 8141, *note B.4(38): 8145, *note
-B.4(43): 8149.
+   in Ada.Text_IO.Editing   *note F.3.3(5): 8984, *note F.3.3(12): 8996.
+   in Interfaces.COBOL   *note B.4(33): 8264, *note B.4(38): 8268, *note
+B.4(43): 8272.
 
 Value
-   in Ada.Calendar.Formatting   *note 9.6.1(36/2): 4522, *note
-9.6.1(38/2): 4524.
-   in Ada.Environment_Variables   *note A.17(4.1/3): 7207, *note
-A.17(4/2): 7206.
-   in Ada.Numerics.Discrete_Random   *note A.5.2(26): 6645.
-   in Ada.Numerics.Float_Random   *note A.5.2(14): 6633.
-   in Ada.Strings.Maps   *note A.4.2(21): 6252.
-   in Ada.Strings.Wide_Maps   *note A.4.7(21): 6464.
-   in Ada.Strings.Wide_Wide_Maps   *note A.4.8(21/2): 6506.
-   in Ada.Task_Attributes   *note C.7.2(4): 8295.
-   in Interfaces.C.Pointers   *note B.3.2(6): 8078, *note B.3.2(7):
-8079.
-   in Interfaces.C.Strings   *note B.3.1(13): 8062, *note B.3.1(14):
-8063, *note B.3.1(15): 8064, *note B.3.1(16): 8065.
+   in Ada.Calendar.Formatting   *note 9.6.1(36/2): 4581, *note
+9.6.1(38/2): 4583.
+   in Ada.Environment_Variables   *note A.17(4.1/3): 7306, *note
+A.17(4/2): 7305.
+   in Ada.Numerics.Discrete_Random   *note A.5.2(26): 6739.
+   in Ada.Numerics.Float_Random   *note A.5.2(14): 6727.
+   in Ada.Strings.Maps   *note A.4.2(21): 6346.
+   in Ada.Strings.Wide_Maps   *note A.4.7(21): 6558.
+   in Ada.Strings.Wide_Wide_Maps   *note A.4.8(21/2): 6600.
+   in Ada.Task_Attributes   *note C.7.2(4): 8423.
+   in Interfaces.C.Pointers   *note B.3.2(6): 8201, *note B.3.2(7):
+8202.
+   in Interfaces.C.Strings   *note B.3.1(13): 8185, *note B.3.1(14):
+8186, *note B.3.1(15): 8187, *note B.3.1(16): 8188.
 
 Virtual_Length
-   in Interfaces.C.Pointers   *note B.3.2(13): 8083.
+   in Interfaces.C.Pointers   *note B.3.2(13): 8206.
 
 Wait_For_Release
-   in Ada.Synchronous_Barriers   *note D.10.1(6/3): 8570.
+   in Ada.Synchronous_Barriers   *note D.10.1(6/3): 8703.
 
 Wide_Equal_Case_Insensitive
-   child of Ada.Strings.Wide_Bounded   *note A.4.7(1/3): 6442.
-   child of Ada.Strings.Wide_Fixed   *note A.4.7(1/3): 6441.
-   child of Ada.Strings.W