[Ada] Expand integer-only implementation of ordinary fixed-point types
authorEric Botcazou <ebotcazou@adacore.com>
Tue, 10 Nov 2020 11:14:56 +0000 (12:14 +0100)
committerPierre-Marie de Rodat <derodat@adacore.com>
Mon, 30 Nov 2020 14:16:19 +0000 (09:16 -0500)
gcc/ada/

* doc/gnat_rm/implementation_defined_attributes.rst (Pool_Address):
Fix pasto.
(Small_Denominator): New entry.
(Small_Numerator): Likewise.
* doc/gnat_rm/implementation_defined_characteristics.rst (3.5.9):
Relax conditions on 128-bit smalls and integer-only implementation.
* gnat_rm.texi: Regenerate.
* exp_attr.adb (Expand_N_Attribute_Reference) <Attribute_Fore>:
Relax conditions on integer implementation for ordinary fixed-point
types and pass a third parameter to the routine.
<Attribute_Small_Denominator>: Raise Program_Error.
<Attribute_Small_Numerator>: Likewise.
* exp_fixd.adb (Expand_Convert_Fixed_To_Fixed): Use a scaled divide
if the numerator and denominator of the small ratio are sufficiently
small integers.
(Expand_Convert_Fixed_To_Integer): Use a scaled divide if numerator
and denominator of the small value are sufficiently small integers.
(Expand_Convert_Integer_To_Fixed): Likewise.
* exp_imgv.adb (Expand_Image_Attribute): Relax the conditions on the
integer implementation for ordinary fixed-point types.
(Expand_Value_Attribute): Likewise.
* freeze.adb (Freeze_Fixed_Point_Type): Relax conditions on 128-bit
smalls.
* sem_attr.adb (Analyze_Attribute) <Attribute_Small_Denominator>:
Check no arguments, fixed-point and set type to Universal_Integer.
<Attribute_Small_Numerator>: Likewise.
(Eval_Attribute) <Attribute_Small_Denominator>: Fold statically.
<Attribute_Small_Numerator>: Likewise.
* snames.ads-tmpl (Name_Small_Denominator): New attribute name.
(Name_Small_Numerator): Likewise.
(Attribute_Id): Add Attribute_Small_{Denominator,Numerator}.
* libgnat/a-tifiio.adb (Exact): Delete.
(Need_64): Likewise.
(OK_Get_32): New boolean constant.
(OK_Put_32): Likewise.
(OK_Get_64): Likewise.
(OK_Put_64): Likewise.
(E): Adjust.
(Get procedures): Likewise.
(Put procedures): Likewise.
* libgnat/a-tifiio__128.adb (Exact): Delete.
(Need_64): Likewise.
(Need_128): Likewise.
(OK_Get_32): New boolean constant.
(OK_Put_32): Likewise.
(OK_Get_64): Likewise.
(OK_Put_64): Likewise.
(OK_Get_128): Likewise.
(OK_Put_128): Likewise.
(E): Adjust.
(Get procedures): Likewise.
(Put procedures): Likewise.
* libgnat/a-wtfiio.adb (Exact): Delete.
(Need_64): Likewise.
(OK_Get_32): New boolean constant.
(OK_Put_32): Likewise.
(OK_Get_64): Likewise.
(OK_Put_64): Likewise.
(E): Adjust.
(Get procedures): Likewise.
(Put procedures): Likewise.
* libgnat/a-wtfiio__128.adb (Exact): Delete.
(Need_64): Likewise.
(Need_128): Likewise.
(OK_Get_32): New boolean constant.
(OK_Put_32): Likewise.
(OK_Get_64): Likewise.
(OK_Put_64): Likewise.
(OK_Get_128): Likewise.
(OK_Put_128): Likewise.
(E): Adjust.
(Get procedures): Likewise.
(Put procedures): Likewise.
* libgnat/a-ztfiio.adb (Exact): Delete.
(Need_64): Likewise.
(OK_Get_32): New boolean constant.
(OK_Put_32): Likewise.
(OK_Get_64): Likewise.
(OK_Put_64): Likewise.
(E): Adjust.
(Get procedures): Likewise.
(Put procedures): Likewise.
* libgnat/a-ztfiio__128.adb (Exact): Delete.
(Need_64): Likewise.
(Need_128): Likewise.
(OK_Get_32): New boolean constant.
(OK_Put_32): Likewise.
(OK_Get_64): Likewise.
(OK_Put_64): Likewise.
(OK_Get_128): Likewise.
(OK_Put_128): Likewise.
(E): Adjust.
(Get procedures): Likewise.
(Put procedures): Likewise.
* libgnat/s-fore_f.ads (Fore_Fixed): Adjust signature.
* libgnat/s-fore_f.adb (Fore_Fixed): Reimplement.
* libgnat/s-fofi32.ads (Fore_Fixed32): Adjust signature.
* libgnat/s-fofi64.ads (Fore_Fixed64): Likewise.
* libgnat/s-fofi128.ads (Fore_Fixed128): Likewise.
* libgnat/s-imagef.ads: Adjust description.
* libgnat/s-imagef.adb (Maxdigs): Move around.
(Set_Image_Integer): Remove assertion.
* libgnat/s-valuef.ads: Adjust description.
* libgnat/s-valuef.adb (Integer_To_Fixed): Minor tweak.

24 files changed:
gcc/ada/doc/gnat_rm/implementation_defined_attributes.rst
gcc/ada/doc/gnat_rm/implementation_defined_characteristics.rst
gcc/ada/exp_attr.adb
gcc/ada/exp_fixd.adb
gcc/ada/exp_imgv.adb
gcc/ada/freeze.adb
gcc/ada/gnat_rm.texi
gcc/ada/libgnat/a-tifiio.adb
gcc/ada/libgnat/a-tifiio__128.adb
gcc/ada/libgnat/a-wtfiio.adb
gcc/ada/libgnat/a-wtfiio__128.adb
gcc/ada/libgnat/a-ztfiio.adb
gcc/ada/libgnat/a-ztfiio__128.adb
gcc/ada/libgnat/s-fofi128.ads
gcc/ada/libgnat/s-fofi32.ads
gcc/ada/libgnat/s-fofi64.ads
gcc/ada/libgnat/s-fore_f.adb
gcc/ada/libgnat/s-fore_f.ads
gcc/ada/libgnat/s-imagef.adb
gcc/ada/libgnat/s-imagef.ads
gcc/ada/libgnat/s-valuef.adb
gcc/ada/libgnat/s-valuef.ads
gcc/ada/sem_attr.adb
gcc/ada/snames.ads-tmpl

index 32e951c980f2abd6280e9453a1e0b74b6818f9a3..f8d41ea5b8d209355925d08144befc880ef8bcf2 100644 (file)
@@ -817,8 +817,6 @@ and is static.  For non-scalar types, the result is nonstatic.
 
 Attribute Pool_Address
 ======================
-.. index:: Parameters, when passed by reference
-
 .. index:: Pool_Address
 
 ``X'Pool_Address`` for any object ``X`` returns the address
@@ -1142,6 +1140,26 @@ for compatibility with Ada 83.  See
 the Ada 83 reference manual for an exact description of the semantics of
 this attribute when applied to floating-point types.
 
+Attribute Small_Denominator
+===========================
+.. index:: Small
+
+.. index:: Small_Denominator
+
+``typ'Small_Denominator`` for any fixed-point subtype `typ` yields the
+denominator in the representation of ``typ'Small`` as a rational number
+with coprime factors (i.e. as an irreducible fraction).
+
+Attribute Small_Numerator
+=========================
+.. index:: Small
+
+.. index:: Small_Numerator
+
+``typ'Small_Numerator`` for any fixed-point subtype `typ` yields the
+numerator in the representation of ``typ'Small`` as a rational number
+with coprime factors (i.e. as an irreducible fraction).
+
 Attribute Storage_Unit
 ======================
 .. index:: Storage_Unit
index 7dc28c2689123dfbed90e2135bbeedec1f88819b..10fcfc93c1d0330ddd42d6ccfe47b07cf5bad802 100644 (file)
@@ -160,15 +160,16 @@ is permitted that does not result in a mantissa larger than 63 bits.
 On 64-bit platforms, the small must lie in 2.0**(-127) .. 2.0**127 and the
 range in -1.0E+76 .. 1.0E+76; any combination is permitted that does not
 result in a mantissa larger than 63 bits, and any combination is permitted
-that results in a mantissa between 64 and 127 bits if the small is either
-an integer or the reciprocal of an integer.
-
-If the small is either an integer or the reciprocal of an integer, which
-is the case if no ``small`` clause is provided, then the operations of the
-fixed point type are entirely implemented by means of integer instructions.
-In the other cases, some operations, in particular input and output, may be
-implemented by means of floating-point instructions and may be affected by
-accuracy issues on architectures other than x86.
+that results in a mantissa between 64 and 127 bits if the small is the
+ratio of two integers that lie in 1 .. 2.0**127.
+
+If the small is the ratio of two integers with 64-bit magnitude on 32-bit
+platforms and 128-bit magnitude on 64-bit platforms, which is the case if
+no ``small`` clause is provided, then the operations of the fixed point
+type are entirely implemented by means of integer instructions.  In the
+other cases, some operations, in particular input and output, may be
+implemented by means of floating-point instructions and may be affected
+by accuracy issues on architectures other than x86.
 
 For a decimal fixed point type, on 32-bit platforms, the small must lie in
 1.0E-18 .. 1.0E+18 and the digits in 1 .. 18.  On 64-bit platforms, the
index ad47f48651f3c695463f95457ea0c755e91e468b..251fa1449c4a612669bae86d7d1191b5c650ec67 100644 (file)
@@ -3626,8 +3626,9 @@ package body Exp_Attr is
       --    For the most common ordinary fixed-point types
       --      xx   = Fixed{32,64,128}
       --      ftyp = Integer_{32,64,128}
-      --      pm   = Typ'Small
-      --             1.0 / Typ'Small
+      --      pm   = numerator of Typ'Small
+      --             denominator of Typ'Small
+      --             min (scale of Typ'Small, 0)
 
       --    For other ordinary fixed-point types
       --      xx   = Real
@@ -3666,20 +3667,26 @@ package body Exp_Attr is
 
                begin
                   if Siz <= 32
-                    and then Min = Uint_1
                     and then Max <= Uint_2 ** 31
+                    and then (Min = Uint_1
+                               or else Num < Den
+                               or else Num < Uint_10 ** 8)
                   then
                      Fid  := RE_Fore_Fixed32;
                      Ftyp := RTE (RE_Integer_32);
                   elsif Siz <= 64
-                    and then Min = Uint_1
                     and then Max <= Uint_2 ** 63
+                    and then (Min = Uint_1
+                               or else Num < Den
+                               or else Num < Uint_10 ** 17)
                   then
                      Fid  := RE_Fore_Fixed64;
                      Ftyp := RTE (RE_Integer_64);
                   elsif System_Max_Integer_Size = 128
-                    and then Min = Uint_1
                     and then Max <= Uint_2 ** 127
+                    and then (Min = Uint_1
+                               or else Num < Den
+                               or else Num < Uint_10 ** 37)
                   then
                      Fid  := RE_Fore_Fixed128;
                      Ftyp := RTE (RE_Integer_128);
@@ -3711,8 +3718,8 @@ package body Exp_Attr is
                Append_To (Arg_List,
                  Make_Integer_Literal (Loc, Scale_Value (Ptyp)));
 
-            --  For ordinary fixed-point types, append Num, Den parameters
-            --  and also set to do literal conversion
+            --  For ordinary fixed-point types, append Num, Den and Scale
+            --  parameters and also set to do literal conversion
 
             elsif Fid /= RE_Fore_Real then
                Set_Conversion_OK (First (Arg_List));
@@ -3723,6 +3730,20 @@ package body Exp_Attr is
 
                Append_To (Arg_List,
                  Make_Integer_Literal (Loc, -Norm_Den (Small_Value (Ptyp))));
+
+               declare
+                  Val   : Ureal := Small_Value (Ptyp);
+                  Scale : Int   := 0;
+
+               begin
+                  while Val >= Ureal_10 loop
+                     Val := Val / Ureal_10;
+                     Scale := Scale - 1;
+                  end loop;
+
+                  Append_To (Arg_List,
+                     Make_Integer_Literal (Loc, UI_From_Int (Scale)));
+               end;
             end if;
 
             Rewrite (N,
@@ -7813,6 +7834,8 @@ package body Exp_Attr is
          | Attribute_Scale
          | Attribute_Signed_Zeros
          | Attribute_Small
+         | Attribute_Small_Denominator
+         | Attribute_Small_Numerator
          | Attribute_Storage_Unit
          | Attribute_Stub_Type
          | Attribute_System_Allocator_Alignment
index a85b6e7433e61f92e602f2ae81dbd8173e29c830..3bb7207bf00cef588a96557cacd180f42f539317 100644 (file)
@@ -1594,6 +1594,10 @@ package body Exp_Fixd is
    --  If the small ratio is the reciprocal of a sufficiently small integer,
    --  then the perfect result set is obtained by a single integer division.
 
+   --  If the numerator and denominator of the small ratio are sufficiently
+   --  small integers, then the perfect result set is obtained by a scaled
+   --  divide operation.
+
    --  In other cases, we obtain the close result set by calculating the
    --  result in floating-point.
 
@@ -1605,7 +1609,8 @@ package body Exp_Fixd is
       Small_Ratio : Ureal;
       Ratio_Num   : Uint;
       Ratio_Den   : Uint;
-      Lit         : Node_Id;
+      Lit_Num     : Node_Id;
+      Lit_Den     : Node_Id;
 
    begin
       if Is_OK_Static_Expression (Expr) then
@@ -1623,26 +1628,36 @@ package body Exp_Fixd is
             return;
 
          else
-            Lit := Integer_Literal (N, Ratio_Num);
+            Lit_Num := Integer_Literal (N, Ratio_Num);
 
-            if Present (Lit) then
-               Set_Result (N, Build_Multiply (N, Expr, Lit));
+            if Present (Lit_Num) then
+               Set_Result (N, Build_Multiply (N, Expr, Lit_Num));
                return;
             end if;
          end if;
 
       elsif Ratio_Num = 1 then
-         Lit := Integer_Literal (N, Ratio_Den);
+         Lit_Den := Integer_Literal (N, Ratio_Den);
 
-         if Present (Lit) then
-            Set_Result (N, Build_Divide (N, Expr, Lit), Rng_Check);
+         if Present (Lit_Den) then
+            Set_Result (N, Build_Divide (N, Expr, Lit_Den), Rng_Check);
+            return;
+         end if;
+
+      else
+         Lit_Num := Integer_Literal (N, Ratio_Num);
+         Lit_Den := Integer_Literal (N, Ratio_Den);
+
+         if Present (Lit_Num) and then Present (Lit_Den) then
+            Set_Result
+              (N, Build_Scaled_Divide (N, Expr, Lit_Num, Lit_Den), Rng_Check);
             return;
          end if;
       end if;
 
-      --  Fall through to use floating-point for the close result set case
-      --  either as a result of the small ratio not being an integer or the
-      --  reciprocal of an integer, or if the integer is out of range.
+      --  Fall through to use floating-point for the close result set case,
+      --  as a result of the numerator or denominator of the small ratio not
+      --  being a sufficiently small integer.
 
       Set_Result (N,
         Build_Multiply (N,
@@ -1698,6 +1713,10 @@ package body Exp_Fixd is
    --  If the small value is the reciprocal of a sufficiently small integer,
    --  then the perfect result set is obtained by a single integer division.
 
+   --  If the numerator and denominator of the small value are sufficiently
+   --  small integers, then the perfect result set is obtained by a scaled
+   --  divide operation.
+
    --  In other cases, we obtain the close result set by calculating the
    --  result in floating-point.
 
@@ -1708,7 +1727,8 @@ package body Exp_Fixd is
       Small       : constant Ureal     := Small_Value (Source_Type);
       Small_Num   : constant Uint      := Norm_Num (Small);
       Small_Den   : constant Uint      := Norm_Den (Small);
-      Lit         : Node_Id;
+      Lit_Num     : Node_Id;
+      Lit_Den     : Node_Id;
 
    begin
       if Is_OK_Static_Expression (Expr) then
@@ -1717,25 +1737,35 @@ package body Exp_Fixd is
       end if;
 
       if Small_Den = 1 then
-         Lit := Integer_Literal (N, Small_Num);
+         Lit_Num := Integer_Literal (N, Small_Num);
 
-         if Present (Lit) then
-            Set_Result (N, Build_Multiply (N, Expr, Lit), Rng_Check);
+         if Present (Lit_Num) then
+            Set_Result (N, Build_Multiply (N, Expr, Lit_Num), Rng_Check);
             return;
          end if;
 
       elsif Small_Num = 1 then
-         Lit := Integer_Literal (N, Small_Den);
+         Lit_Den := Integer_Literal (N, Small_Den);
+
+         if Present (Lit_Den) then
+            Set_Result (N, Build_Divide (N, Expr, Lit_Den), Rng_Check);
+            return;
+         end if;
+
+      else
+         Lit_Num := Integer_Literal (N, Small_Num);
+         Lit_Den := Integer_Literal (N, Small_Den);
 
-         if Present (Lit) then
-            Set_Result (N, Build_Divide (N, Expr, Lit), Rng_Check);
+         if Present (Lit_Num) and then Present (Lit_Den) then
+            Set_Result
+              (N, Build_Scaled_Divide (N, Expr, Lit_Num, Lit_Den), Rng_Check);
             return;
          end if;
       end if;
 
-      --  Fall through to use floating-point for the close result set case
-      --  either as a result of the small value not being an integer or the
-      --  reciprocal of an integer, or if the integer is out of range.
+      --  Fall through to use floating-point for the close result set case,
+      --  as a result of the numerator or denominator of the small value not
+      --  being a sufficiently small integer.
 
       Set_Result (N,
         Build_Multiply (N,
@@ -1817,6 +1847,10 @@ package body Exp_Fixd is
    --  If the small value is the reciprocal of a sufficiently small integer,
    --  the perfect result set is obtained by a single integer multiplication.
 
+   --  If the numerator and denominator of the small value are sufficiently
+   --  small integers, then the perfect result set is obtained by a scaled
+   --  divide operation.
+
    --  In other cases, we obtain the close result set by calculating the
    --  result in floating-point using a multiplication by the reciprocal
    --  of the Result_Small.
@@ -1828,29 +1862,40 @@ package body Exp_Fixd is
       Small       : constant Ureal     := Small_Value (Result_Type);
       Small_Num   : constant Uint      := Norm_Num (Small);
       Small_Den   : constant Uint      := Norm_Den (Small);
-      Lit         : Node_Id;
+      Lit_Num     : Node_Id;
+      Lit_Den     : Node_Id;
 
    begin
       if Small_Den = 1 then
-         Lit := Integer_Literal (N, Small_Num);
+         Lit_Num := Integer_Literal (N, Small_Num);
 
-         if Present (Lit) then
-            Set_Result (N, Build_Divide (N, Expr, Lit), Rng_Check);
+         if Present (Lit_Num) then
+            Set_Result (N, Build_Divide (N, Expr, Lit_Num), Rng_Check);
             return;
          end if;
 
       elsif Small_Num = 1 then
-         Lit := Integer_Literal (N, Small_Den);
+         Lit_Den := Integer_Literal (N, Small_Den);
+
+         if Present (Lit_Den) then
+            Set_Result (N, Build_Multiply (N, Expr, Lit_Den), Rng_Check);
+            return;
+         end if;
+
+      else
+         Lit_Num := Integer_Literal (N, Small_Num);
+         Lit_Den := Integer_Literal (N, Small_Den);
 
-         if Present (Lit) then
-            Set_Result (N, Build_Multiply (N, Expr, Lit), Rng_Check);
+         if Present (Lit_Num) and then Present (Lit_Den) then
+            Set_Result
+              (N, Build_Scaled_Divide (N, Expr, Lit_Den, Lit_Num), Rng_Check);
             return;
          end if;
       end if;
 
-      --  Fall through to use floating-point for the close result set case
-      --  either as a result of the small value not being an integer or the
-      --  reciprocal of an integer, or if the integer is out of range.
+      --  Fall through to use floating-point for the close result set case,
+      --  as a result of the numerator or denominator of the small value not
+      --  being a sufficiently small integer.
 
       Set_Result (N,
         Build_Multiply (N,
index d5db5b3f017abb8380ae3ed108bd7df79216e05e..b79d30afa5b1d9a790d860e95db0a9b0c0fb8dc5 100644 (file)
@@ -244,8 +244,8 @@ package body Exp_Imgv is
    --    For the most common ordinary fixed-point types
    --      xx = Fixed{32,64,128}
    --      tv = Integer_{32,64,128} (Expr) [convert with no scaling]
-   --      pm = typ'Small (typ = subtype of expression)
-   --           1.0 / typ'Small
+   --      pm = numerator of typ'Small (typ = subtype of expression)
+   --           denominator of typ'Small
    --           (Integer_{32,64,128} x typ'Small)'Fore
    --           typ'Aft
 
@@ -604,21 +604,29 @@ package body Exp_Imgv is
             Siz : constant Uint := Esize (Rtyp);
 
          begin
+            --  Note that we do not use sharp bounds to speed things up
+
             if Siz <= 32
-              and then Min = Uint_1
               and then Max <= Uint_2 ** 31
+              and then (Min = Uint_1
+                         or else (Num < Den and then Den <= Uint_2 ** 27)
+                         or else (Den < Num and then Num <= Uint_2 ** 25))
             then
                Imid := RE_Image_Fixed32;
                Tent := RTE (RE_Integer_32);
             elsif Siz <= 64
-              and then Min = Uint_1
               and then Max <= Uint_2 ** 63
+              and then (Min = Uint_1
+                         or else (Num < Den and then Den <= Uint_2 ** 59)
+                         or else (Den < Num and then Num <= Uint_2 ** 53))
             then
                Imid := RE_Image_Fixed64;
                Tent := RTE (RE_Integer_64);
             elsif System_Max_Integer_Size = 128
-              and then Min = Uint_1
               and then Max <= Uint_2 ** 127
+              and then (Min = Uint_1
+                         or else (Num < Den and then Den <= Uint_2 ** 123)
+                         or else (Den < Num and then Num <= Uint_2 ** 122))
             then
                Imid := RE_Image_Fixed128;
                Tent := RTE (RE_Integer_128);
@@ -880,7 +888,7 @@ package body Exp_Imgv is
 
    --  For the most common ordinary fixed-point types
 
-   --    btyp?(Value_Fixed{32,64,128} (X, S, 1.0 / S));
+   --    btyp?(Value_Fixed{32,64,128} (X, numerator of S, denominator of S));
    --    where S = typ'Small
 
    --  For Wide_[Wide_]Character types, typ'Value (X) expands into:
@@ -985,18 +993,18 @@ package body Exp_Imgv is
 
          begin
             if Siz <= 32
-              and then Min = Uint_1
               and then Max <= Uint_2 ** 31
+              and then (Min = Uint_1 or else Max <= Uint_2 ** 27)
             then
                Vid := RE_Value_Fixed32;
             elsif Siz <= 64
-              and then Min = Uint_1
               and then Max <= Uint_2 ** 63
+              and then (Min = Uint_1 or else Max <= Uint_2 ** 59)
             then
                Vid := RE_Value_Fixed64;
             elsif System_Max_Integer_Size = 128
-              and then Min = Uint_1
               and then Max <= Uint_2 ** 127
+              and then (Min = Uint_1 or else Max <= Uint_2 ** 123)
             then
                Vid := RE_Value_Fixed128;
             else
index ce86fac56154f49189f57c6cc5bea7a1721ed684..098b117cf840c27771049521ca85ee2b0414a980 100644 (file)
@@ -8513,12 +8513,13 @@ package body Freeze is
             end if;
 
             if Actual_Size > 64
-              and then Norm_Num (Small) /= Uint_1
-              and then Norm_Den (Small) /= Uint_1
+              and then (Norm_Num (Small) > Uint_2 ** 127
+                         or else Norm_Den (Small) > Uint_2 ** 127)
+              and then Small /= Ureal_2_M_128
             then
                Error_Msg_Name_1 := Name_Small;
                Error_Msg_N
-                 ("`&''%` not an integer or reciprocal of an integer", Typ);
+                 ("`&''%` not the ratio of two 128-bit integers", Typ);
             end if;
 
             if Smaller (Expr_Value_R (Lo), Ureal_M_10_76) then
index b6ea1e451849960a1a7e195b6cdeb985637a7e83..401d625000f810c24abf73cffe6ab046aed064d3 100644 (file)
@@ -423,6 +423,8 @@ Implementation Defined Attributes
 * Attribute Scalar_Storage_Order:: 
 * Attribute Simple_Storage_Pool:: 
 * Attribute Small:: 
+* Attribute Small_Denominator:: 
+* Attribute Small_Numerator:: 
 * Attribute Storage_Unit:: 
 * Attribute Stub_Type:: 
 * Attribute System_Allocator_Alignment:: 
@@ -10076,6 +10078,8 @@ consideration, you should minimize the use of these attributes.
 * Attribute Scalar_Storage_Order:: 
 * Attribute Simple_Storage_Pool:: 
 * Attribute Small:: 
+* Attribute Small_Denominator:: 
+* Attribute Small_Numerator:: 
 * Attribute Storage_Unit:: 
 * Attribute Stub_Type:: 
 * Attribute System_Allocator_Alignment:: 
@@ -11042,9 +11046,6 @@ and is static.  For non-scalar types, the result is nonstatic.
 @section Attribute Pool_Address
 
 
-@geindex Parameters
-@geindex when passed by reference
-
 @geindex Pool_Address
 
 @code{X'Pool_Address} for any object @code{X} returns the address
@@ -11383,7 +11384,7 @@ parameter. The detailed semantics of such unchecked deallocations is the same
 as defined in section 13.11.2 of the Ada Reference Manual, except that the
 term @emph{simple storage pool} is substituted for @emph{storage pool}.
 
-@node Attribute Small,Attribute Storage_Unit,Attribute Simple_Storage_Pool,Implementation Defined Attributes
+@node Attribute Small,Attribute Small_Denominator,Attribute Simple_Storage_Pool,Implementation Defined Attributes
 @anchor{gnat_rm/implementation_defined_attributes attribute-small}@anchor{1a1}
 @section Attribute Small
 
@@ -11399,8 +11400,34 @@ for compatibility with Ada 83.  See
 the Ada 83 reference manual for an exact description of the semantics of
 this attribute when applied to floating-point types.
 
-@node Attribute Storage_Unit,Attribute Stub_Type,Attribute Small,Implementation Defined Attributes
-@anchor{gnat_rm/implementation_defined_attributes attribute-storage-unit}@anchor{1a2}
+@node Attribute Small_Denominator,Attribute Small_Numerator,Attribute Small,Implementation Defined Attributes
+@anchor{gnat_rm/implementation_defined_attributes attribute-small-denominator}@anchor{1a2}
+@section Attribute Small_Denominator
+
+
+@geindex Small
+
+@geindex Small_Denominator
+
+@code{typ'Small_Denominator} for any fixed-point subtype @cite{typ} yields the
+denominator in the representation of @code{typ'Small} as a rational number
+with coprime factors (i.e. as an irreducible fraction).
+
+@node Attribute Small_Numerator,Attribute Storage_Unit,Attribute Small_Denominator,Implementation Defined Attributes
+@anchor{gnat_rm/implementation_defined_attributes attribute-small-numerator}@anchor{1a3}
+@section Attribute Small_Numerator
+
+
+@geindex Small
+
+@geindex Small_Numerator
+
+@code{typ'Small_Numerator} for any fixed-point subtype @cite{typ} yields the
+numerator in the representation of @code{typ'Small} as a rational number
+with coprime factors (i.e. as an irreducible fraction).
+
+@node Attribute Storage_Unit,Attribute Stub_Type,Attribute Small_Numerator,Implementation Defined Attributes
+@anchor{gnat_rm/implementation_defined_attributes attribute-storage-unit}@anchor{1a4}
 @section Attribute Storage_Unit
 
 
@@ -11410,7 +11437,7 @@ this attribute when applied to floating-point types.
 prefix) provides the same value as @code{System.Storage_Unit}.
 
 @node Attribute Stub_Type,Attribute System_Allocator_Alignment,Attribute Storage_Unit,Implementation Defined Attributes
-@anchor{gnat_rm/implementation_defined_attributes attribute-stub-type}@anchor{1a3}
+@anchor{gnat_rm/implementation_defined_attributes attribute-stub-type}@anchor{1a5}
 @section Attribute Stub_Type
 
 
@@ -11434,7 +11461,7 @@ unit @code{System.Partition_Interface}. Use of this attribute will create
 an implicit dependency on this unit.
 
 @node Attribute System_Allocator_Alignment,Attribute Target_Name,Attribute Stub_Type,Implementation Defined Attributes
-@anchor{gnat_rm/implementation_defined_attributes attribute-system-allocator-alignment}@anchor{1a4}
+@anchor{gnat_rm/implementation_defined_attributes attribute-system-allocator-alignment}@anchor{1a6}
 @section Attribute System_Allocator_Alignment
 
 
@@ -11451,7 +11478,7 @@ with alignment too large or to enable a realignment circuitry if the
 alignment request is larger than this value.
 
 @node Attribute Target_Name,Attribute To_Address,Attribute System_Allocator_Alignment,Implementation Defined Attributes
-@anchor{gnat_rm/implementation_defined_attributes attribute-target-name}@anchor{1a5}
+@anchor{gnat_rm/implementation_defined_attributes attribute-target-name}@anchor{1a7}
 @section Attribute Target_Name
 
 
@@ -11464,7 +11491,7 @@ standard gcc target name without the terminating slash (for
 example, GNAT 5.0 on windows yields "i586-pc-mingw32msv").
 
 @node Attribute To_Address,Attribute To_Any,Attribute Target_Name,Implementation Defined Attributes
-@anchor{gnat_rm/implementation_defined_attributes attribute-to-address}@anchor{1a6}
+@anchor{gnat_rm/implementation_defined_attributes attribute-to-address}@anchor{1a8}
 @section Attribute To_Address
 
 
@@ -11487,7 +11514,7 @@ modular manner (e.g., -1 means the same as 16#FFFF_FFFF# on
 a 32 bits machine).
 
 @node Attribute To_Any,Attribute Type_Class,Attribute To_Address,Implementation Defined Attributes
-@anchor{gnat_rm/implementation_defined_attributes attribute-to-any}@anchor{1a7}
+@anchor{gnat_rm/implementation_defined_attributes attribute-to-any}@anchor{1a9}
 @section Attribute To_Any
 
 
@@ -11497,7 +11524,7 @@ This internal attribute is used for the generation of remote subprogram
 stubs in the context of the Distributed Systems Annex.
 
 @node Attribute Type_Class,Attribute Type_Key,Attribute To_Any,Implementation Defined Attributes
-@anchor{gnat_rm/implementation_defined_attributes attribute-type-class}@anchor{1a8}
+@anchor{gnat_rm/implementation_defined_attributes attribute-type-class}@anchor{1aa}
 @section Attribute Type_Class
 
 
@@ -11527,7 +11554,7 @@ applies to all concurrent types.  This attribute is designed to
 be compatible with the DEC Ada 83 attribute of the same name.
 
 @node Attribute Type_Key,Attribute TypeCode,Attribute Type_Class,Implementation Defined Attributes
-@anchor{gnat_rm/implementation_defined_attributes attribute-type-key}@anchor{1a9}
+@anchor{gnat_rm/implementation_defined_attributes attribute-type-key}@anchor{1ab}
 @section Attribute Type_Key
 
 
@@ -11539,7 +11566,7 @@ about the type or subtype. This provides improved compatibility with
 other implementations that support this attribute.
 
 @node Attribute TypeCode,Attribute Unconstrained_Array,Attribute Type_Key,Implementation Defined Attributes
-@anchor{gnat_rm/implementation_defined_attributes attribute-typecode}@anchor{1aa}
+@anchor{gnat_rm/implementation_defined_attributes attribute-typecode}@anchor{1ac}
 @section Attribute TypeCode
 
 
@@ -11549,7 +11576,7 @@ This internal attribute is used for the generation of remote subprogram
 stubs in the context of the Distributed Systems Annex.
 
 @node Attribute Unconstrained_Array,Attribute Universal_Literal_String,Attribute TypeCode,Implementation Defined Attributes
-@anchor{gnat_rm/implementation_defined_attributes attribute-unconstrained-array}@anchor{1ab}
+@anchor{gnat_rm/implementation_defined_attributes attribute-unconstrained-array}@anchor{1ad}
 @section Attribute Unconstrained_Array
 
 
@@ -11563,7 +11590,7 @@ still static, and yields the result of applying this test to the
 generic actual.
 
 @node Attribute Universal_Literal_String,Attribute Unrestricted_Access,Attribute Unconstrained_Array,Implementation Defined Attributes
-@anchor{gnat_rm/implementation_defined_attributes attribute-universal-literal-string}@anchor{1ac}
+@anchor{gnat_rm/implementation_defined_attributes attribute-universal-literal-string}@anchor{1ae}
 @section Attribute Universal_Literal_String
 
 
@@ -11591,7 +11618,7 @@ end;
 @end example
 
 @node Attribute Unrestricted_Access,Attribute Update,Attribute Universal_Literal_String,Implementation Defined Attributes
-@anchor{gnat_rm/implementation_defined_attributes attribute-unrestricted-access}@anchor{1ad}
+@anchor{gnat_rm/implementation_defined_attributes attribute-unrestricted-access}@anchor{1af}
 @section Attribute Unrestricted_Access
 
 
@@ -11778,7 +11805,7 @@ In general this is a risky approach. It may appear to "work" but such uses of
 of GNAT to another, so are best avoided if possible.
 
 @node Attribute Update,Attribute Valid_Scalars,Attribute Unrestricted_Access,Implementation Defined Attributes
-@anchor{gnat_rm/implementation_defined_attributes attribute-update}@anchor{1ae}
+@anchor{gnat_rm/implementation_defined_attributes attribute-update}@anchor{1b0}
 @section Attribute Update
 
 
@@ -11859,7 +11886,7 @@ A := A'Update ((1, 2) => 20, (3, 4) => 30);
 which changes element (1,2) to 20 and (3,4) to 30.
 
 @node Attribute Valid_Scalars,Attribute VADS_Size,Attribute Update,Implementation Defined Attributes
-@anchor{gnat_rm/implementation_defined_attributes attribute-valid-scalars}@anchor{1af}
+@anchor{gnat_rm/implementation_defined_attributes attribute-valid-scalars}@anchor{1b1}
 @section Attribute Valid_Scalars
 
 
@@ -11893,7 +11920,7 @@ write a function with a single use of the attribute, and then call that
 function from multiple places.
 
 @node Attribute VADS_Size,Attribute Value_Size,Attribute Valid_Scalars,Implementation Defined Attributes
-@anchor{gnat_rm/implementation_defined_attributes attribute-vads-size}@anchor{1b0}
+@anchor{gnat_rm/implementation_defined_attributes attribute-vads-size}@anchor{1b2}
 @section Attribute VADS_Size
 
 
@@ -11913,7 +11940,7 @@ gives the result that would be obtained by applying the attribute to
 the corresponding type.
 
 @node Attribute Value_Size,Attribute Wchar_T_Size,Attribute VADS_Size,Implementation Defined Attributes
-@anchor{gnat_rm/implementation_defined_attributes id6}@anchor{1b1}@anchor{gnat_rm/implementation_defined_attributes attribute-value-size}@anchor{160}
+@anchor{gnat_rm/implementation_defined_attributes id6}@anchor{1b3}@anchor{gnat_rm/implementation_defined_attributes attribute-value-size}@anchor{160}
 @section Attribute Value_Size
 
 
@@ -11927,7 +11954,7 @@ a value of the given subtype.  It is the same as @code{type'Size},
 but, unlike @code{Size}, may be set for non-first subtypes.
 
 @node Attribute Wchar_T_Size,Attribute Word_Size,Attribute Value_Size,Implementation Defined Attributes
-@anchor{gnat_rm/implementation_defined_attributes attribute-wchar-t-size}@anchor{1b2}
+@anchor{gnat_rm/implementation_defined_attributes attribute-wchar-t-size}@anchor{1b4}
 @section Attribute Wchar_T_Size
 
 
@@ -11939,7 +11966,7 @@ primarily for constructing the definition of this type in
 package @code{Interfaces.C}. The result is a static constant.
 
 @node Attribute Word_Size,,Attribute Wchar_T_Size,Implementation Defined Attributes
-@anchor{gnat_rm/implementation_defined_attributes attribute-word-size}@anchor{1b3}
+@anchor{gnat_rm/implementation_defined_attributes attribute-word-size}@anchor{1b5}
 @section Attribute Word_Size
 
 
@@ -11950,7 +11977,7 @@ prefix) provides the value @code{System.Word_Size}. The result is
 a static constant.
 
 @node Standard and Implementation Defined Restrictions,Implementation Advice,Implementation Defined Attributes,Top
-@anchor{gnat_rm/standard_and_implementation_defined_restrictions standard-and-implementation-defined-restrictions}@anchor{9}@anchor{gnat_rm/standard_and_implementation_defined_restrictions doc}@anchor{1b4}@anchor{gnat_rm/standard_and_implementation_defined_restrictions id1}@anchor{1b5}
+@anchor{gnat_rm/standard_and_implementation_defined_restrictions standard-and-implementation-defined-restrictions}@anchor{9}@anchor{gnat_rm/standard_and_implementation_defined_restrictions doc}@anchor{1b6}@anchor{gnat_rm/standard_and_implementation_defined_restrictions id1}@anchor{1b7}
 @chapter Standard and Implementation Defined Restrictions
 
 
@@ -11979,7 +12006,7 @@ language defined or GNAT-specific, are listed in the following.
 @end menu
 
 @node Partition-Wide Restrictions,Program Unit Level Restrictions,,Standard and Implementation Defined Restrictions
-@anchor{gnat_rm/standard_and_implementation_defined_restrictions partition-wide-restrictions}@anchor{1b6}@anchor{gnat_rm/standard_and_implementation_defined_restrictions id2}@anchor{1b7}
+@anchor{gnat_rm/standard_and_implementation_defined_restrictions partition-wide-restrictions}@anchor{1b8}@anchor{gnat_rm/standard_and_implementation_defined_restrictions id2}@anchor{1b9}
 @section Partition-Wide Restrictions
 
 
@@ -12068,7 +12095,7 @@ then all compilation units in the partition must obey the restriction).
 @end menu
 
 @node Immediate_Reclamation,Max_Asynchronous_Select_Nesting,,Partition-Wide Restrictions
-@anchor{gnat_rm/standard_and_implementation_defined_restrictions immediate-reclamation}@anchor{1b8}
+@anchor{gnat_rm/standard_and_implementation_defined_restrictions immediate-reclamation}@anchor{1ba}
 @subsection Immediate_Reclamation
 
 
@@ -12080,7 +12107,7 @@ deallocation, any storage reserved at run time for an object is
 immediately reclaimed when the object no longer exists.
 
 @node Max_Asynchronous_Select_Nesting,Max_Entry_Queue_Length,Immediate_Reclamation,Partition-Wide Restrictions
-@anchor{gnat_rm/standard_and_implementation_defined_restrictions max-asynchronous-select-nesting}@anchor{1b9}
+@anchor{gnat_rm/standard_and_implementation_defined_restrictions max-asynchronous-select-nesting}@anchor{1bb}
 @subsection Max_Asynchronous_Select_Nesting
 
 
@@ -12092,7 +12119,7 @@ detected at compile time. Violations of this restriction with values
 other than zero cause Storage_Error to be raised.
 
 @node Max_Entry_Queue_Length,Max_Protected_Entries,Max_Asynchronous_Select_Nesting,Partition-Wide Restrictions
-@anchor{gnat_rm/standard_and_implementation_defined_restrictions max-entry-queue-length}@anchor{1ba}
+@anchor{gnat_rm/standard_and_implementation_defined_restrictions max-entry-queue-length}@anchor{1bc}
 @subsection Max_Entry_Queue_Length
 
 
@@ -12113,7 +12140,7 @@ compatibility purposes (and a warning will be generated for its use if
 warnings on obsolescent features are activated).
 
 @node Max_Protected_Entries,Max_Select_Alternatives,Max_Entry_Queue_Length,Partition-Wide Restrictions
-@anchor{gnat_rm/standard_and_implementation_defined_restrictions max-protected-entries}@anchor{1bb}
+@anchor{gnat_rm/standard_and_implementation_defined_restrictions max-protected-entries}@anchor{1bd}
 @subsection Max_Protected_Entries
 
 
@@ -12124,7 +12151,7 @@ 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.
 
 @node Max_Select_Alternatives,Max_Storage_At_Blocking,Max_Protected_Entries,Partition-Wide Restrictions
-@anchor{gnat_rm/standard_and_implementation_defined_restrictions max-select-alternatives}@anchor{1bc}
+@anchor{gnat_rm/standard_and_implementation_defined_restrictions max-select-alternatives}@anchor{1be}
 @subsection Max_Select_Alternatives
 
 
@@ -12133,7 +12160,7 @@ defined by a discriminant of a subtype whose corresponding bound is static.
 [RM D.7] Specifies the maximum number of alternatives in a selective accept.
 
 @node Max_Storage_At_Blocking,Max_Task_Entries,Max_Select_Alternatives,Partition-Wide Restrictions
-@anchor{gnat_rm/standard_and_implementation_defined_restrictions max-storage-at-blocking}@anchor{1bd}
+@anchor{gnat_rm/standard_and_implementation_defined_restrictions max-storage-at-blocking}@anchor{1bf}
 @subsection Max_Storage_At_Blocking
 
 
@@ -12144,7 +12171,7 @@ Storage_Size that can be retained by a blocked task. A violation of this
 restriction causes Storage_Error to be raised.
 
 @node Max_Task_Entries,Max_Tasks,Max_Storage_At_Blocking,Partition-Wide Restrictions
-@anchor{gnat_rm/standard_and_implementation_defined_restrictions max-task-entries}@anchor{1be}
+@anchor{gnat_rm/standard_and_implementation_defined_restrictions max-task-entries}@anchor{1c0}
 @subsection Max_Task_Entries
 
 
@@ -12157,7 +12184,7 @@ defined by a discriminant of a subtype whose
 corresponding bound is static.
 
 @node Max_Tasks,No_Abort_Statements,Max_Task_Entries,Partition-Wide Restrictions
-@anchor{gnat_rm/standard_and_implementation_defined_restrictions max-tasks}@anchor{1bf}
+@anchor{gnat_rm/standard_and_implementation_defined_restrictions max-tasks}@anchor{1c1}
 @subsection Max_Tasks
 
 
@@ -12170,7 +12197,7 @@ time. Violations of this restriction with values other than zero cause
 Storage_Error to be raised.
 
 @node No_Abort_Statements,No_Access_Parameter_Allocators,Max_Tasks,Partition-Wide Restrictions
-@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-abort-statements}@anchor{1c0}
+@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-abort-statements}@anchor{1c2}
 @subsection No_Abort_Statements
 
 
@@ -12180,7 +12207,7 @@ Storage_Error to be raised.
 no calls to Task_Identification.Abort_Task.
 
 @node No_Access_Parameter_Allocators,No_Access_Subprograms,No_Abort_Statements,Partition-Wide Restrictions
-@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-access-parameter-allocators}@anchor{1c1}
+@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-access-parameter-allocators}@anchor{1c3}
 @subsection No_Access_Parameter_Allocators
 
 
@@ -12191,7 +12218,7 @@ occurrences of an allocator as the actual parameter to an access
 parameter.
 
 @node No_Access_Subprograms,No_Allocators,No_Access_Parameter_Allocators,Partition-Wide Restrictions
-@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-access-subprograms}@anchor{1c2}
+@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-access-subprograms}@anchor{1c4}
 @subsection No_Access_Subprograms
 
 
@@ -12201,7 +12228,7 @@ parameter.
 declarations of access-to-subprogram types.
 
 @node No_Allocators,No_Anonymous_Allocators,No_Access_Subprograms,Partition-Wide Restrictions
-@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-allocators}@anchor{1c3}
+@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-allocators}@anchor{1c5}
 @subsection No_Allocators
 
 
@@ -12211,7 +12238,7 @@ declarations of access-to-subprogram types.
 occurrences of an allocator.
 
 @node No_Anonymous_Allocators,No_Asynchronous_Control,No_Allocators,Partition-Wide Restrictions
-@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-anonymous-allocators}@anchor{1c4}
+@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-anonymous-allocators}@anchor{1c6}
 @subsection No_Anonymous_Allocators
 
 
@@ -12221,7 +12248,7 @@ occurrences of an allocator.
 occurrences of an allocator of anonymous access type.
 
 @node No_Asynchronous_Control,No_Calendar,No_Anonymous_Allocators,Partition-Wide Restrictions
-@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-asynchronous-control}@anchor{1c5}
+@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-asynchronous-control}@anchor{1c7}
 @subsection No_Asynchronous_Control
 
 
@@ -12231,7 +12258,7 @@ occurrences of an allocator of anonymous access type.
 dependences on the predefined package Asynchronous_Task_Control.
 
 @node No_Calendar,No_Coextensions,No_Asynchronous_Control,Partition-Wide Restrictions
-@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-calendar}@anchor{1c6}
+@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-calendar}@anchor{1c8}
 @subsection No_Calendar
 
 
@@ -12241,7 +12268,7 @@ dependences on the predefined package Asynchronous_Task_Control.
 dependences on package Calendar.
 
 @node No_Coextensions,No_Default_Initialization,No_Calendar,Partition-Wide Restrictions
-@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-coextensions}@anchor{1c7}
+@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-coextensions}@anchor{1c9}
 @subsection No_Coextensions
 
 
@@ -12251,7 +12278,7 @@ dependences on package Calendar.
 coextensions. See 3.10.2.
 
 @node No_Default_Initialization,No_Delay,No_Coextensions,Partition-Wide Restrictions
-@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-default-initialization}@anchor{1c8}
+@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-default-initialization}@anchor{1ca}
 @subsection No_Default_Initialization
 
 
@@ -12268,7 +12295,7 @@ is to prohibit all cases of variables declared without a specific
 initializer (including the case of OUT scalar parameters).
 
 @node No_Delay,No_Dependence,No_Default_Initialization,Partition-Wide Restrictions
-@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-delay}@anchor{1c9}
+@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-delay}@anchor{1cb}
 @subsection No_Delay
 
 
@@ -12278,7 +12305,7 @@ initializer (including the case of OUT scalar parameters).
 delay statements and no semantic dependences on package Calendar.
 
 @node No_Dependence,No_Direct_Boolean_Operators,No_Delay,Partition-Wide Restrictions
-@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-dependence}@anchor{1ca}
+@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-dependence}@anchor{1cc}
 @subsection No_Dependence
 
 
@@ -12288,7 +12315,7 @@ delay statements and no semantic dependences on package Calendar.
 dependences on a library unit.
 
 @node No_Direct_Boolean_Operators,No_Dispatch,No_Dependence,Partition-Wide Restrictions
-@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-direct-boolean-operators}@anchor{1cb}
+@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-direct-boolean-operators}@anchor{1cd}
 @subsection No_Direct_Boolean_Operators
 
 
@@ -12301,7 +12328,7 @@ protocol requires the use of short-circuit (and then, or else) forms for all
 composite boolean operations.
 
 @node No_Dispatch,No_Dispatching_Calls,No_Direct_Boolean_Operators,Partition-Wide Restrictions
-@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-dispatch}@anchor{1cc}
+@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-dispatch}@anchor{1ce}
 @subsection No_Dispatch
 
 
@@ -12311,7 +12338,7 @@ composite boolean operations.
 occurrences of @code{T'Class}, for any (tagged) subtype @code{T}.
 
 @node No_Dispatching_Calls,No_Dynamic_Attachment,No_Dispatch,Partition-Wide Restrictions
-@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-dispatching-calls}@anchor{1cd}
+@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-dispatching-calls}@anchor{1cf}
 @subsection No_Dispatching_Calls
 
 
@@ -12372,7 +12399,7 @@ end Example;
 @end example
 
 @node No_Dynamic_Attachment,No_Dynamic_Priorities,No_Dispatching_Calls,Partition-Wide Restrictions
-@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-dynamic-attachment}@anchor{1ce}
+@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-dynamic-attachment}@anchor{1d0}
 @subsection No_Dynamic_Attachment
 
 
@@ -12391,7 +12418,7 @@ compatibility purposes (and a warning will be generated for its use if
 warnings on obsolescent features are activated).
 
 @node No_Dynamic_Priorities,No_Entry_Calls_In_Elaboration_Code,No_Dynamic_Attachment,Partition-Wide Restrictions
-@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-dynamic-priorities}@anchor{1cf}
+@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-dynamic-priorities}@anchor{1d1}
 @subsection No_Dynamic_Priorities
 
 
@@ -12400,7 +12427,7 @@ warnings on obsolescent features are activated).
 [RM D.7] There are no semantic dependencies on the package Dynamic_Priorities.
 
 @node No_Entry_Calls_In_Elaboration_Code,No_Enumeration_Maps,No_Dynamic_Priorities,Partition-Wide Restrictions
-@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-entry-calls-in-elaboration-code}@anchor{1d0}
+@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-entry-calls-in-elaboration-code}@anchor{1d2}
 @subsection No_Entry_Calls_In_Elaboration_Code
 
 
@@ -12412,7 +12439,7 @@ restriction, the compiler can assume that no code past an accept statement
 in a task can be executed at elaboration time.
 
 @node No_Enumeration_Maps,No_Exception_Handlers,No_Entry_Calls_In_Elaboration_Code,Partition-Wide Restrictions
-@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-enumeration-maps}@anchor{1d1}
+@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-enumeration-maps}@anchor{1d3}
 @subsection No_Enumeration_Maps
 
 
@@ -12423,7 +12450,7 @@ enumeration maps are used (that is Image and Value attributes applied
 to enumeration types).
 
 @node No_Exception_Handlers,No_Exception_Propagation,No_Enumeration_Maps,Partition-Wide Restrictions
-@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-exception-handlers}@anchor{1d2}
+@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-exception-handlers}@anchor{1d4}
 @subsection No_Exception_Handlers
 
 
@@ -12448,7 +12475,7 @@ statement generated by the compiler). The Line parameter when nonzero
 represents the line number in the source program where the raise occurs.
 
 @node No_Exception_Propagation,No_Exception_Registration,No_Exception_Handlers,Partition-Wide Restrictions
-@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-exception-propagation}@anchor{1d3}
+@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-exception-propagation}@anchor{1d5}
 @subsection No_Exception_Propagation
 
 
@@ -12465,7 +12492,7 @@ the package GNAT.Current_Exception is not permitted, and reraise
 statements (raise with no operand) are not permitted.
 
 @node No_Exception_Registration,No_Exceptions,No_Exception_Propagation,Partition-Wide Restrictions
-@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-exception-registration}@anchor{1d4}
+@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-exception-registration}@anchor{1d6}
 @subsection No_Exception_Registration
 
 
@@ -12479,7 +12506,7 @@ code is simplified by omitting the otherwise-required global registration
 of exceptions when they are declared.
 
 @node No_Exceptions,No_Finalization,No_Exception_Registration,Partition-Wide Restrictions
-@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-exceptions}@anchor{1d5}
+@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-exceptions}@anchor{1d7}
 @subsection No_Exceptions
 
 
@@ -12490,7 +12517,7 @@ raise statements and no exception handlers and also suppresses the
 generation of language-defined run-time checks.
 
 @node No_Finalization,No_Fixed_Point,No_Exceptions,Partition-Wide Restrictions
-@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-finalization}@anchor{1d6}
+@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-finalization}@anchor{1d8}
 @subsection No_Finalization
 
 
@@ -12531,7 +12558,7 @@ object or a nested component, either declared on the stack or on the heap. The
 deallocation of a controlled object no longer finalizes its contents.
 
 @node No_Fixed_Point,No_Floating_Point,No_Finalization,Partition-Wide Restrictions
-@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-fixed-point}@anchor{1d7}
+@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-fixed-point}@anchor{1d9}
 @subsection No_Fixed_Point
 
 
@@ -12541,7 +12568,7 @@ deallocation of a controlled object no longer finalizes its contents.
 occurrences of fixed point types and operations.
 
 @node No_Floating_Point,No_Implicit_Conditionals,No_Fixed_Point,Partition-Wide Restrictions
-@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-floating-point}@anchor{1d8}
+@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-floating-point}@anchor{1da}
 @subsection No_Floating_Point
 
 
@@ -12551,7 +12578,7 @@ occurrences of fixed point types and operations.
 occurrences of floating point types and operations.
 
 @node No_Implicit_Conditionals,No_Implicit_Dynamic_Code,No_Floating_Point,Partition-Wide Restrictions
-@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-implicit-conditionals}@anchor{1d9}
+@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-implicit-conditionals}@anchor{1db}
 @subsection No_Implicit_Conditionals
 
 
@@ -12567,7 +12594,7 @@ normal manner. Constructs generating implicit conditionals include comparisons
 of composite objects and the Max/Min attributes.
 
 @node No_Implicit_Dynamic_Code,No_Implicit_Heap_Allocations,No_Implicit_Conditionals,Partition-Wide Restrictions
-@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-implicit-dynamic-code}@anchor{1da}
+@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-implicit-dynamic-code}@anchor{1dc}
 @subsection No_Implicit_Dynamic_Code
 
 
@@ -12597,7 +12624,7 @@ foreign-language convention; primitive operations of nested tagged
 types.
 
 @node No_Implicit_Heap_Allocations,No_Implicit_Protected_Object_Allocations,No_Implicit_Dynamic_Code,Partition-Wide Restrictions
-@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-implicit-heap-allocations}@anchor{1db}
+@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-implicit-heap-allocations}@anchor{1dd}
 @subsection No_Implicit_Heap_Allocations
 
 
@@ -12606,7 +12633,7 @@ types.
 [RM D.7] No constructs are allowed to cause implicit heap allocation.
 
 @node No_Implicit_Protected_Object_Allocations,No_Implicit_Task_Allocations,No_Implicit_Heap_Allocations,Partition-Wide Restrictions
-@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-implicit-protected-object-allocations}@anchor{1dc}
+@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-implicit-protected-object-allocations}@anchor{1de}
 @subsection No_Implicit_Protected_Object_Allocations
 
 
@@ -12616,7 +12643,7 @@ types.
 protected object.
 
 @node No_Implicit_Task_Allocations,No_Initialize_Scalars,No_Implicit_Protected_Object_Allocations,Partition-Wide Restrictions
-@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-implicit-task-allocations}@anchor{1dd}
+@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-implicit-task-allocations}@anchor{1df}
 @subsection No_Implicit_Task_Allocations
 
 
@@ -12625,7 +12652,7 @@ protected object.
 [GNAT] No constructs are allowed to cause implicit heap allocation of a task.
 
 @node No_Initialize_Scalars,No_IO,No_Implicit_Task_Allocations,Partition-Wide Restrictions
-@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-initialize-scalars}@anchor{1de}
+@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-initialize-scalars}@anchor{1e0}
 @subsection No_Initialize_Scalars
 
 
@@ -12637,7 +12664,7 @@ code, and in particular eliminates dummy null initialization routines that
 are otherwise generated for some record and array types.
 
 @node No_IO,No_Local_Allocators,No_Initialize_Scalars,Partition-Wide Restrictions
-@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-io}@anchor{1df}
+@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-io}@anchor{1e1}
 @subsection No_IO
 
 
@@ -12648,7 +12675,7 @@ dependences on any of the library units Sequential_IO, Direct_IO,
 Text_IO, Wide_Text_IO, Wide_Wide_Text_IO, or Stream_IO.
 
 @node No_Local_Allocators,No_Local_Protected_Objects,No_IO,Partition-Wide Restrictions
-@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-local-allocators}@anchor{1e0}
+@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-local-allocators}@anchor{1e2}
 @subsection No_Local_Allocators
 
 
@@ -12659,7 +12686,7 @@ occurrences of an allocator in subprograms, generic subprograms, tasks,
 and entry bodies.
 
 @node No_Local_Protected_Objects,No_Local_Timing_Events,No_Local_Allocators,Partition-Wide Restrictions
-@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-local-protected-objects}@anchor{1e1}
+@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-local-protected-objects}@anchor{1e3}
 @subsection No_Local_Protected_Objects
 
 
@@ -12669,7 +12696,7 @@ and entry bodies.
 only declared at the library level.
 
 @node No_Local_Timing_Events,No_Long_Long_Integers,No_Local_Protected_Objects,Partition-Wide Restrictions
-@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-local-timing-events}@anchor{1e2}
+@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-local-timing-events}@anchor{1e4}
 @subsection No_Local_Timing_Events
 
 
@@ -12679,7 +12706,7 @@ only declared at the library level.
 declared at the library level.
 
 @node No_Long_Long_Integers,No_Multiple_Elaboration,No_Local_Timing_Events,Partition-Wide Restrictions
-@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-long-long-integers}@anchor{1e3}
+@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-long-long-integers}@anchor{1e5}
 @subsection No_Long_Long_Integers
 
 
@@ -12691,7 +12718,7 @@ implicit base type is Long_Long_Integer, and modular types whose size exceeds
 Long_Integer'Size.
 
 @node No_Multiple_Elaboration,No_Nested_Finalization,No_Long_Long_Integers,Partition-Wide Restrictions
-@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-multiple-elaboration}@anchor{1e4}
+@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-multiple-elaboration}@anchor{1e6}
 @subsection No_Multiple_Elaboration
 
 
@@ -12707,7 +12734,7 @@ possible, including non-Ada main programs and Stand Alone libraries, are not
 permitted and will be diagnosed by the binder.
 
 @node No_Nested_Finalization,No_Protected_Type_Allocators,No_Multiple_Elaboration,Partition-Wide Restrictions
-@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-nested-finalization}@anchor{1e5}
+@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-nested-finalization}@anchor{1e7}
 @subsection No_Nested_Finalization
 
 
@@ -12716,7 +12743,7 @@ permitted and will be diagnosed by the binder.
 [RM D.7] All objects requiring finalization are declared at the library level.
 
 @node No_Protected_Type_Allocators,No_Protected_Types,No_Nested_Finalization,Partition-Wide Restrictions
-@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-protected-type-allocators}@anchor{1e6}
+@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-protected-type-allocators}@anchor{1e8}
 @subsection No_Protected_Type_Allocators
 
 
@@ -12726,7 +12753,7 @@ permitted and will be diagnosed by the binder.
 expressions that attempt to allocate protected objects.
 
 @node No_Protected_Types,No_Recursion,No_Protected_Type_Allocators,Partition-Wide Restrictions
-@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-protected-types}@anchor{1e7}
+@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-protected-types}@anchor{1e9}
 @subsection No_Protected_Types
 
 
@@ -12736,7 +12763,7 @@ expressions that attempt to allocate protected objects.
 declarations of protected types or protected objects.
 
 @node No_Recursion,No_Reentrancy,No_Protected_Types,Partition-Wide Restrictions
-@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-recursion}@anchor{1e8}
+@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-recursion}@anchor{1ea}
 @subsection No_Recursion
 
 
@@ -12746,7 +12773,7 @@ declarations of protected types or protected objects.
 part of its execution.
 
 @node No_Reentrancy,No_Relative_Delay,No_Recursion,Partition-Wide Restrictions
-@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-reentrancy}@anchor{1e9}
+@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-reentrancy}@anchor{1eb}
 @subsection No_Reentrancy
 
 
@@ -12756,7 +12783,7 @@ part of its execution.
 two tasks at the same time.
 
 @node No_Relative_Delay,No_Requeue_Statements,No_Reentrancy,Partition-Wide Restrictions
-@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-relative-delay}@anchor{1ea}
+@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-relative-delay}@anchor{1ec}
 @subsection No_Relative_Delay
 
 
@@ -12767,7 +12794,7 @@ relative statements and prevents expressions such as @code{delay 1.23;} from
 appearing in source code.
 
 @node No_Requeue_Statements,No_Secondary_Stack,No_Relative_Delay,Partition-Wide Restrictions
-@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-requeue-statements}@anchor{1eb}
+@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-requeue-statements}@anchor{1ed}
 @subsection No_Requeue_Statements
 
 
@@ -12785,7 +12812,7 @@ compatibility purposes (and a warning will be generated for its use if
 warnings on oNobsolescent features are activated).
 
 @node No_Secondary_Stack,No_Select_Statements,No_Requeue_Statements,Partition-Wide Restrictions
-@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-secondary-stack}@anchor{1ec}
+@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-secondary-stack}@anchor{1ee}
 @subsection No_Secondary_Stack
 
 
@@ -12798,7 +12825,7 @@ stack is used to implement functions returning unconstrained objects
 secondary stacks for tasks (excluding the environment task) at run time.
 
 @node No_Select_Statements,No_Specific_Termination_Handlers,No_Secondary_Stack,Partition-Wide Restrictions
-@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-select-statements}@anchor{1ed}
+@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-select-statements}@anchor{1ef}
 @subsection No_Select_Statements
 
 
@@ -12808,7 +12835,7 @@ secondary stacks for tasks (excluding the environment task) at run time.
 kind are permitted, that is the keyword @code{select} may not appear.
 
 @node No_Specific_Termination_Handlers,No_Specification_of_Aspect,No_Select_Statements,Partition-Wide Restrictions
-@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-specific-termination-handlers}@anchor{1ee}
+@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-specific-termination-handlers}@anchor{1f0}
 @subsection No_Specific_Termination_Handlers
 
 
@@ -12818,7 +12845,7 @@ kind are permitted, that is the keyword @code{select} may not appear.
 or to Ada.Task_Termination.Specific_Handler.
 
 @node No_Specification_of_Aspect,No_Standard_Allocators_After_Elaboration,No_Specific_Termination_Handlers,Partition-Wide Restrictions
-@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-specification-of-aspect}@anchor{1ef}
+@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-specification-of-aspect}@anchor{1f1}
 @subsection No_Specification_of_Aspect
 
 
@@ -12829,7 +12856,7 @@ specification, attribute definition clause, or pragma is given for a
 given aspect.
 
 @node No_Standard_Allocators_After_Elaboration,No_Standard_Storage_Pools,No_Specification_of_Aspect,Partition-Wide Restrictions
-@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-standard-allocators-after-elaboration}@anchor{1f0}
+@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-standard-allocators-after-elaboration}@anchor{1f2}
 @subsection No_Standard_Allocators_After_Elaboration
 
 
@@ -12841,7 +12868,7 @@ library items of the partition has completed. Otherwise, Storage_Error
 is raised.
 
 @node No_Standard_Storage_Pools,No_Stream_Optimizations,No_Standard_Allocators_After_Elaboration,Partition-Wide Restrictions
-@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-standard-storage-pools}@anchor{1f1}
+@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-standard-storage-pools}@anchor{1f3}
 @subsection No_Standard_Storage_Pools
 
 
@@ -12853,7 +12880,7 @@ have an explicit Storage_Pool attribute defined specifying a
 user-defined storage pool.
 
 @node No_Stream_Optimizations,No_Streams,No_Standard_Storage_Pools,Partition-Wide Restrictions
-@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-stream-optimizations}@anchor{1f2}
+@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-stream-optimizations}@anchor{1f4}
 @subsection No_Stream_Optimizations
 
 
@@ -12866,7 +12893,7 @@ due to their superior performance. When this restriction is in effect, the
 compiler performs all IO operations on a per-character basis.
 
 @node No_Streams,No_Task_Allocators,No_Stream_Optimizations,Partition-Wide Restrictions
-@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-streams}@anchor{1f3}
+@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-streams}@anchor{1f5}
 @subsection No_Streams
 
 
@@ -12887,7 +12914,7 @@ unit declaring a tagged type should be compiled with the restriction,
 though this is not required.
 
 @node No_Task_Allocators,No_Task_At_Interrupt_Priority,No_Streams,Partition-Wide Restrictions
-@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-task-allocators}@anchor{1f4}
+@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-task-allocators}@anchor{1f6}
 @subsection No_Task_Allocators
 
 
@@ -12897,7 +12924,7 @@ though this is not required.
 or types containing task subcomponents.
 
 @node No_Task_At_Interrupt_Priority,No_Task_Attributes_Package,No_Task_Allocators,Partition-Wide Restrictions
-@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-task-at-interrupt-priority}@anchor{1f5}
+@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-task-at-interrupt-priority}@anchor{1f7}
 @subsection No_Task_At_Interrupt_Priority
 
 
@@ -12909,7 +12936,7 @@ a consequence, the tasks are always created with a priority below
 that an interrupt priority.
 
 @node No_Task_Attributes_Package,No_Task_Hierarchy,No_Task_At_Interrupt_Priority,Partition-Wide Restrictions
-@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-task-attributes-package}@anchor{1f6}
+@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-task-attributes-package}@anchor{1f8}
 @subsection No_Task_Attributes_Package
 
 
@@ -12926,7 +12953,7 @@ compatibility purposes (and a warning will be generated for its use if
 warnings on obsolescent features are activated).
 
 @node No_Task_Hierarchy,No_Task_Termination,No_Task_Attributes_Package,Partition-Wide Restrictions
-@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-task-hierarchy}@anchor{1f7}
+@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-task-hierarchy}@anchor{1f9}
 @subsection No_Task_Hierarchy
 
 
@@ -12936,7 +12963,7 @@ warnings on obsolescent features are activated).
 directly on the environment task of the partition.
 
 @node No_Task_Termination,No_Tasking,No_Task_Hierarchy,Partition-Wide Restrictions
-@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-task-termination}@anchor{1f8}
+@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-task-termination}@anchor{1fa}
 @subsection No_Task_Termination
 
 
@@ -12945,7 +12972,7 @@ directly on the environment task of the partition.
 [RM D.7] Tasks that terminate are erroneous.
 
 @node No_Tasking,No_Terminate_Alternatives,No_Task_Termination,Partition-Wide Restrictions
-@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-tasking}@anchor{1f9}
+@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-tasking}@anchor{1fb}
 @subsection No_Tasking
 
 
@@ -12958,7 +12985,7 @@ and cause an error message to be output either by the compiler or
 binder.
 
 @node No_Terminate_Alternatives,No_Unchecked_Access,No_Tasking,Partition-Wide Restrictions
-@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-terminate-alternatives}@anchor{1fa}
+@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-terminate-alternatives}@anchor{1fc}
 @subsection No_Terminate_Alternatives
 
 
@@ -12967,7 +12994,7 @@ binder.
 [RM D.7] There are no selective accepts with terminate alternatives.
 
 @node No_Unchecked_Access,No_Unchecked_Conversion,No_Terminate_Alternatives,Partition-Wide Restrictions
-@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-unchecked-access}@anchor{1fb}
+@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-unchecked-access}@anchor{1fd}
 @subsection No_Unchecked_Access
 
 
@@ -12977,7 +13004,7 @@ binder.
 occurrences of the Unchecked_Access attribute.
 
 @node No_Unchecked_Conversion,No_Unchecked_Deallocation,No_Unchecked_Access,Partition-Wide Restrictions
-@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-unchecked-conversion}@anchor{1fc}
+@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-unchecked-conversion}@anchor{1fe}
 @subsection No_Unchecked_Conversion
 
 
@@ -12987,7 +13014,7 @@ occurrences of the Unchecked_Access attribute.
 dependences on the predefined generic function Unchecked_Conversion.
 
 @node No_Unchecked_Deallocation,No_Use_Of_Entity,No_Unchecked_Conversion,Partition-Wide Restrictions
-@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-unchecked-deallocation}@anchor{1fd}
+@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-unchecked-deallocation}@anchor{1ff}
 @subsection No_Unchecked_Deallocation
 
 
@@ -12997,7 +13024,7 @@ dependences on the predefined generic function Unchecked_Conversion.
 dependences on the predefined generic procedure Unchecked_Deallocation.
 
 @node No_Use_Of_Entity,Pure_Barriers,No_Unchecked_Deallocation,Partition-Wide Restrictions
-@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-use-of-entity}@anchor{1fe}
+@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-use-of-entity}@anchor{200}
 @subsection No_Use_Of_Entity
 
 
@@ -13017,7 +13044,7 @@ No_Use_Of_Entity => Ada.Text_IO.Put_Line
 @end example
 
 @node Pure_Barriers,Simple_Barriers,No_Use_Of_Entity,Partition-Wide Restrictions
-@anchor{gnat_rm/standard_and_implementation_defined_restrictions pure-barriers}@anchor{1ff}
+@anchor{gnat_rm/standard_and_implementation_defined_restrictions pure-barriers}@anchor{201}
 @subsection Pure_Barriers
 
 
@@ -13068,7 +13095,7 @@ but still ensures absence of side effects, exceptions, and recursion
 during the evaluation of the barriers.
 
 @node Simple_Barriers,Static_Priorities,Pure_Barriers,Partition-Wide Restrictions
-@anchor{gnat_rm/standard_and_implementation_defined_restrictions simple-barriers}@anchor{200}
+@anchor{gnat_rm/standard_and_implementation_defined_restrictions simple-barriers}@anchor{202}
 @subsection Simple_Barriers
 
 
@@ -13087,7 +13114,7 @@ compatibility purposes (and a warning will be generated for its use if
 warnings on obsolescent features are activated).
 
 @node Static_Priorities,Static_Storage_Size,Simple_Barriers,Partition-Wide Restrictions
-@anchor{gnat_rm/standard_and_implementation_defined_restrictions static-priorities}@anchor{201}
+@anchor{gnat_rm/standard_and_implementation_defined_restrictions static-priorities}@anchor{203}
 @subsection Static_Priorities
 
 
@@ -13098,7 +13125,7 @@ are static, and that there are no dependences on the package
 @code{Ada.Dynamic_Priorities}.
 
 @node Static_Storage_Size,,Static_Priorities,Partition-Wide Restrictions
-@anchor{gnat_rm/standard_and_implementation_defined_restrictions static-storage-size}@anchor{202}
+@anchor{gnat_rm/standard_and_implementation_defined_restrictions static-storage-size}@anchor{204}
 @subsection Static_Storage_Size
 
 
@@ -13108,7 +13135,7 @@ are static, and that there are no dependences on the package
 in a Storage_Size pragma or attribute definition clause is static.
 
 @node Program Unit Level Restrictions,,Partition-Wide Restrictions,Standard and Implementation Defined Restrictions
-@anchor{gnat_rm/standard_and_implementation_defined_restrictions program-unit-level-restrictions}@anchor{203}@anchor{gnat_rm/standard_and_implementation_defined_restrictions id3}@anchor{204}
+@anchor{gnat_rm/standard_and_implementation_defined_restrictions program-unit-level-restrictions}@anchor{205}@anchor{gnat_rm/standard_and_implementation_defined_restrictions id3}@anchor{206}
 @section Program Unit Level Restrictions
 
 
@@ -13138,7 +13165,7 @@ other compilation units in the partition.
 @end menu
 
 @node No_Elaboration_Code,No_Dynamic_Sized_Objects,,Program Unit Level Restrictions
-@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-elaboration-code}@anchor{205}
+@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-elaboration-code}@anchor{207}
 @subsection No_Elaboration_Code
 
 
@@ -13194,7 +13221,7 @@ associated with the unit. This counter is typically used to check for access
 before elaboration and to control multiple elaboration attempts.
 
 @node No_Dynamic_Sized_Objects,No_Entry_Queue,No_Elaboration_Code,Program Unit Level Restrictions
-@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-dynamic-sized-objects}@anchor{206}
+@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-dynamic-sized-objects}@anchor{208}
 @subsection No_Dynamic_Sized_Objects
 
 
@@ -13212,7 +13239,7 @@ access discriminants. It is often a good idea to combine this restriction
 with No_Secondary_Stack.
 
 @node No_Entry_Queue,No_Implementation_Aspect_Specifications,No_Dynamic_Sized_Objects,Program Unit Level Restrictions
-@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-entry-queue}@anchor{207}
+@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-entry-queue}@anchor{209}
 @subsection No_Entry_Queue
 
 
@@ -13225,7 +13252,7 @@ checked at compile time.  A program execution is erroneous if an attempt
 is made to queue a second task on such an entry.
 
 @node No_Implementation_Aspect_Specifications,No_Implementation_Attributes,No_Entry_Queue,Program Unit Level Restrictions
-@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-implementation-aspect-specifications}@anchor{208}
+@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-implementation-aspect-specifications}@anchor{20a}
 @subsection No_Implementation_Aspect_Specifications
 
 
@@ -13236,7 +13263,7 @@ GNAT-defined aspects are present.  With this restriction, the only
 aspects that can be used are those defined in the Ada Reference Manual.
 
 @node No_Implementation_Attributes,No_Implementation_Identifiers,No_Implementation_Aspect_Specifications,Program Unit Level Restrictions
-@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-implementation-attributes}@anchor{209}
+@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-implementation-attributes}@anchor{20b}
 @subsection No_Implementation_Attributes
 
 
@@ -13248,7 +13275,7 @@ attributes that can be used are those defined in the Ada Reference
 Manual.
 
 @node No_Implementation_Identifiers,No_Implementation_Pragmas,No_Implementation_Attributes,Program Unit Level Restrictions
-@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-implementation-identifiers}@anchor{20a}
+@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-implementation-identifiers}@anchor{20c}
 @subsection No_Implementation_Identifiers
 
 
@@ -13259,7 +13286,7 @@ implementation-defined identifiers (marked with pragma Implementation_Defined)
 occur within language-defined packages.
 
 @node No_Implementation_Pragmas,No_Implementation_Restrictions,No_Implementation_Identifiers,Program Unit Level Restrictions
-@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-implementation-pragmas}@anchor{20b}
+@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-implementation-pragmas}@anchor{20d}
 @subsection No_Implementation_Pragmas
 
 
@@ -13270,7 +13297,7 @@ GNAT-defined pragmas are present.  With this restriction, the only
 pragmas that can be used are those defined in the Ada Reference Manual.
 
 @node No_Implementation_Restrictions,No_Implementation_Units,No_Implementation_Pragmas,Program Unit Level Restrictions
-@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-implementation-restrictions}@anchor{20c}
+@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-implementation-restrictions}@anchor{20e}
 @subsection No_Implementation_Restrictions
 
 
@@ -13282,7 +13309,7 @@ are present.  With this restriction, the only other restriction identifiers
 that can be used are those defined in the Ada Reference Manual.
 
 @node No_Implementation_Units,No_Implicit_Aliasing,No_Implementation_Restrictions,Program Unit Level Restrictions
-@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-implementation-units}@anchor{20d}
+@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-implementation-units}@anchor{20f}
 @subsection No_Implementation_Units
 
 
@@ -13293,7 +13320,7 @@ mention in the context clause of any implementation-defined descendants
 of packages Ada, Interfaces, or System.
 
 @node No_Implicit_Aliasing,No_Implicit_Loops,No_Implementation_Units,Program Unit Level Restrictions
-@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-implicit-aliasing}@anchor{20e}
+@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-implicit-aliasing}@anchor{210}
 @subsection No_Implicit_Aliasing
 
 
@@ -13308,7 +13335,7 @@ to be aliased, and in such cases, it can always be replaced by
 the standard attribute Unchecked_Access which is preferable.
 
 @node No_Implicit_Loops,No_Obsolescent_Features,No_Implicit_Aliasing,Program Unit Level Restrictions
-@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-implicit-loops}@anchor{20f}
+@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-implicit-loops}@anchor{211}
 @subsection No_Implicit_Loops
 
 
@@ -13325,7 +13352,7 @@ arrays larger than about 5000 scalar components. Note that if this restriction
 is set in the spec of a package, it will not apply to its body.
 
 @node No_Obsolescent_Features,No_Wide_Characters,No_Implicit_Loops,Program Unit Level Restrictions
-@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-obsolescent-features}@anchor{210}
+@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-obsolescent-features}@anchor{212}
 @subsection No_Obsolescent_Features
 
 
@@ -13335,7 +13362,7 @@ is set in the spec of a package, it will not apply to its body.
 features are used, as defined in Annex J of the Ada Reference Manual.
 
 @node No_Wide_Characters,Static_Dispatch_Tables,No_Obsolescent_Features,Program Unit Level Restrictions
-@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-wide-characters}@anchor{211}
+@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-wide-characters}@anchor{213}
 @subsection No_Wide_Characters
 
 
@@ -13349,7 +13376,7 @@ appear in the program (that is literals representing characters not in
 type @code{Character}).
 
 @node Static_Dispatch_Tables,SPARK_05,No_Wide_Characters,Program Unit Level Restrictions
-@anchor{gnat_rm/standard_and_implementation_defined_restrictions static-dispatch-tables}@anchor{212}
+@anchor{gnat_rm/standard_and_implementation_defined_restrictions static-dispatch-tables}@anchor{214}
 @subsection Static_Dispatch_Tables
 
 
@@ -13359,7 +13386,7 @@ type @code{Character}).
 associated with dispatch tables can be placed in read-only memory.
 
 @node SPARK_05,,Static_Dispatch_Tables,Program Unit Level Restrictions
-@anchor{gnat_rm/standard_and_implementation_defined_restrictions spark-05}@anchor{213}
+@anchor{gnat_rm/standard_and_implementation_defined_restrictions spark-05}@anchor{215}
 @subsection SPARK_05
 
 
@@ -13382,7 +13409,7 @@ gnatprove -P project.gpr --mode=check_all
 @end example
 
 @node Implementation Advice,Implementation Defined Characteristics,Standard and Implementation Defined Restrictions,Top
-@anchor{gnat_rm/implementation_advice doc}@anchor{214}@anchor{gnat_rm/implementation_advice implementation-advice}@anchor{a}@anchor{gnat_rm/implementation_advice id1}@anchor{215}
+@anchor{gnat_rm/implementation_advice doc}@anchor{216}@anchor{gnat_rm/implementation_advice implementation-advice}@anchor{a}@anchor{gnat_rm/implementation_advice id1}@anchor{217}
 @chapter Implementation Advice
 
 
@@ -13479,7 +13506,7 @@ case the text describes what GNAT does and why.
 @end menu
 
 @node RM 1 1 3 20 Error Detection,RM 1 1 3 31 Child Units,,Implementation Advice
-@anchor{gnat_rm/implementation_advice rm-1-1-3-20-error-detection}@anchor{216}
+@anchor{gnat_rm/implementation_advice rm-1-1-3-20-error-detection}@anchor{218}
 @section RM 1.1.3(20): Error Detection
 
 
@@ -13496,7 +13523,7 @@ or diagnosed at compile time.
 @geindex Child Units
 
 @node RM 1 1 3 31 Child Units,RM 1 1 5 12 Bounded Errors,RM 1 1 3 20 Error Detection,Implementation Advice
-@anchor{gnat_rm/implementation_advice rm-1-1-3-31-child-units}@anchor{217}
+@anchor{gnat_rm/implementation_advice rm-1-1-3-31-child-units}@anchor{219}
 @section RM 1.1.3(31): Child Units
 
 
@@ -13512,7 +13539,7 @@ Followed.
 @geindex Bounded errors
 
 @node RM 1 1 5 12 Bounded Errors,RM 2 8 16 Pragmas,RM 1 1 3 31 Child Units,Implementation Advice
-@anchor{gnat_rm/implementation_advice rm-1-1-5-12-bounded-errors}@anchor{218}
+@anchor{gnat_rm/implementation_advice rm-1-1-5-12-bounded-errors}@anchor{21a}
 @section RM 1.1.5(12): Bounded Errors
 
 
@@ -13529,7 +13556,7 @@ runtime.
 @geindex Pragmas
 
 @node RM 2 8 16 Pragmas,RM 2 8 17-19 Pragmas,RM 1 1 5 12 Bounded Errors,Implementation Advice
-@anchor{gnat_rm/implementation_advice id2}@anchor{219}@anchor{gnat_rm/implementation_advice rm-2-8-16-pragmas}@anchor{21a}
+@anchor{gnat_rm/implementation_advice id2}@anchor{21b}@anchor{gnat_rm/implementation_advice rm-2-8-16-pragmas}@anchor{21c}
 @section RM 2.8(16): Pragmas
 
 
@@ -13642,7 +13669,7 @@ that this advice not be followed.  For details see
 @ref{7,,Implementation Defined Pragmas}.
 
 @node RM 2 8 17-19 Pragmas,RM 3 5 2 5 Alternative Character Sets,RM 2 8 16 Pragmas,Implementation Advice
-@anchor{gnat_rm/implementation_advice rm-2-8-17-19-pragmas}@anchor{21b}
+@anchor{gnat_rm/implementation_advice rm-2-8-17-19-pragmas}@anchor{21d}
 @section RM 2.8(17-19): Pragmas
 
 
@@ -13663,14 +13690,14 @@ replacing @code{library_items}."
 @end itemize
 @end quotation
 
-See @ref{21a,,RM 2.8(16); Pragmas}.
+See @ref{21c,,RM 2.8(16); Pragmas}.
 
 @geindex Character Sets
 
 @geindex Alternative Character Sets
 
 @node RM 3 5 2 5 Alternative Character Sets,RM 3 5 4 28 Integer Types,RM 2 8 17-19 Pragmas,Implementation Advice
-@anchor{gnat_rm/implementation_advice rm-3-5-2-5-alternative-character-sets}@anchor{21c}
+@anchor{gnat_rm/implementation_advice rm-3-5-2-5-alternative-character-sets}@anchor{21e}
 @section RM 3.5.2(5): Alternative Character Sets
 
 
@@ -13698,7 +13725,7 @@ there is no such restriction.
 @geindex Integer types
 
 @node RM 3 5 4 28 Integer Types,RM 3 5 4 29 Integer Types,RM 3 5 2 5 Alternative Character Sets,Implementation Advice
-@anchor{gnat_rm/implementation_advice rm-3-5-4-28-integer-types}@anchor{21d}
+@anchor{gnat_rm/implementation_advice rm-3-5-4-28-integer-types}@anchor{21f}
 @section RM 3.5.4(28): Integer Types
 
 
@@ -13717,7 +13744,7 @@ are supported for convenient interface to C, and so that all hardware
 types of the machine are easily available.
 
 @node RM 3 5 4 29 Integer Types,RM 3 5 5 8 Enumeration Values,RM 3 5 4 28 Integer Types,Implementation Advice
-@anchor{gnat_rm/implementation_advice rm-3-5-4-29-integer-types}@anchor{21e}
+@anchor{gnat_rm/implementation_advice rm-3-5-4-29-integer-types}@anchor{220}
 @section RM 3.5.4(29): Integer Types
 
 
@@ -13733,7 +13760,7 @@ Followed.
 @geindex Enumeration values
 
 @node RM 3 5 5 8 Enumeration Values,RM 3 5 7 17 Float Types,RM 3 5 4 29 Integer Types,Implementation Advice
-@anchor{gnat_rm/implementation_advice rm-3-5-5-8-enumeration-values}@anchor{21f}
+@anchor{gnat_rm/implementation_advice rm-3-5-5-8-enumeration-values}@anchor{221}
 @section RM 3.5.5(8): Enumeration Values
 
 
@@ -13753,7 +13780,7 @@ Followed.
 @geindex Float types
 
 @node RM 3 5 7 17 Float Types,RM 3 6 2 11 Multidimensional Arrays,RM 3 5 5 8 Enumeration Values,Implementation Advice
-@anchor{gnat_rm/implementation_advice rm-3-5-7-17-float-types}@anchor{220}
+@anchor{gnat_rm/implementation_advice rm-3-5-7-17-float-types}@anchor{222}
 @section RM 3.5.7(17): Float Types
 
 
@@ -13783,7 +13810,7 @@ is a software rather than a hardware format.
 @geindex multidimensional
 
 @node RM 3 6 2 11 Multidimensional Arrays,RM 9 6 30-31 Duration'Small,RM 3 5 7 17 Float Types,Implementation Advice
-@anchor{gnat_rm/implementation_advice rm-3-6-2-11-multidimensional-arrays}@anchor{221}
+@anchor{gnat_rm/implementation_advice rm-3-6-2-11-multidimensional-arrays}@anchor{223}
 @section RM 3.6.2(11): Multidimensional Arrays
 
 
@@ -13801,7 +13828,7 @@ Followed.
 @geindex Duration'Small
 
 @node RM 9 6 30-31 Duration'Small,RM 10 2 1 12 Consistent Representation,RM 3 6 2 11 Multidimensional Arrays,Implementation Advice
-@anchor{gnat_rm/implementation_advice rm-9-6-30-31-duration-small}@anchor{222}
+@anchor{gnat_rm/implementation_advice rm-9-6-30-31-duration-small}@anchor{224}
 @section RM 9.6(30-31): Duration'Small
 
 
@@ -13822,7 +13849,7 @@ it need not be the same time base as used for @code{Calendar.Clock}."
 Followed.
 
 @node RM 10 2 1 12 Consistent Representation,RM 11 4 1 19 Exception Information,RM 9 6 30-31 Duration'Small,Implementation Advice
-@anchor{gnat_rm/implementation_advice rm-10-2-1-12-consistent-representation}@anchor{223}
+@anchor{gnat_rm/implementation_advice rm-10-2-1-12-consistent-representation}@anchor{225}
 @section RM 10.2.1(12): Consistent Representation
 
 
@@ -13844,7 +13871,7 @@ advice without severely impacting efficiency of execution.
 @geindex Exception information
 
 @node RM 11 4 1 19 Exception Information,RM 11 5 28 Suppression of Checks,RM 10 2 1 12 Consistent Representation,Implementation Advice
-@anchor{gnat_rm/implementation_advice rm-11-4-1-19-exception-information}@anchor{224}
+@anchor{gnat_rm/implementation_advice rm-11-4-1-19-exception-information}@anchor{226}
 @section RM 11.4.1(19): Exception Information
 
 
@@ -13875,7 +13902,7 @@ Pragma @code{Discard_Names}.
 @geindex suppression of
 
 @node RM 11 5 28 Suppression of Checks,RM 13 1 21-24 Representation Clauses,RM 11 4 1 19 Exception Information,Implementation Advice
-@anchor{gnat_rm/implementation_advice rm-11-5-28-suppression-of-checks}@anchor{225}
+@anchor{gnat_rm/implementation_advice rm-11-5-28-suppression-of-checks}@anchor{227}
 @section RM 11.5(28): Suppression of Checks
 
 
@@ -13890,7 +13917,7 @@ Followed.
 @geindex Representation clauses
 
 @node RM 13 1 21-24 Representation Clauses,RM 13 2 6-8 Packed Types,RM 11 5 28 Suppression of Checks,Implementation Advice
-@anchor{gnat_rm/implementation_advice rm-13-1-21-24-representation-clauses}@anchor{226}
+@anchor{gnat_rm/implementation_advice rm-13-1-21-24-representation-clauses}@anchor{228}
 @section RM 13.1 (21-24): Representation Clauses
 
 
@@ -13939,7 +13966,7 @@ Followed.
 @geindex Packed types
 
 @node RM 13 2 6-8 Packed Types,RM 13 3 14-19 Address Clauses,RM 13 1 21-24 Representation Clauses,Implementation Advice
-@anchor{gnat_rm/implementation_advice rm-13-2-6-8-packed-types}@anchor{227}
+@anchor{gnat_rm/implementation_advice rm-13-2-6-8-packed-types}@anchor{229}
 @section RM 13.2(6-8): Packed Types
 
 
@@ -13978,7 +14005,7 @@ Followed.
 @geindex Address clauses
 
 @node RM 13 3 14-19 Address Clauses,RM 13 3 29-35 Alignment Clauses,RM 13 2 6-8 Packed Types,Implementation Advice
-@anchor{gnat_rm/implementation_advice rm-13-3-14-19-address-clauses}@anchor{228}
+@anchor{gnat_rm/implementation_advice rm-13-3-14-19-address-clauses}@anchor{22a}
 @section RM 13.3(14-19): Address Clauses
 
 
@@ -14031,7 +14058,7 @@ Followed.
 @geindex Alignment clauses
 
 @node RM 13 3 29-35 Alignment Clauses,RM 13 3 42-43 Size Clauses,RM 13 3 14-19 Address Clauses,Implementation Advice
-@anchor{gnat_rm/implementation_advice rm-13-3-29-35-alignment-clauses}@anchor{229}
+@anchor{gnat_rm/implementation_advice rm-13-3-29-35-alignment-clauses}@anchor{22b}
 @section RM 13.3(29-35): Alignment Clauses
 
 
@@ -14088,7 +14115,7 @@ Followed.
 @geindex Size clauses
 
 @node RM 13 3 42-43 Size Clauses,RM 13 3 50-56 Size Clauses,RM 13 3 29-35 Alignment Clauses,Implementation Advice
-@anchor{gnat_rm/implementation_advice rm-13-3-42-43-size-clauses}@anchor{22a}
+@anchor{gnat_rm/implementation_advice rm-13-3-42-43-size-clauses}@anchor{22c}
 @section RM 13.3(42-43): Size Clauses
 
 
@@ -14106,7 +14133,7 @@ object's @code{Alignment} (if the @code{Alignment} is nonzero)."
 Followed.
 
 @node RM 13 3 50-56 Size Clauses,RM 13 3 71-73 Component Size Clauses,RM 13 3 42-43 Size Clauses,Implementation Advice
-@anchor{gnat_rm/implementation_advice rm-13-3-50-56-size-clauses}@anchor{22b}
+@anchor{gnat_rm/implementation_advice rm-13-3-50-56-size-clauses}@anchor{22d}
 @section RM 13.3(50-56): Size Clauses
 
 
@@ -14157,7 +14184,7 @@ Followed.
 @geindex Component_Size clauses
 
 @node RM 13 3 71-73 Component Size Clauses,RM 13 4 9-10 Enumeration Representation Clauses,RM 13 3 50-56 Size Clauses,Implementation Advice
-@anchor{gnat_rm/implementation_advice rm-13-3-71-73-component-size-clauses}@anchor{22c}
+@anchor{gnat_rm/implementation_advice rm-13-3-71-73-component-size-clauses}@anchor{22e}
 @section RM 13.3(71-73): Component Size Clauses
 
 
@@ -14191,7 +14218,7 @@ Followed.
 @geindex enumeration
 
 @node RM 13 4 9-10 Enumeration Representation Clauses,RM 13 5 1 17-22 Record Representation Clauses,RM 13 3 71-73 Component Size Clauses,Implementation Advice
-@anchor{gnat_rm/implementation_advice rm-13-4-9-10-enumeration-representation-clauses}@anchor{22d}
+@anchor{gnat_rm/implementation_advice rm-13-4-9-10-enumeration-representation-clauses}@anchor{22f}
 @section RM 13.4(9-10): Enumeration Representation Clauses
 
 
@@ -14213,7 +14240,7 @@ Followed.
 @geindex records
 
 @node RM 13 5 1 17-22 Record Representation Clauses,RM 13 5 2 5 Storage Place Attributes,RM 13 4 9-10 Enumeration Representation Clauses,Implementation Advice
-@anchor{gnat_rm/implementation_advice rm-13-5-1-17-22-record-representation-clauses}@anchor{22e}
+@anchor{gnat_rm/implementation_advice rm-13-5-1-17-22-record-representation-clauses}@anchor{230}
 @section RM 13.5.1(17-22): Record Representation Clauses
 
 
@@ -14273,7 +14300,7 @@ and all mentioned features are implemented.
 @geindex Storage place attributes
 
 @node RM 13 5 2 5 Storage Place Attributes,RM 13 5 3 7-8 Bit Ordering,RM 13 5 1 17-22 Record Representation Clauses,Implementation Advice
-@anchor{gnat_rm/implementation_advice rm-13-5-2-5-storage-place-attributes}@anchor{22f}
+@anchor{gnat_rm/implementation_advice rm-13-5-2-5-storage-place-attributes}@anchor{231}
 @section RM 13.5.2(5): Storage Place Attributes
 
 
@@ -14293,7 +14320,7 @@ Followed.  There are no such components in GNAT.
 @geindex Bit ordering
 
 @node RM 13 5 3 7-8 Bit Ordering,RM 13 7 37 Address as Private,RM 13 5 2 5 Storage Place Attributes,Implementation Advice
-@anchor{gnat_rm/implementation_advice rm-13-5-3-7-8-bit-ordering}@anchor{230}
+@anchor{gnat_rm/implementation_advice rm-13-5-3-7-8-bit-ordering}@anchor{232}
 @section RM 13.5.3(7-8): Bit Ordering
 
 
@@ -14313,7 +14340,7 @@ Thus non-default bit ordering is not supported.
 @geindex as private type
 
 @node RM 13 7 37 Address as Private,RM 13 7 1 16 Address Operations,RM 13 5 3 7-8 Bit Ordering,Implementation Advice
-@anchor{gnat_rm/implementation_advice rm-13-7-37-address-as-private}@anchor{231}
+@anchor{gnat_rm/implementation_advice rm-13-7-37-address-as-private}@anchor{233}
 @section RM 13.7(37): Address as Private
 
 
@@ -14331,7 +14358,7 @@ Followed.
 @geindex operations of
 
 @node RM 13 7 1 16 Address Operations,RM 13 9 14-17 Unchecked Conversion,RM 13 7 37 Address as Private,Implementation Advice
-@anchor{gnat_rm/implementation_advice rm-13-7-1-16-address-operations}@anchor{232}
+@anchor{gnat_rm/implementation_advice rm-13-7-1-16-address-operations}@anchor{234}
 @section RM 13.7.1(16): Address Operations
 
 
@@ -14349,7 +14376,7 @@ operation raises @code{Program_Error}, since all operations make sense.
 @geindex Unchecked conversion
 
 @node RM 13 9 14-17 Unchecked Conversion,RM 13 11 23-25 Implicit Heap Usage,RM 13 7 1 16 Address Operations,Implementation Advice
-@anchor{gnat_rm/implementation_advice rm-13-9-14-17-unchecked-conversion}@anchor{233}
+@anchor{gnat_rm/implementation_advice rm-13-9-14-17-unchecked-conversion}@anchor{235}
 @section RM 13.9(14-17): Unchecked Conversion
 
 
@@ -14393,7 +14420,7 @@ Followed.
 @geindex implicit
 
 @node RM 13 11 23-25 Implicit Heap Usage,RM 13 11 2 17 Unchecked Deallocation,RM 13 9 14-17 Unchecked Conversion,Implementation Advice
-@anchor{gnat_rm/implementation_advice rm-13-11-23-25-implicit-heap-usage}@anchor{234}
+@anchor{gnat_rm/implementation_advice rm-13-11-23-25-implicit-heap-usage}@anchor{236}
 @section RM 13.11(23-25): Implicit Heap Usage
 
 
@@ -14444,7 +14471,7 @@ Followed.
 @geindex Unchecked deallocation
 
 @node RM 13 11 2 17 Unchecked Deallocation,RM 13 13 2 1 6 Stream Oriented Attributes,RM 13 11 23-25 Implicit Heap Usage,Implementation Advice
-@anchor{gnat_rm/implementation_advice rm-13-11-2-17-unchecked-deallocation}@anchor{235}
+@anchor{gnat_rm/implementation_advice rm-13-11-2-17-unchecked-deallocation}@anchor{237}
 @section RM 13.11.2(17): Unchecked Deallocation
 
 
@@ -14459,7 +14486,7 @@ Followed.
 @geindex Stream oriented attributes
 
 @node RM 13 13 2 1 6 Stream Oriented Attributes,RM A 1 52 Names of Predefined Numeric Types,RM 13 11 2 17 Unchecked Deallocation,Implementation Advice
-@anchor{gnat_rm/implementation_advice rm-13-13-2-1-6-stream-oriented-attributes}@anchor{236}
+@anchor{gnat_rm/implementation_advice rm-13-13-2-1-6-stream-oriented-attributes}@anchor{238}
 @section RM 13.13.2(1.6): Stream Oriented Attributes
 
 
@@ -14490,7 +14517,7 @@ scalar types. This XDR alternative can be enabled via the binder switch -xdr.
 @geindex Stream oriented attributes
 
 @node RM A 1 52 Names of Predefined Numeric Types,RM A 3 2 49 Ada Characters Handling,RM 13 13 2 1 6 Stream Oriented Attributes,Implementation Advice
-@anchor{gnat_rm/implementation_advice rm-a-1-52-names-of-predefined-numeric-types}@anchor{237}
+@anchor{gnat_rm/implementation_advice rm-a-1-52-names-of-predefined-numeric-types}@anchor{239}
 @section RM A.1(52): Names of Predefined Numeric Types
 
 
@@ -14508,7 +14535,7 @@ Followed.
 @geindex Ada.Characters.Handling
 
 @node RM A 3 2 49 Ada Characters Handling,RM A 4 4 106 Bounded-Length String Handling,RM A 1 52 Names of Predefined Numeric Types,Implementation Advice
-@anchor{gnat_rm/implementation_advice rm-a-3-2-49-ada-characters-handling}@anchor{238}
+@anchor{gnat_rm/implementation_advice rm-a-3-2-49-ada-characters-handling}@anchor{23a}
 @section RM A.3.2(49): @code{Ada.Characters.Handling}
 
 
@@ -14525,7 +14552,7 @@ Followed.  GNAT provides no such localized definitions.
 @geindex Bounded-length strings
 
 @node RM A 4 4 106 Bounded-Length String Handling,RM A 5 2 46-47 Random Number Generation,RM A 3 2 49 Ada Characters Handling,Implementation Advice
-@anchor{gnat_rm/implementation_advice rm-a-4-4-106-bounded-length-string-handling}@anchor{239}
+@anchor{gnat_rm/implementation_advice rm-a-4-4-106-bounded-length-string-handling}@anchor{23b}
 @section RM A.4.4(106): Bounded-Length String Handling
 
 
@@ -14540,7 +14567,7 @@ Followed.  No implicit pointers or dynamic allocation are used.
 @geindex Random number generation
 
 @node RM A 5 2 46-47 Random Number Generation,RM A 10 7 23 Get_Immediate,RM A 4 4 106 Bounded-Length String Handling,Implementation Advice
-@anchor{gnat_rm/implementation_advice rm-a-5-2-46-47-random-number-generation}@anchor{23a}
+@anchor{gnat_rm/implementation_advice rm-a-5-2-46-47-random-number-generation}@anchor{23c}
 @section RM A.5.2(46-47): Random Number Generation
 
 
@@ -14569,7 +14596,7 @@ condition here to hold true.
 @geindex Get_Immediate
 
 @node RM A 10 7 23 Get_Immediate,RM B 1 39-41 Pragma Export,RM A 5 2 46-47 Random Number Generation,Implementation Advice
-@anchor{gnat_rm/implementation_advice rm-a-10-7-23-get-immediate}@anchor{23b}
+@anchor{gnat_rm/implementation_advice rm-a-10-7-23-get-immediate}@anchor{23d}
 @section RM A.10.7(23): @code{Get_Immediate}
 
 
@@ -14593,7 +14620,7 @@ this functionality.
 @geindex Export
 
 @node RM B 1 39-41 Pragma Export,RM B 2 12-13 Package Interfaces,RM A 10 7 23 Get_Immediate,Implementation Advice
-@anchor{gnat_rm/implementation_advice rm-b-1-39-41-pragma-export}@anchor{23c}
+@anchor{gnat_rm/implementation_advice rm-b-1-39-41-pragma-export}@anchor{23e}
 @section RM B.1(39-41): Pragma @code{Export}
 
 
@@ -14641,7 +14668,7 @@ Followed.
 @geindex Interfaces
 
 @node RM B 2 12-13 Package Interfaces,RM B 3 63-71 Interfacing with C,RM B 1 39-41 Pragma Export,Implementation Advice
-@anchor{gnat_rm/implementation_advice rm-b-2-12-13-package-interfaces}@anchor{23d}
+@anchor{gnat_rm/implementation_advice rm-b-2-12-13-package-interfaces}@anchor{23f}
 @section RM B.2(12-13): Package @code{Interfaces}
 
 
@@ -14671,7 +14698,7 @@ Followed.  GNAT provides all the packages described in this section.
 @geindex interfacing with
 
 @node RM B 3 63-71 Interfacing with C,RM B 4 95-98 Interfacing with COBOL,RM B 2 12-13 Package Interfaces,Implementation Advice
-@anchor{gnat_rm/implementation_advice rm-b-3-63-71-interfacing-with-c}@anchor{23e}
+@anchor{gnat_rm/implementation_advice rm-b-3-63-71-interfacing-with-c}@anchor{240}
 @section RM B.3(63-71): Interfacing with C
 
 
@@ -14759,7 +14786,7 @@ Followed.
 @geindex interfacing with
 
 @node RM B 4 95-98 Interfacing with COBOL,RM B 5 22-26 Interfacing with Fortran,RM B 3 63-71 Interfacing with C,Implementation Advice
-@anchor{gnat_rm/implementation_advice rm-b-4-95-98-interfacing-with-cobol}@anchor{23f}
+@anchor{gnat_rm/implementation_advice rm-b-4-95-98-interfacing-with-cobol}@anchor{241}
 @section RM B.4(95-98): Interfacing with COBOL
 
 
@@ -14800,7 +14827,7 @@ Followed.
 @geindex interfacing with
 
 @node RM B 5 22-26 Interfacing with Fortran,RM C 1 3-5 Access to Machine Operations,RM B 4 95-98 Interfacing with COBOL,Implementation Advice
-@anchor{gnat_rm/implementation_advice rm-b-5-22-26-interfacing-with-fortran}@anchor{240}
+@anchor{gnat_rm/implementation_advice rm-b-5-22-26-interfacing-with-fortran}@anchor{242}
 @section RM B.5(22-26): Interfacing with Fortran
 
 
@@ -14851,7 +14878,7 @@ Followed.
 @geindex Machine operations
 
 @node RM C 1 3-5 Access to Machine Operations,RM C 1 10-16 Access to Machine Operations,RM B 5 22-26 Interfacing with Fortran,Implementation Advice
-@anchor{gnat_rm/implementation_advice rm-c-1-3-5-access-to-machine-operations}@anchor{241}
+@anchor{gnat_rm/implementation_advice rm-c-1-3-5-access-to-machine-operations}@anchor{243}
 @section RM C.1(3-5): Access to Machine Operations
 
 
@@ -14886,7 +14913,7 @@ object that is specified as exported."
 Followed.
 
 @node RM C 1 10-16 Access to Machine Operations,RM C 3 28 Interrupt Support,RM C 1 3-5 Access to Machine Operations,Implementation Advice
-@anchor{gnat_rm/implementation_advice rm-c-1-10-16-access-to-machine-operations}@anchor{242}
+@anchor{gnat_rm/implementation_advice rm-c-1-10-16-access-to-machine-operations}@anchor{244}
 @section RM C.1(10-16): Access to Machine Operations
 
 
@@ -14947,7 +14974,7 @@ Followed on any target supporting such operations.
 @geindex Interrupt support
 
 @node RM C 3 28 Interrupt Support,RM C 3 1 20-21 Protected Procedure Handlers,RM C 1 10-16 Access to Machine Operations,Implementation Advice
-@anchor{gnat_rm/implementation_advice rm-c-3-28-interrupt-support}@anchor{243}
+@anchor{gnat_rm/implementation_advice rm-c-3-28-interrupt-support}@anchor{245}
 @section RM C.3(28): Interrupt Support
 
 
@@ -14965,7 +14992,7 @@ of interrupt blocking.
 @geindex Protected procedure handlers
 
 @node RM C 3 1 20-21 Protected Procedure Handlers,RM C 3 2 25 Package Interrupts,RM C 3 28 Interrupt Support,Implementation Advice
-@anchor{gnat_rm/implementation_advice rm-c-3-1-20-21-protected-procedure-handlers}@anchor{244}
+@anchor{gnat_rm/implementation_advice rm-c-3-1-20-21-protected-procedure-handlers}@anchor{246}
 @section RM C.3.1(20-21): Protected Procedure Handlers
 
 
@@ -14991,7 +15018,7 @@ Followed.  Compile time warnings are given when possible.
 @geindex Interrupts
 
 @node RM C 3 2 25 Package Interrupts,RM C 4 14 Pre-elaboration Requirements,RM C 3 1 20-21 Protected Procedure Handlers,Implementation Advice
-@anchor{gnat_rm/implementation_advice rm-c-3-2-25-package-interrupts}@anchor{245}
+@anchor{gnat_rm/implementation_advice rm-c-3-2-25-package-interrupts}@anchor{247}
 @section RM C.3.2(25): Package @code{Interrupts}
 
 
@@ -15009,7 +15036,7 @@ Followed.
 @geindex Pre-elaboration requirements
 
 @node RM C 4 14 Pre-elaboration Requirements,RM C 5 8 Pragma Discard_Names,RM C 3 2 25 Package Interrupts,Implementation Advice
-@anchor{gnat_rm/implementation_advice rm-c-4-14-pre-elaboration-requirements}@anchor{246}
+@anchor{gnat_rm/implementation_advice rm-c-4-14-pre-elaboration-requirements}@anchor{248}
 @section RM C.4(14): Pre-elaboration Requirements
 
 
@@ -15025,7 +15052,7 @@ Followed.  Executable code is generated in some cases, e.g., loops
 to initialize large arrays.
 
 @node RM C 5 8 Pragma Discard_Names,RM C 7 2 30 The Package Task_Attributes,RM C 4 14 Pre-elaboration Requirements,Implementation Advice
-@anchor{gnat_rm/implementation_advice rm-c-5-8-pragma-discard-names}@anchor{247}
+@anchor{gnat_rm/implementation_advice rm-c-5-8-pragma-discard-names}@anchor{249}
 @section RM C.5(8): Pragma @code{Discard_Names}
 
 
@@ -15043,7 +15070,7 @@ Followed.
 @geindex Task_Attributes
 
 @node RM C 7 2 30 The Package Task_Attributes,RM D 3 17 Locking Policies,RM C 5 8 Pragma Discard_Names,Implementation Advice
-@anchor{gnat_rm/implementation_advice rm-c-7-2-30-the-package-task-attributes}@anchor{248}
+@anchor{gnat_rm/implementation_advice rm-c-7-2-30-the-package-task-attributes}@anchor{24a}
 @section RM C.7.2(30): The Package Task_Attributes
 
 
@@ -15064,7 +15091,7 @@ Not followed.  This implementation is not targeted to such a domain.
 @geindex Locking Policies
 
 @node RM D 3 17 Locking Policies,RM D 4 16 Entry Queuing Policies,RM C 7 2 30 The Package Task_Attributes,Implementation Advice
-@anchor{gnat_rm/implementation_advice rm-d-3-17-locking-policies}@anchor{249}
+@anchor{gnat_rm/implementation_advice rm-d-3-17-locking-policies}@anchor{24b}
 @section RM D.3(17): Locking Policies
 
 
@@ -15081,7 +15108,7 @@ whose names (@code{Inheritance_Locking} and
 @geindex Entry queuing policies
 
 @node RM D 4 16 Entry Queuing Policies,RM D 6 9-10 Preemptive Abort,RM D 3 17 Locking Policies,Implementation Advice
-@anchor{gnat_rm/implementation_advice rm-d-4-16-entry-queuing-policies}@anchor{24a}
+@anchor{gnat_rm/implementation_advice rm-d-4-16-entry-queuing-policies}@anchor{24c}
 @section RM D.4(16): Entry Queuing Policies
 
 
@@ -15096,7 +15123,7 @@ Followed.  No such implementation-defined queuing policies exist.
 @geindex Preemptive abort
 
 @node RM D 6 9-10 Preemptive Abort,RM D 7 21 Tasking Restrictions,RM D 4 16 Entry Queuing Policies,Implementation Advice
-@anchor{gnat_rm/implementation_advice rm-d-6-9-10-preemptive-abort}@anchor{24b}
+@anchor{gnat_rm/implementation_advice rm-d-6-9-10-preemptive-abort}@anchor{24d}
 @section RM D.6(9-10): Preemptive Abort
 
 
@@ -15122,7 +15149,7 @@ Followed.
 @geindex Tasking restrictions
 
 @node RM D 7 21 Tasking Restrictions,RM D 8 47-49 Monotonic Time,RM D 6 9-10 Preemptive Abort,Implementation Advice
-@anchor{gnat_rm/implementation_advice rm-d-7-21-tasking-restrictions}@anchor{24c}
+@anchor{gnat_rm/implementation_advice rm-d-7-21-tasking-restrictions}@anchor{24e}
 @section RM D.7(21): Tasking Restrictions
 
 
@@ -15141,7 +15168,7 @@ pragma @code{Profile (Restricted)} for more details.
 @geindex monotonic
 
 @node RM D 8 47-49 Monotonic Time,RM E 5 28-29 Partition Communication Subsystem,RM D 7 21 Tasking Restrictions,Implementation Advice
-@anchor{gnat_rm/implementation_advice rm-d-8-47-49-monotonic-time}@anchor{24d}
+@anchor{gnat_rm/implementation_advice rm-d-8-47-49-monotonic-time}@anchor{24f}
 @section RM D.8(47-49): Monotonic Time
 
 
@@ -15176,7 +15203,7 @@ Followed.
 @geindex PCS
 
 @node RM E 5 28-29 Partition Communication Subsystem,RM F 7 COBOL Support,RM D 8 47-49 Monotonic Time,Implementation Advice
-@anchor{gnat_rm/implementation_advice rm-e-5-28-29-partition-communication-subsystem}@anchor{24e}
+@anchor{gnat_rm/implementation_advice rm-e-5-28-29-partition-communication-subsystem}@anchor{250}
 @section RM E.5(28-29): Partition Communication Subsystem
 
 
@@ -15204,7 +15231,7 @@ GNAT.
 @geindex COBOL support
 
 @node RM F 7 COBOL Support,RM F 1 2 Decimal Radix Support,RM E 5 28-29 Partition Communication Subsystem,Implementation Advice
-@anchor{gnat_rm/implementation_advice rm-f-7-cobol-support}@anchor{24f}
+@anchor{gnat_rm/implementation_advice rm-f-7-cobol-support}@anchor{251}
 @section RM F(7): COBOL Support
 
 
@@ -15224,7 +15251,7 @@ Followed.
 @geindex Decimal radix support
 
 @node RM F 1 2 Decimal Radix Support,RM G Numerics,RM F 7 COBOL Support,Implementation Advice
-@anchor{gnat_rm/implementation_advice rm-f-1-2-decimal-radix-support}@anchor{250}
+@anchor{gnat_rm/implementation_advice rm-f-1-2-decimal-radix-support}@anchor{252}
 @section RM F.1(2): Decimal Radix Support
 
 
@@ -15240,7 +15267,7 @@ representations.
 @geindex Numerics
 
 @node RM G Numerics,RM G 1 1 56-58 Complex Types,RM F 1 2 Decimal Radix Support,Implementation Advice
-@anchor{gnat_rm/implementation_advice rm-g-numerics}@anchor{251}
+@anchor{gnat_rm/implementation_advice rm-g-numerics}@anchor{253}
 @section RM G: Numerics
 
 
@@ -15260,7 +15287,7 @@ Followed.
 @geindex Complex types
 
 @node RM G 1 1 56-58 Complex Types,RM G 1 2 49 Complex Elementary Functions,RM G Numerics,Implementation Advice
-@anchor{gnat_rm/implementation_advice rm-g-1-1-56-58-complex-types}@anchor{252}
+@anchor{gnat_rm/implementation_advice rm-g-1-1-56-58-complex-types}@anchor{254}
 @section RM G.1.1(56-58): Complex Types
 
 
@@ -15322,7 +15349,7 @@ Followed.
 @geindex Complex elementary functions
 
 @node RM G 1 2 49 Complex Elementary Functions,RM G 2 4 19 Accuracy Requirements,RM G 1 1 56-58 Complex Types,Implementation Advice
-@anchor{gnat_rm/implementation_advice rm-g-1-2-49-complex-elementary-functions}@anchor{253}
+@anchor{gnat_rm/implementation_advice rm-g-1-2-49-complex-elementary-functions}@anchor{255}
 @section RM G.1.2(49): Complex Elementary Functions
 
 
@@ -15344,7 +15371,7 @@ Followed.
 @geindex Accuracy requirements
 
 @node RM G 2 4 19 Accuracy Requirements,RM G 2 6 15 Complex Arithmetic Accuracy,RM G 1 2 49 Complex Elementary Functions,Implementation Advice
-@anchor{gnat_rm/implementation_advice rm-g-2-4-19-accuracy-requirements}@anchor{254}
+@anchor{gnat_rm/implementation_advice rm-g-2-4-19-accuracy-requirements}@anchor{256}
 @section RM G.2.4(19): Accuracy Requirements
 
 
@@ -15368,7 +15395,7 @@ Followed.
 @geindex complex arithmetic
 
 @node RM G 2 6 15 Complex Arithmetic Accuracy,RM H 6 15/2 Pragma Partition_Elaboration_Policy,RM G 2 4 19 Accuracy Requirements,Implementation Advice
-@anchor{gnat_rm/implementation_advice rm-g-2-6-15-complex-arithmetic-accuracy}@anchor{255}
+@anchor{gnat_rm/implementation_advice rm-g-2-6-15-complex-arithmetic-accuracy}@anchor{257}
 @section RM G.2.6(15): Complex Arithmetic Accuracy
 
 
@@ -15386,7 +15413,7 @@ Followed.
 @geindex Sequential elaboration policy
 
 @node RM H 6 15/2 Pragma Partition_Elaboration_Policy,,RM G 2 6 15 Complex Arithmetic Accuracy,Implementation Advice
-@anchor{gnat_rm/implementation_advice rm-h-6-15-2-pragma-partition-elaboration-policy}@anchor{256}
+@anchor{gnat_rm/implementation_advice rm-h-6-15-2-pragma-partition-elaboration-policy}@anchor{258}
 @section RM H.6(15/2): Pragma Partition_Elaboration_Policy
 
 
@@ -15401,7 +15428,7 @@ immediately terminated."
 Not followed.
 
 @node Implementation Defined Characteristics,Intrinsic Subprograms,Implementation Advice,Top
-@anchor{gnat_rm/implementation_defined_characteristics implementation-defined-characteristics}@anchor{b}@anchor{gnat_rm/implementation_defined_characteristics doc}@anchor{257}@anchor{gnat_rm/implementation_defined_characteristics id1}@anchor{258}
+@anchor{gnat_rm/implementation_defined_characteristics implementation-defined-characteristics}@anchor{b}@anchor{gnat_rm/implementation_defined_characteristics doc}@anchor{259}@anchor{gnat_rm/implementation_defined_characteristics id1}@anchor{25a}
 @chapter Implementation Defined Characteristics
 
 
@@ -15719,15 +15746,16 @@ is permitted that does not result in a mantissa larger than 63 bits.
 On 64-bit platforms, the small must lie in 2.0**(-127) .. 2.0**127 and the
 range in -1.0E+76 .. 1.0E+76; any combination is permitted that does not
 result in a mantissa larger than 63 bits, and any combination is permitted
-that results in a mantissa between 64 and 127 bits if the small is either
-an integer or the reciprocal of an integer.
+that results in a mantissa between 64 and 127 bits if the small is the
+ratio of two integers that lie in 1 .. 2.0**127.
 
-If the small is either an integer or the reciprocal of an integer, which
-is the case if no @code{small} clause is provided, then the operations of the
-fixed point type are entirely implemented by means of integer instructions.
-In the other cases, some operations, in particular input and output, may be
-implemented by means of floating-point instructions and may be affected by
-accuracy issues on architectures other than x86.
+If the small is the ratio of two integers with 64-bit magnitude on 32-bit
+platforms and 128-bit magnitude on 64-bit platforms, which is the case if
+no @code{small} clause is provided, then the operations of the fixed point
+type are entirely implemented by means of integer instructions.  In the
+other cases, some operations, in particular input and output, may be
+implemented by means of floating-point instructions and may be affected
+by accuracy issues on architectures other than x86.
 
 For a decimal fixed point type, on 32-bit platforms, the small must lie in
 1.0E-18 .. 1.0E+18 and the digits in 1 .. 18.  On 64-bit platforms, the
@@ -16619,7 +16647,7 @@ When the @code{Pattern} parameter is not the null string, it is interpreted
 according to the syntax of regular expressions as defined in the
 @code{GNAT.Regexp} package.
 
-See @ref{259,,GNAT.Regexp (g-regexp.ads)}.
+See @ref{25b,,GNAT.Regexp (g-regexp.ads)}.
 
 
 @itemize *
@@ -17667,7 +17695,7 @@ H.4(27)."
 There are no restrictions on pragma @code{Restrictions}.
 
 @node Intrinsic Subprograms,Representation Clauses and Pragmas,Implementation Defined Characteristics,Top
-@anchor{gnat_rm/intrinsic_subprograms doc}@anchor{25a}@anchor{gnat_rm/intrinsic_subprograms intrinsic-subprograms}@anchor{c}@anchor{gnat_rm/intrinsic_subprograms id1}@anchor{25b}
+@anchor{gnat_rm/intrinsic_subprograms doc}@anchor{25c}@anchor{gnat_rm/intrinsic_subprograms intrinsic-subprograms}@anchor{c}@anchor{gnat_rm/intrinsic_subprograms id1}@anchor{25d}
 @chapter Intrinsic Subprograms
 
 
@@ -17705,7 +17733,7 @@ Ada standard does not require Ada compilers to implement this feature.
 @end menu
 
 @node Intrinsic Operators,Compilation_ISO_Date,,Intrinsic Subprograms
-@anchor{gnat_rm/intrinsic_subprograms id2}@anchor{25c}@anchor{gnat_rm/intrinsic_subprograms intrinsic-operators}@anchor{25d}
+@anchor{gnat_rm/intrinsic_subprograms id2}@anchor{25e}@anchor{gnat_rm/intrinsic_subprograms intrinsic-operators}@anchor{25f}
 @section Intrinsic Operators
 
 
@@ -17736,7 +17764,7 @@ It is also possible to specify such operators for private types, if the
 full views are appropriate arithmetic types.
 
 @node Compilation_ISO_Date,Compilation_Date,Intrinsic Operators,Intrinsic Subprograms
-@anchor{gnat_rm/intrinsic_subprograms id3}@anchor{25e}@anchor{gnat_rm/intrinsic_subprograms compilation-iso-date}@anchor{25f}
+@anchor{gnat_rm/intrinsic_subprograms id3}@anchor{260}@anchor{gnat_rm/intrinsic_subprograms compilation-iso-date}@anchor{261}
 @section Compilation_ISO_Date
 
 
@@ -17750,7 +17778,7 @@ application program should simply call the function
 the current compilation (in local time format YYYY-MM-DD).
 
 @node Compilation_Date,Compilation_Time,Compilation_ISO_Date,Intrinsic Subprograms
-@anchor{gnat_rm/intrinsic_subprograms compilation-date}@anchor{260}@anchor{gnat_rm/intrinsic_subprograms id4}@anchor{261}
+@anchor{gnat_rm/intrinsic_subprograms compilation-date}@anchor{262}@anchor{gnat_rm/intrinsic_subprograms id4}@anchor{263}
 @section Compilation_Date
 
 
@@ -17760,7 +17788,7 @@ Same as Compilation_ISO_Date, except the string is in the form
 MMM DD YYYY.
 
 @node Compilation_Time,Enclosing_Entity,Compilation_Date,Intrinsic Subprograms
-@anchor{gnat_rm/intrinsic_subprograms compilation-time}@anchor{262}@anchor{gnat_rm/intrinsic_subprograms id5}@anchor{263}
+@anchor{gnat_rm/intrinsic_subprograms compilation-time}@anchor{264}@anchor{gnat_rm/intrinsic_subprograms id5}@anchor{265}
 @section Compilation_Time
 
 
@@ -17774,7 +17802,7 @@ application program should simply call the function
 the current compilation (in local time format HH:MM:SS).
 
 @node Enclosing_Entity,Exception_Information,Compilation_Time,Intrinsic Subprograms
-@anchor{gnat_rm/intrinsic_subprograms id6}@anchor{264}@anchor{gnat_rm/intrinsic_subprograms enclosing-entity}@anchor{265}
+@anchor{gnat_rm/intrinsic_subprograms id6}@anchor{266}@anchor{gnat_rm/intrinsic_subprograms enclosing-entity}@anchor{267}
 @section Enclosing_Entity
 
 
@@ -17788,7 +17816,7 @@ application program should simply call the function
 the current subprogram, package, task, entry, or protected subprogram.
 
 @node Exception_Information,Exception_Message,Enclosing_Entity,Intrinsic Subprograms
-@anchor{gnat_rm/intrinsic_subprograms id7}@anchor{266}@anchor{gnat_rm/intrinsic_subprograms exception-information}@anchor{267}
+@anchor{gnat_rm/intrinsic_subprograms id7}@anchor{268}@anchor{gnat_rm/intrinsic_subprograms exception-information}@anchor{269}
 @section Exception_Information
 
 
@@ -17802,7 +17830,7 @@ so an application program should simply call the function
 the exception information associated with the current exception.
 
 @node Exception_Message,Exception_Name,Exception_Information,Intrinsic Subprograms
-@anchor{gnat_rm/intrinsic_subprograms exception-message}@anchor{268}@anchor{gnat_rm/intrinsic_subprograms id8}@anchor{269}
+@anchor{gnat_rm/intrinsic_subprograms exception-message}@anchor{26a}@anchor{gnat_rm/intrinsic_subprograms id8}@anchor{26b}
 @section Exception_Message
 
 
@@ -17816,7 +17844,7 @@ so an application program should simply call the function
 the message associated with the current exception.
 
 @node Exception_Name,File,Exception_Message,Intrinsic Subprograms
-@anchor{gnat_rm/intrinsic_subprograms exception-name}@anchor{26a}@anchor{gnat_rm/intrinsic_subprograms id9}@anchor{26b}
+@anchor{gnat_rm/intrinsic_subprograms exception-name}@anchor{26c}@anchor{gnat_rm/intrinsic_subprograms id9}@anchor{26d}
 @section Exception_Name
 
 
@@ -17830,7 +17858,7 @@ so an application program should simply call the function
 the name of the current exception.
 
 @node File,Line,Exception_Name,Intrinsic Subprograms
-@anchor{gnat_rm/intrinsic_subprograms id10}@anchor{26c}@anchor{gnat_rm/intrinsic_subprograms file}@anchor{26d}
+@anchor{gnat_rm/intrinsic_subprograms id10}@anchor{26e}@anchor{gnat_rm/intrinsic_subprograms file}@anchor{26f}
 @section File
 
 
@@ -17844,7 +17872,7 @@ application program should simply call the function
 file.
 
 @node Line,Shifts and Rotates,File,Intrinsic Subprograms
-@anchor{gnat_rm/intrinsic_subprograms id11}@anchor{26e}@anchor{gnat_rm/intrinsic_subprograms line}@anchor{26f}
+@anchor{gnat_rm/intrinsic_subprograms id11}@anchor{270}@anchor{gnat_rm/intrinsic_subprograms line}@anchor{271}
 @section Line
 
 
@@ -17858,7 +17886,7 @@ application program should simply call the function
 source line.
 
 @node Shifts and Rotates,Source_Location,Line,Intrinsic Subprograms
-@anchor{gnat_rm/intrinsic_subprograms shifts-and-rotates}@anchor{270}@anchor{gnat_rm/intrinsic_subprograms id12}@anchor{271}
+@anchor{gnat_rm/intrinsic_subprograms shifts-and-rotates}@anchor{272}@anchor{gnat_rm/intrinsic_subprograms id12}@anchor{273}
 @section Shifts and Rotates
 
 
@@ -17899,7 +17927,7 @@ using these provided shift operations, shifts performed on negative numbers
 will result in modification of the sign bit.
 
 @node Source_Location,,Shifts and Rotates,Intrinsic Subprograms
-@anchor{gnat_rm/intrinsic_subprograms source-location}@anchor{272}@anchor{gnat_rm/intrinsic_subprograms id13}@anchor{273}
+@anchor{gnat_rm/intrinsic_subprograms source-location}@anchor{274}@anchor{gnat_rm/intrinsic_subprograms id13}@anchor{275}
 @section Source_Location
 
 
@@ -17913,7 +17941,7 @@ application program should simply call the function
 source file location.
 
 @node Representation Clauses and Pragmas,Standard Library Routines,Intrinsic Subprograms,Top
-@anchor{gnat_rm/representation_clauses_and_pragmas representation-clauses-and-pragmas}@anchor{d}@anchor{gnat_rm/representation_clauses_and_pragmas doc}@anchor{274}@anchor{gnat_rm/representation_clauses_and_pragmas id1}@anchor{275}
+@anchor{gnat_rm/representation_clauses_and_pragmas representation-clauses-and-pragmas}@anchor{d}@anchor{gnat_rm/representation_clauses_and_pragmas doc}@anchor{276}@anchor{gnat_rm/representation_clauses_and_pragmas id1}@anchor{277}
 @chapter Representation Clauses and Pragmas
 
 
@@ -17959,7 +17987,7 @@ and this section describes the additional capabilities provided.
 @end menu
 
 @node Alignment Clauses,Size Clauses,,Representation Clauses and Pragmas
-@anchor{gnat_rm/representation_clauses_and_pragmas id2}@anchor{276}@anchor{gnat_rm/representation_clauses_and_pragmas alignment-clauses}@anchor{277}
+@anchor{gnat_rm/representation_clauses_and_pragmas id2}@anchor{278}@anchor{gnat_rm/representation_clauses_and_pragmas alignment-clauses}@anchor{279}
 @section Alignment Clauses
 
 
@@ -18090,7 +18118,7 @@ assumption is non-portable, and other compilers may choose different
 alignments for the subtype @code{RS}.
 
 @node Size Clauses,Storage_Size Clauses,Alignment Clauses,Representation Clauses and Pragmas
-@anchor{gnat_rm/representation_clauses_and_pragmas id3}@anchor{278}@anchor{gnat_rm/representation_clauses_and_pragmas size-clauses}@anchor{279}
+@anchor{gnat_rm/representation_clauses_and_pragmas id3}@anchor{27a}@anchor{gnat_rm/representation_clauses_and_pragmas size-clauses}@anchor{27b}
 @section Size Clauses
 
 
@@ -18167,7 +18195,7 @@ if it is known that a Size value can be accommodated in an object of
 type Integer.
 
 @node Storage_Size Clauses,Size of Variant Record Objects,Size Clauses,Representation Clauses and Pragmas
-@anchor{gnat_rm/representation_clauses_and_pragmas storage-size-clauses}@anchor{27a}@anchor{gnat_rm/representation_clauses_and_pragmas id4}@anchor{27b}
+@anchor{gnat_rm/representation_clauses_and_pragmas storage-size-clauses}@anchor{27c}@anchor{gnat_rm/representation_clauses_and_pragmas id4}@anchor{27d}
 @section Storage_Size Clauses
 
 
@@ -18240,7 +18268,7 @@ Of course in practice, there will not be any explicit allocators in the
 case of such an access declaration.
 
 @node Size of Variant Record Objects,Biased Representation,Storage_Size Clauses,Representation Clauses and Pragmas
-@anchor{gnat_rm/representation_clauses_and_pragmas id5}@anchor{27c}@anchor{gnat_rm/representation_clauses_and_pragmas size-of-variant-record-objects}@anchor{27d}
+@anchor{gnat_rm/representation_clauses_and_pragmas id5}@anchor{27e}@anchor{gnat_rm/representation_clauses_and_pragmas size-of-variant-record-objects}@anchor{27f}
 @section Size of Variant Record Objects
 
 
@@ -18350,7 +18378,7 @@ the maximum size, regardless of the current variant value, the
 variant value.
 
 @node Biased Representation,Value_Size and Object_Size Clauses,Size of Variant Record Objects,Representation Clauses and Pragmas
-@anchor{gnat_rm/representation_clauses_and_pragmas id6}@anchor{27e}@anchor{gnat_rm/representation_clauses_and_pragmas biased-representation}@anchor{27f}
+@anchor{gnat_rm/representation_clauses_and_pragmas id6}@anchor{280}@anchor{gnat_rm/representation_clauses_and_pragmas biased-representation}@anchor{281}
 @section Biased Representation
 
 
@@ -18388,7 +18416,7 @@ biased representation can be used for all discrete types except for
 enumeration types for which a representation clause is given.
 
 @node Value_Size and Object_Size Clauses,Component_Size Clauses,Biased Representation,Representation Clauses and Pragmas
-@anchor{gnat_rm/representation_clauses_and_pragmas id7}@anchor{280}@anchor{gnat_rm/representation_clauses_and_pragmas value-size-and-object-size-clauses}@anchor{281}
+@anchor{gnat_rm/representation_clauses_and_pragmas id7}@anchor{282}@anchor{gnat_rm/representation_clauses_and_pragmas value-size-and-object-size-clauses}@anchor{283}
 @section Value_Size and Object_Size Clauses
 
 
@@ -18704,7 +18732,7 @@ definition clause forces biased representation. This
 warning can be turned off using @code{-gnatw.B}.
 
 @node Component_Size Clauses,Bit_Order Clauses,Value_Size and Object_Size Clauses,Representation Clauses and Pragmas
-@anchor{gnat_rm/representation_clauses_and_pragmas id8}@anchor{282}@anchor{gnat_rm/representation_clauses_and_pragmas component-size-clauses}@anchor{283}
+@anchor{gnat_rm/representation_clauses_and_pragmas id8}@anchor{284}@anchor{gnat_rm/representation_clauses_and_pragmas component-size-clauses}@anchor{285}
 @section Component_Size Clauses
 
 
@@ -18752,7 +18780,7 @@ and a pragma Pack for the same array type. if such duplicate
 clauses are given, the pragma Pack will be ignored.
 
 @node Bit_Order Clauses,Effect of Bit_Order on Byte Ordering,Component_Size Clauses,Representation Clauses and Pragmas
-@anchor{gnat_rm/representation_clauses_and_pragmas bit-order-clauses}@anchor{284}@anchor{gnat_rm/representation_clauses_and_pragmas id9}@anchor{285}
+@anchor{gnat_rm/representation_clauses_and_pragmas bit-order-clauses}@anchor{286}@anchor{gnat_rm/representation_clauses_and_pragmas id9}@anchor{287}
 @section Bit_Order Clauses
 
 
@@ -18858,7 +18886,7 @@ if desired.  The following section contains additional
 details regarding the issue of byte ordering.
 
 @node Effect of Bit_Order on Byte Ordering,Pragma Pack for Arrays,Bit_Order Clauses,Representation Clauses and Pragmas
-@anchor{gnat_rm/representation_clauses_and_pragmas id10}@anchor{286}@anchor{gnat_rm/representation_clauses_and_pragmas effect-of-bit-order-on-byte-ordering}@anchor{287}
+@anchor{gnat_rm/representation_clauses_and_pragmas id10}@anchor{288}@anchor{gnat_rm/representation_clauses_and_pragmas effect-of-bit-order-on-byte-ordering}@anchor{289}
 @section Effect of Bit_Order on Byte Ordering
 
 
@@ -19115,7 +19143,7 @@ to set the boolean constant @code{Master_Byte_First} in
 an appropriate manner.
 
 @node Pragma Pack for Arrays,Pragma Pack for Records,Effect of Bit_Order on Byte Ordering,Representation Clauses and Pragmas
-@anchor{gnat_rm/representation_clauses_and_pragmas pragma-pack-for-arrays}@anchor{288}@anchor{gnat_rm/representation_clauses_and_pragmas id11}@anchor{289}
+@anchor{gnat_rm/representation_clauses_and_pragmas pragma-pack-for-arrays}@anchor{28a}@anchor{gnat_rm/representation_clauses_and_pragmas id11}@anchor{28b}
 @section Pragma Pack for Arrays
 
 
@@ -19235,7 +19263,7 @@ Here 31-bit packing is achieved as required, and no warning is generated,
 since in this case the programmer intention is clear.
 
 @node Pragma Pack for Records,Record Representation Clauses,Pragma Pack for Arrays,Representation Clauses and Pragmas
-@anchor{gnat_rm/representation_clauses_and_pragmas pragma-pack-for-records}@anchor{28a}@anchor{gnat_rm/representation_clauses_and_pragmas id12}@anchor{28b}
+@anchor{gnat_rm/representation_clauses_and_pragmas pragma-pack-for-records}@anchor{28c}@anchor{gnat_rm/representation_clauses_and_pragmas id12}@anchor{28d}
 @section Pragma Pack for Records
 
 
@@ -19319,7 +19347,7 @@ array that is longer than 64 bits, so it is itself non-packable on
 boundary, and takes an integral number of bytes, i.e., 72 bits.
 
 @node Record Representation Clauses,Handling of Records with Holes,Pragma Pack for Records,Representation Clauses and Pragmas
-@anchor{gnat_rm/representation_clauses_and_pragmas id13}@anchor{28c}@anchor{gnat_rm/representation_clauses_and_pragmas record-representation-clauses}@anchor{28d}
+@anchor{gnat_rm/representation_clauses_and_pragmas id13}@anchor{28e}@anchor{gnat_rm/representation_clauses_and_pragmas record-representation-clauses}@anchor{28f}
 @section Record Representation Clauses
 
 
@@ -19398,7 +19426,7 @@ end record;
 @end example
 
 @node Handling of Records with Holes,Enumeration Clauses,Record Representation Clauses,Representation Clauses and Pragmas
-@anchor{gnat_rm/representation_clauses_and_pragmas handling-of-records-with-holes}@anchor{28e}@anchor{gnat_rm/representation_clauses_and_pragmas id14}@anchor{28f}
+@anchor{gnat_rm/representation_clauses_and_pragmas handling-of-records-with-holes}@anchor{290}@anchor{gnat_rm/representation_clauses_and_pragmas id14}@anchor{291}
 @section Handling of Records with Holes
 
 
@@ -19474,7 +19502,7 @@ for Hrec'Size use 64;
 @end example
 
 @node Enumeration Clauses,Address Clauses,Handling of Records with Holes,Representation Clauses and Pragmas
-@anchor{gnat_rm/representation_clauses_and_pragmas enumeration-clauses}@anchor{290}@anchor{gnat_rm/representation_clauses_and_pragmas id15}@anchor{291}
+@anchor{gnat_rm/representation_clauses_and_pragmas enumeration-clauses}@anchor{292}@anchor{gnat_rm/representation_clauses_and_pragmas id15}@anchor{293}
 @section Enumeration Clauses
 
 
@@ -19517,7 +19545,7 @@ the overhead of converting representation values to the corresponding
 positional values, (i.e., the value delivered by the @code{Pos} attribute).
 
 @node Address Clauses,Use of Address Clauses for Memory-Mapped I/O,Enumeration Clauses,Representation Clauses and Pragmas
-@anchor{gnat_rm/representation_clauses_and_pragmas id16}@anchor{292}@anchor{gnat_rm/representation_clauses_and_pragmas address-clauses}@anchor{293}
+@anchor{gnat_rm/representation_clauses_and_pragmas id16}@anchor{294}@anchor{gnat_rm/representation_clauses_and_pragmas address-clauses}@anchor{295}
 @section Address Clauses
 
 
@@ -19846,7 +19874,7 @@ then the program compiles without the warning and when run will generate
 the output @code{X was not clobbered}.
 
 @node Use of Address Clauses for Memory-Mapped I/O,Effect of Convention on Representation,Address Clauses,Representation Clauses and Pragmas
-@anchor{gnat_rm/representation_clauses_and_pragmas id17}@anchor{294}@anchor{gnat_rm/representation_clauses_and_pragmas use-of-address-clauses-for-memory-mapped-i-o}@anchor{295}
+@anchor{gnat_rm/representation_clauses_and_pragmas id17}@anchor{296}@anchor{gnat_rm/representation_clauses_and_pragmas use-of-address-clauses-for-memory-mapped-i-o}@anchor{297}
 @section Use of Address Clauses for Memory-Mapped I/O
 
 
@@ -19904,7 +19932,7 @@ provides the pragma @code{Volatile_Full_Access} which can be used in lieu of
 pragma @code{Atomic} and will give the additional guarantee.
 
 @node Effect of Convention on Representation,Conventions and Anonymous Access Types,Use of Address Clauses for Memory-Mapped I/O,Representation Clauses and Pragmas
-@anchor{gnat_rm/representation_clauses_and_pragmas id18}@anchor{296}@anchor{gnat_rm/representation_clauses_and_pragmas effect-of-convention-on-representation}@anchor{297}
+@anchor{gnat_rm/representation_clauses_and_pragmas id18}@anchor{298}@anchor{gnat_rm/representation_clauses_and_pragmas effect-of-convention-on-representation}@anchor{299}
 @section Effect of Convention on Representation
 
 
@@ -19982,7 +20010,7 @@ when one of these values is read, any nonzero value is treated as True.
 @end itemize
 
 @node Conventions and Anonymous Access Types,Determining the Representations chosen by GNAT,Effect of Convention on Representation,Representation Clauses and Pragmas
-@anchor{gnat_rm/representation_clauses_and_pragmas conventions-and-anonymous-access-types}@anchor{298}@anchor{gnat_rm/representation_clauses_and_pragmas id19}@anchor{299}
+@anchor{gnat_rm/representation_clauses_and_pragmas conventions-and-anonymous-access-types}@anchor{29a}@anchor{gnat_rm/representation_clauses_and_pragmas id19}@anchor{29b}
 @section Conventions and Anonymous Access Types
 
 
@@ -20058,7 +20086,7 @@ package ConvComp is
 @end example
 
 @node Determining the Representations chosen by GNAT,,Conventions and Anonymous Access Types,Representation Clauses and Pragmas
-@anchor{gnat_rm/representation_clauses_and_pragmas id20}@anchor{29a}@anchor{gnat_rm/representation_clauses_and_pragmas determining-the-representations-chosen-by-gnat}@anchor{29b}
+@anchor{gnat_rm/representation_clauses_and_pragmas id20}@anchor{29c}@anchor{gnat_rm/representation_clauses_and_pragmas determining-the-representations-chosen-by-gnat}@anchor{29d}
 @section Determining the Representations chosen by GNAT
 
 
@@ -20210,7 +20238,7 @@ generated by the compiler into the original source to fix and guarantee
 the actual representation to be used.
 
 @node Standard Library Routines,The Implementation of Standard I/O,Representation Clauses and Pragmas,Top
-@anchor{gnat_rm/standard_library_routines standard-library-routines}@anchor{e}@anchor{gnat_rm/standard_library_routines doc}@anchor{29c}@anchor{gnat_rm/standard_library_routines id1}@anchor{29d}
+@anchor{gnat_rm/standard_library_routines standard-library-routines}@anchor{e}@anchor{gnat_rm/standard_library_routines doc}@anchor{29e}@anchor{gnat_rm/standard_library_routines id1}@anchor{29f}
 @chapter Standard Library Routines
 
 
@@ -21034,7 +21062,7 @@ For packages in Interfaces and System, all the RM defined packages are
 available in GNAT, see the Ada 2012 RM for full details.
 
 @node The Implementation of Standard I/O,The GNAT Library,Standard Library Routines,Top
-@anchor{gnat_rm/the_implementation_of_standard_i_o the-implementation-of-standard-i-o}@anchor{f}@anchor{gnat_rm/the_implementation_of_standard_i_o doc}@anchor{29e}@anchor{gnat_rm/the_implementation_of_standard_i_o id1}@anchor{29f}
+@anchor{gnat_rm/the_implementation_of_standard_i_o the-implementation-of-standard-i-o}@anchor{f}@anchor{gnat_rm/the_implementation_of_standard_i_o doc}@anchor{2a0}@anchor{gnat_rm/the_implementation_of_standard_i_o id1}@anchor{2a1}
 @chapter The Implementation of Standard I/O
 
 
@@ -21086,7 +21114,7 @@ these additional facilities are also described in this chapter.
 @end menu
 
 @node Standard I/O Packages,FORM Strings,,The Implementation of Standard I/O
-@anchor{gnat_rm/the_implementation_of_standard_i_o standard-i-o-packages}@anchor{2a0}@anchor{gnat_rm/the_implementation_of_standard_i_o id2}@anchor{2a1}
+@anchor{gnat_rm/the_implementation_of_standard_i_o standard-i-o-packages}@anchor{2a2}@anchor{gnat_rm/the_implementation_of_standard_i_o id2}@anchor{2a3}
 @section Standard I/O Packages
 
 
@@ -21157,7 +21185,7 @@ flush the common I/O streams and in particular Standard_Output before
 elaborating the Ada code.
 
 @node FORM Strings,Direct_IO,Standard I/O Packages,The Implementation of Standard I/O
-@anchor{gnat_rm/the_implementation_of_standard_i_o form-strings}@anchor{2a2}@anchor{gnat_rm/the_implementation_of_standard_i_o id3}@anchor{2a3}
+@anchor{gnat_rm/the_implementation_of_standard_i_o form-strings}@anchor{2a4}@anchor{gnat_rm/the_implementation_of_standard_i_o id3}@anchor{2a5}
 @section FORM Strings
 
 
@@ -21183,7 +21211,7 @@ unrecognized keyword appears in a form string, it is silently ignored
 and not considered invalid.
 
 @node Direct_IO,Sequential_IO,FORM Strings,The Implementation of Standard I/O
-@anchor{gnat_rm/the_implementation_of_standard_i_o direct-io}@anchor{2a4}@anchor{gnat_rm/the_implementation_of_standard_i_o id4}@anchor{2a5}
+@anchor{gnat_rm/the_implementation_of_standard_i_o direct-io}@anchor{2a6}@anchor{gnat_rm/the_implementation_of_standard_i_o id4}@anchor{2a7}
 @section Direct_IO
 
 
@@ -21203,7 +21231,7 @@ There is no limit on the size of Direct_IO files, they are expanded as
 necessary to accommodate whatever records are written to the file.
 
 @node Sequential_IO,Text_IO,Direct_IO,The Implementation of Standard I/O
-@anchor{gnat_rm/the_implementation_of_standard_i_o sequential-io}@anchor{2a6}@anchor{gnat_rm/the_implementation_of_standard_i_o id5}@anchor{2a7}
+@anchor{gnat_rm/the_implementation_of_standard_i_o sequential-io}@anchor{2a8}@anchor{gnat_rm/the_implementation_of_standard_i_o id5}@anchor{2a9}
 @section Sequential_IO
 
 
@@ -21250,7 +21278,7 @@ using Stream_IO, and this is the preferred mechanism.  In particular, the
 above program fragment rewritten to use Stream_IO will work correctly.
 
 @node Text_IO,Wide_Text_IO,Sequential_IO,The Implementation of Standard I/O
-@anchor{gnat_rm/the_implementation_of_standard_i_o id6}@anchor{2a8}@anchor{gnat_rm/the_implementation_of_standard_i_o text-io}@anchor{2a9}
+@anchor{gnat_rm/the_implementation_of_standard_i_o id6}@anchor{2aa}@anchor{gnat_rm/the_implementation_of_standard_i_o text-io}@anchor{2ab}
 @section Text_IO
 
 
@@ -21333,7 +21361,7 @@ the file.
 @end menu
 
 @node Stream Pointer Positioning,Reading and Writing Non-Regular Files,,Text_IO
-@anchor{gnat_rm/the_implementation_of_standard_i_o id7}@anchor{2aa}@anchor{gnat_rm/the_implementation_of_standard_i_o stream-pointer-positioning}@anchor{2ab}
+@anchor{gnat_rm/the_implementation_of_standard_i_o id7}@anchor{2ac}@anchor{gnat_rm/the_implementation_of_standard_i_o stream-pointer-positioning}@anchor{2ad}
 @subsection Stream Pointer Positioning
 
 
@@ -21369,7 +21397,7 @@ between two Ada files, then the difference may be observable in some
 situations.
 
 @node Reading and Writing Non-Regular Files,Get_Immediate,Stream Pointer Positioning,Text_IO
-@anchor{gnat_rm/the_implementation_of_standard_i_o reading-and-writing-non-regular-files}@anchor{2ac}@anchor{gnat_rm/the_implementation_of_standard_i_o id8}@anchor{2ad}
+@anchor{gnat_rm/the_implementation_of_standard_i_o reading-and-writing-non-regular-files}@anchor{2ae}@anchor{gnat_rm/the_implementation_of_standard_i_o id8}@anchor{2af}
 @subsection Reading and Writing Non-Regular Files
 
 
@@ -21420,7 +21448,7 @@ to read data past that end of
 file indication, until another end of file indication is entered.
 
 @node Get_Immediate,Treating Text_IO Files as Streams,Reading and Writing Non-Regular Files,Text_IO
-@anchor{gnat_rm/the_implementation_of_standard_i_o get-immediate}@anchor{2ae}@anchor{gnat_rm/the_implementation_of_standard_i_o id9}@anchor{2af}
+@anchor{gnat_rm/the_implementation_of_standard_i_o get-immediate}@anchor{2b0}@anchor{gnat_rm/the_implementation_of_standard_i_o id9}@anchor{2b1}
 @subsection Get_Immediate
 
 
@@ -21438,7 +21466,7 @@ possible), it is undefined whether the FF character will be treated as a
 page mark.
 
 @node Treating Text_IO Files as Streams,Text_IO Extensions,Get_Immediate,Text_IO
-@anchor{gnat_rm/the_implementation_of_standard_i_o id10}@anchor{2b0}@anchor{gnat_rm/the_implementation_of_standard_i_o treating-text-io-files-as-streams}@anchor{2b1}
+@anchor{gnat_rm/the_implementation_of_standard_i_o id10}@anchor{2b2}@anchor{gnat_rm/the_implementation_of_standard_i_o treating-text-io-files-as-streams}@anchor{2b3}
 @subsection Treating Text_IO Files as Streams
 
 
@@ -21454,7 +21482,7 @@ skipped and the effect is similar to that described above for
 @code{Get_Immediate}.
 
 @node Text_IO Extensions,Text_IO Facilities for Unbounded Strings,Treating Text_IO Files as Streams,Text_IO
-@anchor{gnat_rm/the_implementation_of_standard_i_o id11}@anchor{2b2}@anchor{gnat_rm/the_implementation_of_standard_i_o text-io-extensions}@anchor{2b3}
+@anchor{gnat_rm/the_implementation_of_standard_i_o id11}@anchor{2b4}@anchor{gnat_rm/the_implementation_of_standard_i_o text-io-extensions}@anchor{2b5}
 @subsection Text_IO Extensions
 
 
@@ -21482,7 +21510,7 @@ the string is to be read.
 @end itemize
 
 @node Text_IO Facilities for Unbounded Strings,,Text_IO Extensions,Text_IO
-@anchor{gnat_rm/the_implementation_of_standard_i_o text-io-facilities-for-unbounded-strings}@anchor{2b4}@anchor{gnat_rm/the_implementation_of_standard_i_o id12}@anchor{2b5}
+@anchor{gnat_rm/the_implementation_of_standard_i_o text-io-facilities-for-unbounded-strings}@anchor{2b6}@anchor{gnat_rm/the_implementation_of_standard_i_o id12}@anchor{2b7}
 @subsection Text_IO Facilities for Unbounded Strings
 
 
@@ -21530,7 +21558,7 @@ files @code{a-szuzti.ads} and @code{a-szuzti.adb} provides similar extended
 @code{Wide_Wide_Text_IO} functionality for unbounded wide wide strings.
 
 @node Wide_Text_IO,Wide_Wide_Text_IO,Text_IO,The Implementation of Standard I/O
-@anchor{gnat_rm/the_implementation_of_standard_i_o wide-text-io}@anchor{2b6}@anchor{gnat_rm/the_implementation_of_standard_i_o id13}@anchor{2b7}
+@anchor{gnat_rm/the_implementation_of_standard_i_o wide-text-io}@anchor{2b8}@anchor{gnat_rm/the_implementation_of_standard_i_o id13}@anchor{2b9}
 @section Wide_Text_IO
 
 
@@ -21777,12 +21805,12 @@ input also causes Constraint_Error to be raised.
 @end menu
 
 @node Stream Pointer Positioning<2>,Reading and Writing Non-Regular Files<2>,,Wide_Text_IO
-@anchor{gnat_rm/the_implementation_of_standard_i_o stream-pointer-positioning-1}@anchor{2b8}@anchor{gnat_rm/the_implementation_of_standard_i_o id14}@anchor{2b9}
+@anchor{gnat_rm/the_implementation_of_standard_i_o stream-pointer-positioning-1}@anchor{2ba}@anchor{gnat_rm/the_implementation_of_standard_i_o id14}@anchor{2bb}
 @subsection Stream Pointer Positioning
 
 
 @code{Ada.Wide_Text_IO} is similar to @code{Ada.Text_IO} in its handling
-of stream pointer positioning (@ref{2a9,,Text_IO}).  There is one additional
+of stream pointer positioning (@ref{2ab,,Text_IO}).  There is one additional
 case:
 
 If @code{Ada.Wide_Text_IO.Look_Ahead} reads a character outside the
@@ -21801,7 +21829,7 @@ to a normal program using @code{Wide_Text_IO}.  However, this discrepancy
 can be observed if the wide text file shares a stream with another file.
 
 @node Reading and Writing Non-Regular Files<2>,,Stream Pointer Positioning<2>,Wide_Text_IO
-@anchor{gnat_rm/the_implementation_of_standard_i_o reading-and-writing-non-regular-files-1}@anchor{2ba}@anchor{gnat_rm/the_implementation_of_standard_i_o id15}@anchor{2bb}
+@anchor{gnat_rm/the_implementation_of_standard_i_o reading-and-writing-non-regular-files-1}@anchor{2bc}@anchor{gnat_rm/the_implementation_of_standard_i_o id15}@anchor{2bd}
 @subsection Reading and Writing Non-Regular Files
 
 
@@ -21812,7 +21840,7 @@ treated as data characters), and @code{End_Of_Page} always returns
 it is possible to read beyond an end of file.
 
 @node Wide_Wide_Text_IO,Stream_IO,Wide_Text_IO,The Implementation of Standard I/O
-@anchor{gnat_rm/the_implementation_of_standard_i_o id16}@anchor{2bc}@anchor{gnat_rm/the_implementation_of_standard_i_o wide-wide-text-io}@anchor{2bd}
+@anchor{gnat_rm/the_implementation_of_standard_i_o id16}@anchor{2be}@anchor{gnat_rm/the_implementation_of_standard_i_o wide-wide-text-io}@anchor{2bf}
 @section Wide_Wide_Text_IO
 
 
@@ -21981,12 +22009,12 @@ input also causes Constraint_Error to be raised.
 @end menu
 
 @node Stream Pointer Positioning<3>,Reading and Writing Non-Regular Files<3>,,Wide_Wide_Text_IO
-@anchor{gnat_rm/the_implementation_of_standard_i_o stream-pointer-positioning-2}@anchor{2be}@anchor{gnat_rm/the_implementation_of_standard_i_o id17}@anchor{2bf}
+@anchor{gnat_rm/the_implementation_of_standard_i_o stream-pointer-positioning-2}@anchor{2c0}@anchor{gnat_rm/the_implementation_of_standard_i_o id17}@anchor{2c1}
 @subsection Stream Pointer Positioning
 
 
 @code{Ada.Wide_Wide_Text_IO} is similar to @code{Ada.Text_IO} in its handling
-of stream pointer positioning (@ref{2a9,,Text_IO}).  There is one additional
+of stream pointer positioning (@ref{2ab,,Text_IO}).  There is one additional
 case:
 
 If @code{Ada.Wide_Wide_Text_IO.Look_Ahead} reads a character outside the
@@ -22005,7 +22033,7 @@ to a normal program using @code{Wide_Wide_Text_IO}.  However, this discrepancy
 can be observed if the wide text file shares a stream with another file.
 
 @node Reading and Writing Non-Regular Files<3>,,Stream Pointer Positioning<3>,Wide_Wide_Text_IO
-@anchor{gnat_rm/the_implementation_of_standard_i_o id18}@anchor{2c0}@anchor{gnat_rm/the_implementation_of_standard_i_o reading-and-writing-non-regular-files-2}@anchor{2c1}
+@anchor{gnat_rm/the_implementation_of_standard_i_o id18}@anchor{2c2}@anchor{gnat_rm/the_implementation_of_standard_i_o reading-and-writing-non-regular-files-2}@anchor{2c3}
 @subsection Reading and Writing Non-Regular Files
 
 
@@ -22016,7 +22044,7 @@ treated as data characters), and @code{End_Of_Page} always returns
 it is possible to read beyond an end of file.
 
 @node Stream_IO,Text Translation,Wide_Wide_Text_IO,The Implementation of Standard I/O
-@anchor{gnat_rm/the_implementation_of_standard_i_o id19}@anchor{2c2}@anchor{gnat_rm/the_implementation_of_standard_i_o stream-io}@anchor{2c3}
+@anchor{gnat_rm/the_implementation_of_standard_i_o id19}@anchor{2c4}@anchor{gnat_rm/the_implementation_of_standard_i_o stream-io}@anchor{2c5}
 @section Stream_IO
 
 
@@ -22038,7 +22066,7 @@ manner described for stream attributes.
 @end itemize
 
 @node Text Translation,Shared Files,Stream_IO,The Implementation of Standard I/O
-@anchor{gnat_rm/the_implementation_of_standard_i_o id20}@anchor{2c4}@anchor{gnat_rm/the_implementation_of_standard_i_o text-translation}@anchor{2c5}
+@anchor{gnat_rm/the_implementation_of_standard_i_o id20}@anchor{2c6}@anchor{gnat_rm/the_implementation_of_standard_i_o text-translation}@anchor{2c7}
 @section Text Translation
 
 
@@ -22072,7 +22100,7 @@ mode. (corresponds to_O_U16TEXT).
 @end itemize
 
 @node Shared Files,Filenames encoding,Text Translation,The Implementation of Standard I/O
-@anchor{gnat_rm/the_implementation_of_standard_i_o id21}@anchor{2c6}@anchor{gnat_rm/the_implementation_of_standard_i_o shared-files}@anchor{2c7}
+@anchor{gnat_rm/the_implementation_of_standard_i_o id21}@anchor{2c8}@anchor{gnat_rm/the_implementation_of_standard_i_o shared-files}@anchor{2c9}
 @section Shared Files
 
 
@@ -22135,7 +22163,7 @@ heterogeneous input-output.  Although this approach will work in GNAT if
 for this purpose (using the stream attributes)
 
 @node Filenames encoding,File content encoding,Shared Files,The Implementation of Standard I/O
-@anchor{gnat_rm/the_implementation_of_standard_i_o filenames-encoding}@anchor{2c8}@anchor{gnat_rm/the_implementation_of_standard_i_o id22}@anchor{2c9}
+@anchor{gnat_rm/the_implementation_of_standard_i_o filenames-encoding}@anchor{2ca}@anchor{gnat_rm/the_implementation_of_standard_i_o id22}@anchor{2cb}
 @section Filenames encoding
 
 
@@ -22175,7 +22203,7 @@ platform. On the other Operating Systems the run-time is supporting
 UTF-8 natively.
 
 @node File content encoding,Open Modes,Filenames encoding,The Implementation of Standard I/O
-@anchor{gnat_rm/the_implementation_of_standard_i_o file-content-encoding}@anchor{2ca}@anchor{gnat_rm/the_implementation_of_standard_i_o id23}@anchor{2cb}
+@anchor{gnat_rm/the_implementation_of_standard_i_o file-content-encoding}@anchor{2cc}@anchor{gnat_rm/the_implementation_of_standard_i_o id23}@anchor{2cd}
 @section File content encoding
 
 
@@ -22208,7 +22236,7 @@ Unicode 8-bit encoding
 This encoding is only supported on the Windows platform.
 
 @node Open Modes,Operations on C Streams,File content encoding,The Implementation of Standard I/O
-@anchor{gnat_rm/the_implementation_of_standard_i_o open-modes}@anchor{2cc}@anchor{gnat_rm/the_implementation_of_standard_i_o id24}@anchor{2cd}
+@anchor{gnat_rm/the_implementation_of_standard_i_o open-modes}@anchor{2ce}@anchor{gnat_rm/the_implementation_of_standard_i_o id24}@anchor{2cf}
 @section Open Modes
 
 
@@ -22311,7 +22339,7 @@ subsequently requires switching from reading to writing or vice-versa,
 then the file is reopened in @code{r+} mode to permit the required operation.
 
 @node Operations on C Streams,Interfacing to C Streams,Open Modes,The Implementation of Standard I/O
-@anchor{gnat_rm/the_implementation_of_standard_i_o operations-on-c-streams}@anchor{2ce}@anchor{gnat_rm/the_implementation_of_standard_i_o id25}@anchor{2cf}
+@anchor{gnat_rm/the_implementation_of_standard_i_o operations-on-c-streams}@anchor{2d0}@anchor{gnat_rm/the_implementation_of_standard_i_o id25}@anchor{2d1}
 @section Operations on C Streams
 
 
@@ -22471,7 +22499,7 @@ end Interfaces.C_Streams;
 @end example
 
 @node Interfacing to C Streams,,Operations on C Streams,The Implementation of Standard I/O
-@anchor{gnat_rm/the_implementation_of_standard_i_o interfacing-to-c-streams}@anchor{2d0}@anchor{gnat_rm/the_implementation_of_standard_i_o id26}@anchor{2d1}
+@anchor{gnat_rm/the_implementation_of_standard_i_o interfacing-to-c-streams}@anchor{2d2}@anchor{gnat_rm/the_implementation_of_standard_i_o id26}@anchor{2d3}
 @section Interfacing to C Streams
 
 
@@ -22564,7 +22592,7 @@ imported from a C program, allowing an Ada file to operate on an
 existing C file.
 
 @node The GNAT Library,Interfacing to Other Languages,The Implementation of Standard I/O,Top
-@anchor{gnat_rm/the_gnat_library the-gnat-library}@anchor{10}@anchor{gnat_rm/the_gnat_library doc}@anchor{2d2}@anchor{gnat_rm/the_gnat_library id1}@anchor{2d3}
+@anchor{gnat_rm/the_gnat_library the-gnat-library}@anchor{10}@anchor{gnat_rm/the_gnat_library doc}@anchor{2d4}@anchor{gnat_rm/the_gnat_library id1}@anchor{2d5}
 @chapter The GNAT Library
 
 
@@ -22758,7 +22786,7 @@ of GNAT, and will generate a warning message.
 @end menu
 
 @node Ada Characters Latin_9 a-chlat9 ads,Ada Characters Wide_Latin_1 a-cwila1 ads,,The GNAT Library
-@anchor{gnat_rm/the_gnat_library id2}@anchor{2d4}@anchor{gnat_rm/the_gnat_library ada-characters-latin-9-a-chlat9-ads}@anchor{2d5}
+@anchor{gnat_rm/the_gnat_library id2}@anchor{2d6}@anchor{gnat_rm/the_gnat_library ada-characters-latin-9-a-chlat9-ads}@anchor{2d7}
 @section @code{Ada.Characters.Latin_9} (@code{a-chlat9.ads})
 
 
@@ -22775,7 +22803,7 @@ is specifically authorized by the Ada Reference Manual
 (RM A.3.3(27)).
 
 @node Ada Characters Wide_Latin_1 a-cwila1 ads,Ada Characters Wide_Latin_9 a-cwila1 ads,Ada Characters Latin_9 a-chlat9 ads,The GNAT Library
-@anchor{gnat_rm/the_gnat_library ada-characters-wide-latin-1-a-cwila1-ads}@anchor{2d6}@anchor{gnat_rm/the_gnat_library id3}@anchor{2d7}
+@anchor{gnat_rm/the_gnat_library ada-characters-wide-latin-1-a-cwila1-ads}@anchor{2d8}@anchor{gnat_rm/the_gnat_library id3}@anchor{2d9}
 @section @code{Ada.Characters.Wide_Latin_1} (@code{a-cwila1.ads})
 
 
@@ -22792,7 +22820,7 @@ is specifically authorized by the Ada Reference Manual
 (RM A.3.3(27)).
 
 @node Ada Characters Wide_Latin_9 a-cwila1 ads,Ada Characters Wide_Wide_Latin_1 a-chzla1 ads,Ada Characters Wide_Latin_1 a-cwila1 ads,The GNAT Library
-@anchor{gnat_rm/the_gnat_library id4}@anchor{2d8}@anchor{gnat_rm/the_gnat_library ada-characters-wide-latin-9-a-cwila1-ads}@anchor{2d9}
+@anchor{gnat_rm/the_gnat_library id4}@anchor{2da}@anchor{gnat_rm/the_gnat_library ada-characters-wide-latin-9-a-cwila1-ads}@anchor{2db}
 @section @code{Ada.Characters.Wide_Latin_9} (@code{a-cwila1.ads})
 
 
@@ -22809,7 +22837,7 @@ is specifically authorized by the Ada Reference Manual
 (RM A.3.3(27)).
 
 @node Ada Characters Wide_Wide_Latin_1 a-chzla1 ads,Ada Characters Wide_Wide_Latin_9 a-chzla9 ads,Ada Characters Wide_Latin_9 a-cwila1 ads,The GNAT Library
-@anchor{gnat_rm/the_gnat_library ada-characters-wide-wide-latin-1-a-chzla1-ads}@anchor{2da}@anchor{gnat_rm/the_gnat_library id5}@anchor{2db}
+@anchor{gnat_rm/the_gnat_library ada-characters-wide-wide-latin-1-a-chzla1-ads}@anchor{2dc}@anchor{gnat_rm/the_gnat_library id5}@anchor{2dd}
 @section @code{Ada.Characters.Wide_Wide_Latin_1} (@code{a-chzla1.ads})
 
 
@@ -22826,7 +22854,7 @@ is specifically authorized by the Ada Reference Manual
 (RM A.3.3(27)).
 
 @node Ada Characters Wide_Wide_Latin_9 a-chzla9 ads,Ada Containers Formal_Doubly_Linked_Lists a-cfdlli ads,Ada Characters Wide_Wide_Latin_1 a-chzla1 ads,The GNAT Library
-@anchor{gnat_rm/the_gnat_library ada-characters-wide-wide-latin-9-a-chzla9-ads}@anchor{2dc}@anchor{gnat_rm/the_gnat_library id6}@anchor{2dd}
+@anchor{gnat_rm/the_gnat_library ada-characters-wide-wide-latin-9-a-chzla9-ads}@anchor{2de}@anchor{gnat_rm/the_gnat_library id6}@anchor{2df}
 @section @code{Ada.Characters.Wide_Wide_Latin_9} (@code{a-chzla9.ads})
 
 
@@ -22843,7 +22871,7 @@ is specifically authorized by the Ada Reference Manual
 (RM A.3.3(27)).
 
 @node Ada Containers Formal_Doubly_Linked_Lists a-cfdlli ads,Ada Containers Formal_Hashed_Maps a-cfhama ads,Ada Characters Wide_Wide_Latin_9 a-chzla9 ads,The GNAT Library
-@anchor{gnat_rm/the_gnat_library id7}@anchor{2de}@anchor{gnat_rm/the_gnat_library ada-containers-formal-doubly-linked-lists-a-cfdlli-ads}@anchor{2df}
+@anchor{gnat_rm/the_gnat_library id7}@anchor{2e0}@anchor{gnat_rm/the_gnat_library ada-containers-formal-doubly-linked-lists-a-cfdlli-ads}@anchor{2e1}
 @section @code{Ada.Containers.Formal_Doubly_Linked_Lists} (@code{a-cfdlli.ads})
 
 
@@ -22862,7 +22890,7 @@ efficient version than the one defined in the standard. In particular it
 does not have the complex overhead required to detect cursor tampering.
 
 @node Ada Containers Formal_Hashed_Maps a-cfhama ads,Ada Containers Formal_Hashed_Sets a-cfhase ads,Ada Containers Formal_Doubly_Linked_Lists a-cfdlli ads,The GNAT Library
-@anchor{gnat_rm/the_gnat_library id8}@anchor{2e0}@anchor{gnat_rm/the_gnat_library ada-containers-formal-hashed-maps-a-cfhama-ads}@anchor{2e1}
+@anchor{gnat_rm/the_gnat_library id8}@anchor{2e2}@anchor{gnat_rm/the_gnat_library ada-containers-formal-hashed-maps-a-cfhama-ads}@anchor{2e3}
 @section @code{Ada.Containers.Formal_Hashed_Maps} (@code{a-cfhama.ads})
 
 
@@ -22881,7 +22909,7 @@ efficient version than the one defined in the standard. In particular it
 does not have the complex overhead required to detect cursor tampering.
 
 @node Ada Containers Formal_Hashed_Sets a-cfhase ads,Ada Containers Formal_Ordered_Maps a-cforma ads,Ada Containers Formal_Hashed_Maps a-cfhama ads,The GNAT Library
-@anchor{gnat_rm/the_gnat_library id9}@anchor{2e2}@anchor{gnat_rm/the_gnat_library ada-containers-formal-hashed-sets-a-cfhase-ads}@anchor{2e3}
+@anchor{gnat_rm/the_gnat_library id9}@anchor{2e4}@anchor{gnat_rm/the_gnat_library ada-containers-formal-hashed-sets-a-cfhase-ads}@anchor{2e5}
 @section @code{Ada.Containers.Formal_Hashed_Sets} (@code{a-cfhase.ads})
 
 
@@ -22900,7 +22928,7 @@ efficient version than the one defined in the standard. In particular it
 does not have the complex overhead required to detect cursor tampering.
 
 @node Ada Containers Formal_Ordered_Maps a-cforma ads,Ada Containers Formal_Ordered_Sets a-cforse ads,Ada Containers Formal_Hashed_Sets a-cfhase ads,The GNAT Library
-@anchor{gnat_rm/the_gnat_library id10}@anchor{2e4}@anchor{gnat_rm/the_gnat_library ada-containers-formal-ordered-maps-a-cforma-ads}@anchor{2e5}
+@anchor{gnat_rm/the_gnat_library id10}@anchor{2e6}@anchor{gnat_rm/the_gnat_library ada-containers-formal-ordered-maps-a-cforma-ads}@anchor{2e7}
 @section @code{Ada.Containers.Formal_Ordered_Maps} (@code{a-cforma.ads})
 
 
@@ -22919,7 +22947,7 @@ efficient version than the one defined in the standard. In particular it
 does not have the complex overhead required to detect cursor tampering.
 
 @node Ada Containers Formal_Ordered_Sets a-cforse ads,Ada Containers Formal_Vectors a-cofove ads,Ada Containers Formal_Ordered_Maps a-cforma ads,The GNAT Library
-@anchor{gnat_rm/the_gnat_library ada-containers-formal-ordered-sets-a-cforse-ads}@anchor{2e6}@anchor{gnat_rm/the_gnat_library id11}@anchor{2e7}
+@anchor{gnat_rm/the_gnat_library ada-containers-formal-ordered-sets-a-cforse-ads}@anchor{2e8}@anchor{gnat_rm/the_gnat_library id11}@anchor{2e9}
 @section @code{Ada.Containers.Formal_Ordered_Sets} (@code{a-cforse.ads})
 
 
@@ -22938,7 +22966,7 @@ efficient version than the one defined in the standard. In particular it
 does not have the complex overhead required to detect cursor tampering.
 
 @node Ada Containers Formal_Vectors a-cofove ads,Ada Containers Formal_Indefinite_Vectors a-cfinve ads,Ada Containers Formal_Ordered_Sets a-cforse ads,The GNAT Library
-@anchor{gnat_rm/the_gnat_library id12}@anchor{2e8}@anchor{gnat_rm/the_gnat_library ada-containers-formal-vectors-a-cofove-ads}@anchor{2e9}
+@anchor{gnat_rm/the_gnat_library id12}@anchor{2ea}@anchor{gnat_rm/the_gnat_library ada-containers-formal-vectors-a-cofove-ads}@anchor{2eb}
 @section @code{Ada.Containers.Formal_Vectors} (@code{a-cofove.ads})
 
 
@@ -22957,7 +22985,7 @@ efficient version than the one defined in the standard. In particular it
 does not have the complex overhead required to detect cursor tampering.
 
 @node Ada Containers Formal_Indefinite_Vectors a-cfinve ads,Ada Containers Functional_Vectors a-cofuve ads,Ada Containers Formal_Vectors a-cofove ads,The GNAT Library
-@anchor{gnat_rm/the_gnat_library id13}@anchor{2ea}@anchor{gnat_rm/the_gnat_library ada-containers-formal-indefinite-vectors-a-cfinve-ads}@anchor{2eb}
+@anchor{gnat_rm/the_gnat_library id13}@anchor{2ec}@anchor{gnat_rm/the_gnat_library ada-containers-formal-indefinite-vectors-a-cfinve-ads}@anchor{2ed}
 @section @code{Ada.Containers.Formal_Indefinite_Vectors} (@code{a-cfinve.ads})
 
 
@@ -22976,7 +23004,7 @@ efficient version than the one defined in the standard. In particular it
 does not have the complex overhead required to detect cursor tampering.
 
 @node Ada Containers Functional_Vectors a-cofuve ads,Ada Containers Functional_Sets a-cofuse ads,Ada Containers Formal_Indefinite_Vectors a-cfinve ads,The GNAT Library
-@anchor{gnat_rm/the_gnat_library id14}@anchor{2ec}@anchor{gnat_rm/the_gnat_library ada-containers-functional-vectors-a-cofuve-ads}@anchor{2ed}
+@anchor{gnat_rm/the_gnat_library id14}@anchor{2ee}@anchor{gnat_rm/the_gnat_library ada-containers-functional-vectors-a-cofuve-ads}@anchor{2ef}
 @section @code{Ada.Containers.Functional_Vectors} (@code{a-cofuve.ads})
 
 
@@ -22998,7 +23026,7 @@ and annotations, so that they can be removed from the final executable. The
 specification of this unit is compatible with SPARK 2014.
 
 @node Ada Containers Functional_Sets a-cofuse ads,Ada Containers Functional_Maps a-cofuma ads,Ada Containers Functional_Vectors a-cofuve ads,The GNAT Library
-@anchor{gnat_rm/the_gnat_library ada-containers-functional-sets-a-cofuse-ads}@anchor{2ee}@anchor{gnat_rm/the_gnat_library id15}@anchor{2ef}
+@anchor{gnat_rm/the_gnat_library ada-containers-functional-sets-a-cofuse-ads}@anchor{2f0}@anchor{gnat_rm/the_gnat_library id15}@anchor{2f1}
 @section @code{Ada.Containers.Functional_Sets} (@code{a-cofuse.ads})
 
 
@@ -23020,7 +23048,7 @@ and annotations, so that they can be removed from the final executable. The
 specification of this unit is compatible with SPARK 2014.
 
 @node Ada Containers Functional_Maps a-cofuma ads,Ada Containers Bounded_Holders a-coboho ads,Ada Containers Functional_Sets a-cofuse ads,The GNAT Library
-@anchor{gnat_rm/the_gnat_library id16}@anchor{2f0}@anchor{gnat_rm/the_gnat_library ada-containers-functional-maps-a-cofuma-ads}@anchor{2f1}
+@anchor{gnat_rm/the_gnat_library id16}@anchor{2f2}@anchor{gnat_rm/the_gnat_library ada-containers-functional-maps-a-cofuma-ads}@anchor{2f3}
 @section @code{Ada.Containers.Functional_Maps} (@code{a-cofuma.ads})
 
 
@@ -23042,7 +23070,7 @@ and annotations, so that they can be removed from the final executable. The
 specification of this unit is compatible with SPARK 2014.
 
 @node Ada Containers Bounded_Holders a-coboho ads,Ada Command_Line Environment a-colien ads,Ada Containers Functional_Maps a-cofuma ads,The GNAT Library
-@anchor{gnat_rm/the_gnat_library ada-containers-bounded-holders-a-coboho-ads}@anchor{2f2}@anchor{gnat_rm/the_gnat_library id17}@anchor{2f3}
+@anchor{gnat_rm/the_gnat_library ada-containers-bounded-holders-a-coboho-ads}@anchor{2f4}@anchor{gnat_rm/the_gnat_library id17}@anchor{2f5}
 @section @code{Ada.Containers.Bounded_Holders} (@code{a-coboho.ads})
 
 
@@ -23054,7 +23082,7 @@ This child of @code{Ada.Containers} defines a modified version of
 Indefinite_Holders that avoids heap allocation.
 
 @node Ada Command_Line Environment a-colien ads,Ada Command_Line Remove a-colire ads,Ada Containers Bounded_Holders a-coboho ads,The GNAT Library
-@anchor{gnat_rm/the_gnat_library ada-command-line-environment-a-colien-ads}@anchor{2f4}@anchor{gnat_rm/the_gnat_library id18}@anchor{2f5}
+@anchor{gnat_rm/the_gnat_library ada-command-line-environment-a-colien-ads}@anchor{2f6}@anchor{gnat_rm/the_gnat_library id18}@anchor{2f7}
 @section @code{Ada.Command_Line.Environment} (@code{a-colien.ads})
 
 
@@ -23067,7 +23095,7 @@ provides a mechanism for obtaining environment values on systems
 where this concept makes sense.
 
 @node Ada Command_Line Remove a-colire ads,Ada Command_Line Response_File a-clrefi ads,Ada Command_Line Environment a-colien ads,The GNAT Library
-@anchor{gnat_rm/the_gnat_library id19}@anchor{2f6}@anchor{gnat_rm/the_gnat_library ada-command-line-remove-a-colire-ads}@anchor{2f7}
+@anchor{gnat_rm/the_gnat_library id19}@anchor{2f8}@anchor{gnat_rm/the_gnat_library ada-command-line-remove-a-colire-ads}@anchor{2f9}
 @section @code{Ada.Command_Line.Remove} (@code{a-colire.ads})
 
 
@@ -23085,7 +23113,7 @@ to further calls on the subprograms in @code{Ada.Command_Line} will not
 see the removed argument.
 
 @node Ada Command_Line Response_File a-clrefi ads,Ada Direct_IO C_Streams a-diocst ads,Ada Command_Line Remove a-colire ads,The GNAT Library
-@anchor{gnat_rm/the_gnat_library id20}@anchor{2f8}@anchor{gnat_rm/the_gnat_library ada-command-line-response-file-a-clrefi-ads}@anchor{2f9}
+@anchor{gnat_rm/the_gnat_library id20}@anchor{2fa}@anchor{gnat_rm/the_gnat_library ada-command-line-response-file-a-clrefi-ads}@anchor{2fb}
 @section @code{Ada.Command_Line.Response_File} (@code{a-clrefi.ads})
 
 
@@ -23105,7 +23133,7 @@ Using a response file allow passing a set of arguments to an executable longer
 than the maximum allowed by the system on the command line.
 
 @node Ada Direct_IO C_Streams a-diocst ads,Ada Exceptions Is_Null_Occurrence a-einuoc ads,Ada Command_Line Response_File a-clrefi ads,The GNAT Library
-@anchor{gnat_rm/the_gnat_library id21}@anchor{2fa}@anchor{gnat_rm/the_gnat_library ada-direct-io-c-streams-a-diocst-ads}@anchor{2fb}
+@anchor{gnat_rm/the_gnat_library id21}@anchor{2fc}@anchor{gnat_rm/the_gnat_library ada-direct-io-c-streams-a-diocst-ads}@anchor{2fd}
 @section @code{Ada.Direct_IO.C_Streams} (@code{a-diocst.ads})
 
 
@@ -23120,7 +23148,7 @@ extracted from a file opened on the Ada side, and an Ada file
 can be constructed from a stream opened on the C side.
 
 @node Ada Exceptions Is_Null_Occurrence a-einuoc ads,Ada Exceptions Last_Chance_Handler a-elchha ads,Ada Direct_IO C_Streams a-diocst ads,The GNAT Library
-@anchor{gnat_rm/the_gnat_library id22}@anchor{2fc}@anchor{gnat_rm/the_gnat_library ada-exceptions-is-null-occurrence-a-einuoc-ads}@anchor{2fd}
+@anchor{gnat_rm/the_gnat_library id22}@anchor{2fe}@anchor{gnat_rm/the_gnat_library ada-exceptions-is-null-occurrence-a-einuoc-ads}@anchor{2ff}
 @section @code{Ada.Exceptions.Is_Null_Occurrence} (@code{a-einuoc.ads})
 
 
@@ -23134,7 +23162,7 @@ exception occurrence (@code{Null_Occurrence}) without raising
 an exception.
 
 @node Ada Exceptions Last_Chance_Handler a-elchha ads,Ada Exceptions Traceback a-exctra ads,Ada Exceptions Is_Null_Occurrence a-einuoc ads,The GNAT Library
-@anchor{gnat_rm/the_gnat_library id23}@anchor{2fe}@anchor{gnat_rm/the_gnat_library ada-exceptions-last-chance-handler-a-elchha-ads}@anchor{2ff}
+@anchor{gnat_rm/the_gnat_library id23}@anchor{300}@anchor{gnat_rm/the_gnat_library ada-exceptions-last-chance-handler-a-elchha-ads}@anchor{301}
 @section @code{Ada.Exceptions.Last_Chance_Handler} (@code{a-elchha.ads})
 
 
@@ -23148,7 +23176,7 @@ exceptions (hence the name last chance), and perform clean ups before
 terminating the program. Note that this subprogram never returns.
 
 @node Ada Exceptions Traceback a-exctra ads,Ada Sequential_IO C_Streams a-siocst ads,Ada Exceptions Last_Chance_Handler a-elchha ads,The GNAT Library
-@anchor{gnat_rm/the_gnat_library ada-exceptions-traceback-a-exctra-ads}@anchor{300}@anchor{gnat_rm/the_gnat_library id24}@anchor{301}
+@anchor{gnat_rm/the_gnat_library ada-exceptions-traceback-a-exctra-ads}@anchor{302}@anchor{gnat_rm/the_gnat_library id24}@anchor{303}
 @section @code{Ada.Exceptions.Traceback} (@code{a-exctra.ads})
 
 
@@ -23161,7 +23189,7 @@ give a traceback array of addresses based on an exception
 occurrence.
 
 @node Ada Sequential_IO C_Streams a-siocst ads,Ada Streams Stream_IO C_Streams a-ssicst ads,Ada Exceptions Traceback a-exctra ads,The GNAT Library
-@anchor{gnat_rm/the_gnat_library ada-sequential-io-c-streams-a-siocst-ads}@anchor{302}@anchor{gnat_rm/the_gnat_library id25}@anchor{303}
+@anchor{gnat_rm/the_gnat_library ada-sequential-io-c-streams-a-siocst-ads}@anchor{304}@anchor{gnat_rm/the_gnat_library id25}@anchor{305}
 @section @code{Ada.Sequential_IO.C_Streams} (@code{a-siocst.ads})
 
 
@@ -23176,7 +23204,7 @@ extracted from a file opened on the Ada side, and an Ada file
 can be constructed from a stream opened on the C side.
 
 @node Ada Streams Stream_IO C_Streams a-ssicst ads,Ada Strings Unbounded Text_IO a-suteio ads,Ada Sequential_IO C_Streams a-siocst ads,The GNAT Library
-@anchor{gnat_rm/the_gnat_library id26}@anchor{304}@anchor{gnat_rm/the_gnat_library ada-streams-stream-io-c-streams-a-ssicst-ads}@anchor{305}
+@anchor{gnat_rm/the_gnat_library id26}@anchor{306}@anchor{gnat_rm/the_gnat_library ada-streams-stream-io-c-streams-a-ssicst-ads}@anchor{307}
 @section @code{Ada.Streams.Stream_IO.C_Streams} (@code{a-ssicst.ads})
 
 
@@ -23191,7 +23219,7 @@ extracted from a file opened on the Ada side, and an Ada file
 can be constructed from a stream opened on the C side.
 
 @node Ada Strings Unbounded Text_IO a-suteio ads,Ada Strings Wide_Unbounded Wide_Text_IO a-swuwti ads,Ada Streams Stream_IO C_Streams a-ssicst ads,The GNAT Library
-@anchor{gnat_rm/the_gnat_library ada-strings-unbounded-text-io-a-suteio-ads}@anchor{306}@anchor{gnat_rm/the_gnat_library id27}@anchor{307}
+@anchor{gnat_rm/the_gnat_library ada-strings-unbounded-text-io-a-suteio-ads}@anchor{308}@anchor{gnat_rm/the_gnat_library id27}@anchor{309}
 @section @code{Ada.Strings.Unbounded.Text_IO} (@code{a-suteio.ads})
 
 
@@ -23208,7 +23236,7 @@ strings, avoiding the necessity for an intermediate operation
 with ordinary strings.
 
 @node Ada Strings Wide_Unbounded Wide_Text_IO a-swuwti ads,Ada Strings Wide_Wide_Unbounded Wide_Wide_Text_IO a-szuzti ads,Ada Strings Unbounded Text_IO a-suteio ads,The GNAT Library
-@anchor{gnat_rm/the_gnat_library id28}@anchor{308}@anchor{gnat_rm/the_gnat_library ada-strings-wide-unbounded-wide-text-io-a-swuwti-ads}@anchor{309}
+@anchor{gnat_rm/the_gnat_library id28}@anchor{30a}@anchor{gnat_rm/the_gnat_library ada-strings-wide-unbounded-wide-text-io-a-swuwti-ads}@anchor{30b}
 @section @code{Ada.Strings.Wide_Unbounded.Wide_Text_IO} (@code{a-swuwti.ads})
 
 
@@ -23225,7 +23253,7 @@ wide strings, avoiding the necessity for an intermediate operation
 with ordinary wide strings.
 
 @node Ada Strings Wide_Wide_Unbounded Wide_Wide_Text_IO a-szuzti ads,Ada Task_Initialization a-tasini ads,Ada Strings Wide_Unbounded Wide_Text_IO a-swuwti ads,The GNAT Library
-@anchor{gnat_rm/the_gnat_library id29}@anchor{30a}@anchor{gnat_rm/the_gnat_library ada-strings-wide-wide-unbounded-wide-wide-text-io-a-szuzti-ads}@anchor{30b}
+@anchor{gnat_rm/the_gnat_library id29}@anchor{30c}@anchor{gnat_rm/the_gnat_library ada-strings-wide-wide-unbounded-wide-wide-text-io-a-szuzti-ads}@anchor{30d}
 @section @code{Ada.Strings.Wide_Wide_Unbounded.Wide_Wide_Text_IO} (@code{a-szuzti.ads})
 
 
@@ -23242,7 +23270,7 @@ wide wide strings, avoiding the necessity for an intermediate operation
 with ordinary wide wide strings.
 
 @node Ada Task_Initialization a-tasini ads,Ada Text_IO C_Streams a-tiocst ads,Ada Strings Wide_Wide_Unbounded Wide_Wide_Text_IO a-szuzti ads,The GNAT Library
-@anchor{gnat_rm/the_gnat_library ada-task-initialization-a-tasini-ads}@anchor{30c}@anchor{gnat_rm/the_gnat_library id30}@anchor{30d}
+@anchor{gnat_rm/the_gnat_library ada-task-initialization-a-tasini-ads}@anchor{30e}@anchor{gnat_rm/the_gnat_library id30}@anchor{30f}
 @section @code{Ada.Task_Initialization} (@code{a-tasini.ads})
 
 
@@ -23254,7 +23282,7 @@ parameterless procedures. Note that such a handler is only invoked for
 those tasks activated after the handler is set.
 
 @node Ada Text_IO C_Streams a-tiocst ads,Ada Text_IO Reset_Standard_Files a-tirsfi ads,Ada Task_Initialization a-tasini ads,The GNAT Library
-@anchor{gnat_rm/the_gnat_library ada-text-io-c-streams-a-tiocst-ads}@anchor{30e}@anchor{gnat_rm/the_gnat_library id31}@anchor{30f}
+@anchor{gnat_rm/the_gnat_library ada-text-io-c-streams-a-tiocst-ads}@anchor{310}@anchor{gnat_rm/the_gnat_library id31}@anchor{311}
 @section @code{Ada.Text_IO.C_Streams} (@code{a-tiocst.ads})
 
 
@@ -23269,7 +23297,7 @@ extracted from a file opened on the Ada side, and an Ada file
 can be constructed from a stream opened on the C side.
 
 @node Ada Text_IO Reset_Standard_Files a-tirsfi ads,Ada Wide_Characters Unicode a-wichun ads,Ada Text_IO C_Streams a-tiocst ads,The GNAT Library
-@anchor{gnat_rm/the_gnat_library ada-text-io-reset-standard-files-a-tirsfi-ads}@anchor{310}@anchor{gnat_rm/the_gnat_library id32}@anchor{311}
+@anchor{gnat_rm/the_gnat_library ada-text-io-reset-standard-files-a-tirsfi-ads}@anchor{312}@anchor{gnat_rm/the_gnat_library id32}@anchor{313}
 @section @code{Ada.Text_IO.Reset_Standard_Files} (@code{a-tirsfi.ads})
 
 
@@ -23284,7 +23312,7 @@ execution (for example a standard input file may be redefined to be
 interactive).
 
 @node Ada Wide_Characters Unicode a-wichun ads,Ada Wide_Text_IO C_Streams a-wtcstr ads,Ada Text_IO Reset_Standard_Files a-tirsfi ads,The GNAT Library
-@anchor{gnat_rm/the_gnat_library id33}@anchor{312}@anchor{gnat_rm/the_gnat_library ada-wide-characters-unicode-a-wichun-ads}@anchor{313}
+@anchor{gnat_rm/the_gnat_library id33}@anchor{314}@anchor{gnat_rm/the_gnat_library ada-wide-characters-unicode-a-wichun-ads}@anchor{315}
 @section @code{Ada.Wide_Characters.Unicode} (@code{a-wichun.ads})
 
 
@@ -23297,7 +23325,7 @@ This package provides subprograms that allow categorization of
 Wide_Character values according to Unicode categories.
 
 @node Ada Wide_Text_IO C_Streams a-wtcstr ads,Ada Wide_Text_IO Reset_Standard_Files a-wrstfi ads,Ada Wide_Characters Unicode a-wichun ads,The GNAT Library
-@anchor{gnat_rm/the_gnat_library id34}@anchor{314}@anchor{gnat_rm/the_gnat_library ada-wide-text-io-c-streams-a-wtcstr-ads}@anchor{315}
+@anchor{gnat_rm/the_gnat_library id34}@anchor{316}@anchor{gnat_rm/the_gnat_library ada-wide-text-io-c-streams-a-wtcstr-ads}@anchor{317}
 @section @code{Ada.Wide_Text_IO.C_Streams} (@code{a-wtcstr.ads})
 
 
@@ -23312,7 +23340,7 @@ extracted from a file opened on the Ada side, and an Ada file
 can be constructed from a stream opened on the C side.
 
 @node Ada Wide_Text_IO Reset_Standard_Files a-wrstfi ads,Ada Wide_Wide_Characters Unicode a-zchuni ads,Ada Wide_Text_IO C_Streams a-wtcstr ads,The GNAT Library
-@anchor{gnat_rm/the_gnat_library ada-wide-text-io-reset-standard-files-a-wrstfi-ads}@anchor{316}@anchor{gnat_rm/the_gnat_library id35}@anchor{317}
+@anchor{gnat_rm/the_gnat_library ada-wide-text-io-reset-standard-files-a-wrstfi-ads}@anchor{318}@anchor{gnat_rm/the_gnat_library id35}@anchor{319}
 @section @code{Ada.Wide_Text_IO.Reset_Standard_Files} (@code{a-wrstfi.ads})
 
 
@@ -23327,7 +23355,7 @@ execution (for example a standard input file may be redefined to be
 interactive).
 
 @node Ada Wide_Wide_Characters Unicode a-zchuni ads,Ada Wide_Wide_Text_IO C_Streams a-ztcstr ads,Ada Wide_Text_IO Reset_Standard_Files a-wrstfi ads,The GNAT Library
-@anchor{gnat_rm/the_gnat_library id36}@anchor{318}@anchor{gnat_rm/the_gnat_library ada-wide-wide-characters-unicode-a-zchuni-ads}@anchor{319}
+@anchor{gnat_rm/the_gnat_library id36}@anchor{31a}@anchor{gnat_rm/the_gnat_library ada-wide-wide-characters-unicode-a-zchuni-ads}@anchor{31b}
 @section @code{Ada.Wide_Wide_Characters.Unicode} (@code{a-zchuni.ads})
 
 
@@ -23340,7 +23368,7 @@ This package provides subprograms that allow categorization of
 Wide_Wide_Character values according to Unicode categories.
 
 @node Ada Wide_Wide_Text_IO C_Streams a-ztcstr ads,Ada Wide_Wide_Text_IO Reset_Standard_Files a-zrstfi ads,Ada Wide_Wide_Characters Unicode a-zchuni ads,The GNAT Library
-@anchor{gnat_rm/the_gnat_library id37}@anchor{31a}@anchor{gnat_rm/the_gnat_library ada-wide-wide-text-io-c-streams-a-ztcstr-ads}@anchor{31b}
+@anchor{gnat_rm/the_gnat_library id37}@anchor{31c}@anchor{gnat_rm/the_gnat_library ada-wide-wide-text-io-c-streams-a-ztcstr-ads}@anchor{31d}
 @section @code{Ada.Wide_Wide_Text_IO.C_Streams} (@code{a-ztcstr.ads})
 
 
@@ -23355,7 +23383,7 @@ extracted from a file opened on the Ada side, and an Ada file
 can be constructed from a stream opened on the C side.
 
 @node Ada Wide_Wide_Text_IO Reset_Standard_Files a-zrstfi ads,GNAT Altivec g-altive ads,Ada Wide_Wide_Text_IO C_Streams a-ztcstr ads,The GNAT Library
-@anchor{gnat_rm/the_gnat_library ada-wide-wide-text-io-reset-standard-files-a-zrstfi-ads}@anchor{31c}@anchor{gnat_rm/the_gnat_library id38}@anchor{31d}
+@anchor{gnat_rm/the_gnat_library ada-wide-wide-text-io-reset-standard-files-a-zrstfi-ads}@anchor{31e}@anchor{gnat_rm/the_gnat_library id38}@anchor{31f}
 @section @code{Ada.Wide_Wide_Text_IO.Reset_Standard_Files} (@code{a-zrstfi.ads})
 
 
@@ -23370,7 +23398,7 @@ change during execution (for example a standard input file may be
 redefined to be interactive).
 
 @node GNAT Altivec g-altive ads,GNAT Altivec Conversions g-altcon ads,Ada Wide_Wide_Text_IO Reset_Standard_Files a-zrstfi ads,The GNAT Library
-@anchor{gnat_rm/the_gnat_library gnat-altivec-g-altive-ads}@anchor{31e}@anchor{gnat_rm/the_gnat_library id39}@anchor{31f}
+@anchor{gnat_rm/the_gnat_library gnat-altivec-g-altive-ads}@anchor{320}@anchor{gnat_rm/the_gnat_library id39}@anchor{321}
 @section @code{GNAT.Altivec} (@code{g-altive.ads})
 
 
@@ -23383,7 +23411,7 @@ definitions of constants and types common to all the versions of the
 binding.
 
 @node GNAT Altivec Conversions g-altcon ads,GNAT Altivec Vector_Operations g-alveop ads,GNAT Altivec g-altive ads,The GNAT Library
-@anchor{gnat_rm/the_gnat_library gnat-altivec-conversions-g-altcon-ads}@anchor{320}@anchor{gnat_rm/the_gnat_library id40}@anchor{321}
+@anchor{gnat_rm/the_gnat_library gnat-altivec-conversions-g-altcon-ads}@anchor{322}@anchor{gnat_rm/the_gnat_library id40}@anchor{323}
 @section @code{GNAT.Altivec.Conversions} (@code{g-altcon.ads})
 
 
@@ -23394,7 +23422,7 @@ binding.
 This package provides the Vector/View conversion routines.
 
 @node GNAT Altivec Vector_Operations g-alveop ads,GNAT Altivec Vector_Types g-alvety ads,GNAT Altivec Conversions g-altcon ads,The GNAT Library
-@anchor{gnat_rm/the_gnat_library id41}@anchor{322}@anchor{gnat_rm/the_gnat_library gnat-altivec-vector-operations-g-alveop-ads}@anchor{323}
+@anchor{gnat_rm/the_gnat_library id41}@anchor{324}@anchor{gnat_rm/the_gnat_library gnat-altivec-vector-operations-g-alveop-ads}@anchor{325}
 @section @code{GNAT.Altivec.Vector_Operations} (@code{g-alveop.ads})
 
 
@@ -23408,7 +23436,7 @@ library. The hard binding is provided as a separate package. This unit
 is common to both bindings.
 
 @node GNAT Altivec Vector_Types g-alvety ads,GNAT Altivec Vector_Views g-alvevi ads,GNAT Altivec Vector_Operations g-alveop ads,The GNAT Library
-@anchor{gnat_rm/the_gnat_library gnat-altivec-vector-types-g-alvety-ads}@anchor{324}@anchor{gnat_rm/the_gnat_library id42}@anchor{325}
+@anchor{gnat_rm/the_gnat_library gnat-altivec-vector-types-g-alvety-ads}@anchor{326}@anchor{gnat_rm/the_gnat_library id42}@anchor{327}
 @section @code{GNAT.Altivec.Vector_Types} (@code{g-alvety.ads})
 
 
@@ -23420,7 +23448,7 @@ This package exposes the various vector types part of the Ada binding
 to AltiVec facilities.
 
 @node GNAT Altivec Vector_Views g-alvevi ads,GNAT Array_Split g-arrspl ads,GNAT Altivec Vector_Types g-alvety ads,The GNAT Library
-@anchor{gnat_rm/the_gnat_library gnat-altivec-vector-views-g-alvevi-ads}@anchor{326}@anchor{gnat_rm/the_gnat_library id43}@anchor{327}
+@anchor{gnat_rm/the_gnat_library gnat-altivec-vector-views-g-alvevi-ads}@anchor{328}@anchor{gnat_rm/the_gnat_library id43}@anchor{329}
 @section @code{GNAT.Altivec.Vector_Views} (@code{g-alvevi.ads})
 
 
@@ -23435,7 +23463,7 @@ vector elements and provides a simple way to initialize vector
 objects.
 
 @node GNAT Array_Split g-arrspl ads,GNAT AWK g-awk ads,GNAT Altivec Vector_Views g-alvevi ads,The GNAT Library
-@anchor{gnat_rm/the_gnat_library gnat-array-split-g-arrspl-ads}@anchor{328}@anchor{gnat_rm/the_gnat_library id44}@anchor{329}
+@anchor{gnat_rm/the_gnat_library gnat-array-split-g-arrspl-ads}@anchor{32a}@anchor{gnat_rm/the_gnat_library id44}@anchor{32b}
 @section @code{GNAT.Array_Split} (@code{g-arrspl.ads})
 
 
@@ -23448,7 +23476,7 @@ an array wherever the separators appear, and provide direct access
 to the resulting slices.
 
 @node GNAT AWK g-awk ads,GNAT Bind_Environment g-binenv ads,GNAT Array_Split g-arrspl ads,The GNAT Library
-@anchor{gnat_rm/the_gnat_library id45}@anchor{32a}@anchor{gnat_rm/the_gnat_library gnat-awk-g-awk-ads}@anchor{32b}
+@anchor{gnat_rm/the_gnat_library id45}@anchor{32c}@anchor{gnat_rm/the_gnat_library gnat-awk-g-awk-ads}@anchor{32d}
 @section @code{GNAT.AWK} (@code{g-awk.ads})
 
 
@@ -23463,7 +23491,7 @@ or more files containing formatted data.  The file is viewed as a database
 where each record is a line and a field is a data element in this line.
 
 @node GNAT Bind_Environment g-binenv ads,GNAT Branch_Prediction g-brapre ads,GNAT AWK g-awk ads,The GNAT Library
-@anchor{gnat_rm/the_gnat_library id46}@anchor{32c}@anchor{gnat_rm/the_gnat_library gnat-bind-environment-g-binenv-ads}@anchor{32d}
+@anchor{gnat_rm/the_gnat_library id46}@anchor{32e}@anchor{gnat_rm/the_gnat_library gnat-bind-environment-g-binenv-ads}@anchor{32f}
 @section @code{GNAT.Bind_Environment} (@code{g-binenv.ads})
 
 
@@ -23476,7 +23504,7 @@ These associations can be specified using the @code{-V} binder command
 line switch.
 
 @node GNAT Branch_Prediction g-brapre ads,GNAT Bounded_Buffers g-boubuf ads,GNAT Bind_Environment g-binenv ads,The GNAT Library
-@anchor{gnat_rm/the_gnat_library id47}@anchor{32e}@anchor{gnat_rm/the_gnat_library gnat-branch-prediction-g-brapre-ads}@anchor{32f}
+@anchor{gnat_rm/the_gnat_library id47}@anchor{330}@anchor{gnat_rm/the_gnat_library gnat-branch-prediction-g-brapre-ads}@anchor{331}
 @section @code{GNAT.Branch_Prediction} (@code{g-brapre.ads})
 
 
@@ -23487,7 +23515,7 @@ line switch.
 Provides routines giving hints to the branch predictor of the code generator.
 
 @node GNAT Bounded_Buffers g-boubuf ads,GNAT Bounded_Mailboxes g-boumai ads,GNAT Branch_Prediction g-brapre ads,The GNAT Library
-@anchor{gnat_rm/the_gnat_library gnat-bounded-buffers-g-boubuf-ads}@anchor{330}@anchor{gnat_rm/the_gnat_library id48}@anchor{331}
+@anchor{gnat_rm/the_gnat_library gnat-bounded-buffers-g-boubuf-ads}@anchor{332}@anchor{gnat_rm/the_gnat_library id48}@anchor{333}
 @section @code{GNAT.Bounded_Buffers} (@code{g-boubuf.ads})
 
 
@@ -23502,7 +23530,7 @@ useful directly or as parts of the implementations of other abstractions,
 such as mailboxes.
 
 @node GNAT Bounded_Mailboxes g-boumai ads,GNAT Bubble_Sort g-bubsor ads,GNAT Bounded_Buffers g-boubuf ads,The GNAT Library
-@anchor{gnat_rm/the_gnat_library gnat-bounded-mailboxes-g-boumai-ads}@anchor{332}@anchor{gnat_rm/the_gnat_library id49}@anchor{333}
+@anchor{gnat_rm/the_gnat_library gnat-bounded-mailboxes-g-boumai-ads}@anchor{334}@anchor{gnat_rm/the_gnat_library id49}@anchor{335}
 @section @code{GNAT.Bounded_Mailboxes} (@code{g-boumai.ads})
 
 
@@ -23515,7 +23543,7 @@ such as mailboxes.
 Provides a thread-safe asynchronous intertask mailbox communication facility.
 
 @node GNAT Bubble_Sort g-bubsor ads,GNAT Bubble_Sort_A g-busora ads,GNAT Bounded_Mailboxes g-boumai ads,The GNAT Library
-@anchor{gnat_rm/the_gnat_library gnat-bubble-sort-g-bubsor-ads}@anchor{334}@anchor{gnat_rm/the_gnat_library id50}@anchor{335}
+@anchor{gnat_rm/the_gnat_library gnat-bubble-sort-g-bubsor-ads}@anchor{336}@anchor{gnat_rm/the_gnat_library id50}@anchor{337}
 @section @code{GNAT.Bubble_Sort} (@code{g-bubsor.ads})
 
 
@@ -23530,7 +23558,7 @@ data items.  Exchange and comparison procedures are provided by passing
 access-to-procedure values.
 
 @node GNAT Bubble_Sort_A g-busora ads,GNAT Bubble_Sort_G g-busorg ads,GNAT Bubble_Sort g-bubsor ads,The GNAT Library
-@anchor{gnat_rm/the_gnat_library id51}@anchor{336}@anchor{gnat_rm/the_gnat_library gnat-bubble-sort-a-g-busora-ads}@anchor{337}
+@anchor{gnat_rm/the_gnat_library id51}@anchor{338}@anchor{gnat_rm/the_gnat_library gnat-bubble-sort-a-g-busora-ads}@anchor{339}
 @section @code{GNAT.Bubble_Sort_A} (@code{g-busora.ads})
 
 
@@ -23546,7 +23574,7 @@ access-to-procedure values. This is an older version, retained for
 compatibility. Usually @code{GNAT.Bubble_Sort} will be preferable.
 
 @node GNAT Bubble_Sort_G g-busorg ads,GNAT Byte_Order_Mark g-byorma ads,GNAT Bubble_Sort_A g-busora ads,The GNAT Library
-@anchor{gnat_rm/the_gnat_library gnat-bubble-sort-g-g-busorg-ads}@anchor{338}@anchor{gnat_rm/the_gnat_library id52}@anchor{339}
+@anchor{gnat_rm/the_gnat_library gnat-bubble-sort-g-g-busorg-ads}@anchor{33a}@anchor{gnat_rm/the_gnat_library id52}@anchor{33b}
 @section @code{GNAT.Bubble_Sort_G} (@code{g-busorg.ads})
 
 
@@ -23562,7 +23590,7 @@ if the procedures can be inlined, at the expense of duplicating code for
 multiple instantiations.
 
 @node GNAT Byte_Order_Mark g-byorma ads,GNAT Byte_Swapping g-bytswa ads,GNAT Bubble_Sort_G g-busorg ads,The GNAT Library
-@anchor{gnat_rm/the_gnat_library gnat-byte-order-mark-g-byorma-ads}@anchor{33a}@anchor{gnat_rm/the_gnat_library id53}@anchor{33b}
+@anchor{gnat_rm/the_gnat_library gnat-byte-order-mark-g-byorma-ads}@anchor{33c}@anchor{gnat_rm/the_gnat_library id53}@anchor{33d}
 @section @code{GNAT.Byte_Order_Mark} (@code{g-byorma.ads})
 
 
@@ -23578,7 +23606,7 @@ the encoding of the string. The routine includes detection of special XML
 sequences for various UCS input formats.
 
 @node GNAT Byte_Swapping g-bytswa ads,GNAT Calendar g-calend ads,GNAT Byte_Order_Mark g-byorma ads,The GNAT Library
-@anchor{gnat_rm/the_gnat_library gnat-byte-swapping-g-bytswa-ads}@anchor{33c}@anchor{gnat_rm/the_gnat_library id54}@anchor{33d}
+@anchor{gnat_rm/the_gnat_library gnat-byte-swapping-g-bytswa-ads}@anchor{33e}@anchor{gnat_rm/the_gnat_library id54}@anchor{33f}
 @section @code{GNAT.Byte_Swapping} (@code{g-bytswa.ads})
 
 
@@ -23592,7 +23620,7 @@ General routines for swapping the bytes in 2-, 4-, and 8-byte quantities.
 Machine-specific implementations are available in some cases.
 
 @node GNAT Calendar g-calend ads,GNAT Calendar Time_IO g-catiio ads,GNAT Byte_Swapping g-bytswa ads,The GNAT Library
-@anchor{gnat_rm/the_gnat_library id55}@anchor{33e}@anchor{gnat_rm/the_gnat_library gnat-calendar-g-calend-ads}@anchor{33f}
+@anchor{gnat_rm/the_gnat_library id55}@anchor{340}@anchor{gnat_rm/the_gnat_library gnat-calendar-g-calend-ads}@anchor{341}
 @section @code{GNAT.Calendar} (@code{g-calend.ads})
 
 
@@ -23606,7 +23634,7 @@ Also provides conversion of @code{Ada.Calendar.Time} values to and from the
 C @code{timeval} format.
 
 @node GNAT Calendar Time_IO g-catiio ads,GNAT CRC32 g-crc32 ads,GNAT Calendar g-calend ads,The GNAT Library
-@anchor{gnat_rm/the_gnat_library id56}@anchor{340}@anchor{gnat_rm/the_gnat_library gnat-calendar-time-io-g-catiio-ads}@anchor{341}
+@anchor{gnat_rm/the_gnat_library id56}@anchor{342}@anchor{gnat_rm/the_gnat_library gnat-calendar-time-io-g-catiio-ads}@anchor{343}
 @section @code{GNAT.Calendar.Time_IO} (@code{g-catiio.ads})
 
 
@@ -23617,7 +23645,7 @@ C @code{timeval} format.
 @geindex GNAT.Calendar.Time_IO (g-catiio.ads)
 
 @node GNAT CRC32 g-crc32 ads,GNAT Case_Util g-casuti ads,GNAT Calendar Time_IO g-catiio ads,The GNAT Library
-@anchor{gnat_rm/the_gnat_library id57}@anchor{342}@anchor{gnat_rm/the_gnat_library gnat-crc32-g-crc32-ads}@anchor{343}
+@anchor{gnat_rm/the_gnat_library id57}@anchor{344}@anchor{gnat_rm/the_gnat_library gnat-crc32-g-crc32-ads}@anchor{345}
 @section @code{GNAT.CRC32} (@code{g-crc32.ads})
 
 
@@ -23634,7 +23662,7 @@ of this algorithm see
 Aug. 1988.  Sarwate, D.V.
 
 @node GNAT Case_Util g-casuti ads,GNAT CGI g-cgi ads,GNAT CRC32 g-crc32 ads,The GNAT Library
-@anchor{gnat_rm/the_gnat_library id58}@anchor{344}@anchor{gnat_rm/the_gnat_library gnat-case-util-g-casuti-ads}@anchor{345}
+@anchor{gnat_rm/the_gnat_library id58}@anchor{346}@anchor{gnat_rm/the_gnat_library gnat-case-util-g-casuti-ads}@anchor{347}
 @section @code{GNAT.Case_Util} (@code{g-casuti.ads})
 
 
@@ -23649,7 +23677,7 @@ without the overhead of the full casing tables
 in @code{Ada.Characters.Handling}.
 
 @node GNAT CGI g-cgi ads,GNAT CGI Cookie g-cgicoo ads,GNAT Case_Util g-casuti ads,The GNAT Library
-@anchor{gnat_rm/the_gnat_library id59}@anchor{346}@anchor{gnat_rm/the_gnat_library gnat-cgi-g-cgi-ads}@anchor{347}
+@anchor{gnat_rm/the_gnat_library id59}@anchor{348}@anchor{gnat_rm/the_gnat_library gnat-cgi-g-cgi-ads}@anchor{349}
 @section @code{GNAT.CGI} (@code{g-cgi.ads})
 
 
@@ -23664,7 +23692,7 @@ builds a table whose index is the key and provides some services to deal
 with this table.
 
 @node GNAT CGI Cookie g-cgicoo ads,GNAT CGI Debug g-cgideb ads,GNAT CGI g-cgi ads,The GNAT Library
-@anchor{gnat_rm/the_gnat_library gnat-cgi-cookie-g-cgicoo-ads}@anchor{348}@anchor{gnat_rm/the_gnat_library id60}@anchor{349}
+@anchor{gnat_rm/the_gnat_library gnat-cgi-cookie-g-cgicoo-ads}@anchor{34a}@anchor{gnat_rm/the_gnat_library id60}@anchor{34b}
 @section @code{GNAT.CGI.Cookie} (@code{g-cgicoo.ads})
 
 
@@ -23679,7 +23707,7 @@ Common Gateway Interface (CGI).  It exports services to deal with Web
 cookies (piece of information kept in the Web client software).
 
 @node GNAT CGI Debug g-cgideb ads,GNAT Command_Line g-comlin ads,GNAT CGI Cookie g-cgicoo ads,The GNAT Library
-@anchor{gnat_rm/the_gnat_library gnat-cgi-debug-g-cgideb-ads}@anchor{34a}@anchor{gnat_rm/the_gnat_library id61}@anchor{34b}
+@anchor{gnat_rm/the_gnat_library gnat-cgi-debug-g-cgideb-ads}@anchor{34c}@anchor{gnat_rm/the_gnat_library id61}@anchor{34d}
 @section @code{GNAT.CGI.Debug} (@code{g-cgideb.ads})
 
 
@@ -23691,7 +23719,7 @@ This is a package to help debugging CGI (Common Gateway Interface)
 programs written in Ada.
 
 @node GNAT Command_Line g-comlin ads,GNAT Compiler_Version g-comver ads,GNAT CGI Debug g-cgideb ads,The GNAT Library
-@anchor{gnat_rm/the_gnat_library id62}@anchor{34c}@anchor{gnat_rm/the_gnat_library gnat-command-line-g-comlin-ads}@anchor{34d}
+@anchor{gnat_rm/the_gnat_library id62}@anchor{34e}@anchor{gnat_rm/the_gnat_library gnat-command-line-g-comlin-ads}@anchor{34f}
 @section @code{GNAT.Command_Line} (@code{g-comlin.ads})
 
 
@@ -23704,7 +23732,7 @@ including the ability to scan for named switches with optional parameters
 and expand file names using wildcard notations.
 
 @node GNAT Compiler_Version g-comver ads,GNAT Ctrl_C g-ctrl_c ads,GNAT Command_Line g-comlin ads,The GNAT Library
-@anchor{gnat_rm/the_gnat_library gnat-compiler-version-g-comver-ads}@anchor{34e}@anchor{gnat_rm/the_gnat_library id63}@anchor{34f}
+@anchor{gnat_rm/the_gnat_library gnat-compiler-version-g-comver-ads}@anchor{350}@anchor{gnat_rm/the_gnat_library id63}@anchor{351}
 @section @code{GNAT.Compiler_Version} (@code{g-comver.ads})
 
 
@@ -23722,7 +23750,7 @@ of the compiler if a consistent tool set is used to compile all units
 of a partition).
 
 @node GNAT Ctrl_C g-ctrl_c ads,GNAT Current_Exception g-curexc ads,GNAT Compiler_Version g-comver ads,The GNAT Library
-@anchor{gnat_rm/the_gnat_library id64}@anchor{350}@anchor{gnat_rm/the_gnat_library gnat-ctrl-c-g-ctrl-c-ads}@anchor{351}
+@anchor{gnat_rm/the_gnat_library id64}@anchor{352}@anchor{gnat_rm/the_gnat_library gnat-ctrl-c-g-ctrl-c-ads}@anchor{353}
 @section @code{GNAT.Ctrl_C} (@code{g-ctrl_c.ads})
 
 
@@ -23733,7 +23761,7 @@ of a partition).
 Provides a simple interface to handle Ctrl-C keyboard events.
 
 @node GNAT Current_Exception g-curexc ads,GNAT Debug_Pools g-debpoo ads,GNAT Ctrl_C g-ctrl_c ads,The GNAT Library
-@anchor{gnat_rm/the_gnat_library id65}@anchor{352}@anchor{gnat_rm/the_gnat_library gnat-current-exception-g-curexc-ads}@anchor{353}
+@anchor{gnat_rm/the_gnat_library id65}@anchor{354}@anchor{gnat_rm/the_gnat_library gnat-current-exception-g-curexc-ads}@anchor{355}
 @section @code{GNAT.Current_Exception} (@code{g-curexc.ads})
 
 
@@ -23750,7 +23778,7 @@ This is particularly useful in simulating typical facilities for
 obtaining information about exceptions provided by Ada 83 compilers.
 
 @node GNAT Debug_Pools g-debpoo ads,GNAT Debug_Utilities g-debuti ads,GNAT Current_Exception g-curexc ads,The GNAT Library
-@anchor{gnat_rm/the_gnat_library gnat-debug-pools-g-debpoo-ads}@anchor{354}@anchor{gnat_rm/the_gnat_library id66}@anchor{355}
+@anchor{gnat_rm/the_gnat_library gnat-debug-pools-g-debpoo-ads}@anchor{356}@anchor{gnat_rm/the_gnat_library id66}@anchor{357}
 @section @code{GNAT.Debug_Pools} (@code{g-debpoo.ads})
 
 
@@ -23767,7 +23795,7 @@ problems.
 See @code{The GNAT Debug_Pool Facility} section in the @cite{GNAT User's Guide}.
 
 @node GNAT Debug_Utilities g-debuti ads,GNAT Decode_String g-decstr ads,GNAT Debug_Pools g-debpoo ads,The GNAT Library
-@anchor{gnat_rm/the_gnat_library gnat-debug-utilities-g-debuti-ads}@anchor{356}@anchor{gnat_rm/the_gnat_library id67}@anchor{357}
+@anchor{gnat_rm/the_gnat_library gnat-debug-utilities-g-debuti-ads}@anchor{358}@anchor{gnat_rm/the_gnat_library id67}@anchor{359}
 @section @code{GNAT.Debug_Utilities} (@code{g-debuti.ads})
 
 
@@ -23780,7 +23808,7 @@ to and from string images of address values. Supports both C and Ada formats
 for hexadecimal literals.
 
 @node GNAT Decode_String g-decstr ads,GNAT Decode_UTF8_String g-deutst ads,GNAT Debug_Utilities g-debuti ads,The GNAT Library
-@anchor{gnat_rm/the_gnat_library gnat-decode-string-g-decstr-ads}@anchor{358}@anchor{gnat_rm/the_gnat_library id68}@anchor{359}
+@anchor{gnat_rm/the_gnat_library gnat-decode-string-g-decstr-ads}@anchor{35a}@anchor{gnat_rm/the_gnat_library id68}@anchor{35b}
 @section @code{GNAT.Decode_String} (@code{g-decstr.ads})
 
 
@@ -23804,7 +23832,7 @@ Useful in conjunction with Unicode character coding. Note there is a
 preinstantiation for UTF-8. See next entry.
 
 @node GNAT Decode_UTF8_String g-deutst ads,GNAT Directory_Operations g-dirope ads,GNAT Decode_String g-decstr ads,The GNAT Library
-@anchor{gnat_rm/the_gnat_library gnat-decode-utf8-string-g-deutst-ads}@anchor{35a}@anchor{gnat_rm/the_gnat_library id69}@anchor{35b}
+@anchor{gnat_rm/the_gnat_library gnat-decode-utf8-string-g-deutst-ads}@anchor{35c}@anchor{gnat_rm/the_gnat_library id69}@anchor{35d}
 @section @code{GNAT.Decode_UTF8_String} (@code{g-deutst.ads})
 
 
@@ -23825,7 +23853,7 @@ preinstantiation for UTF-8. See next entry.
 A preinstantiation of GNAT.Decode_Strings for UTF-8 encoding.
 
 @node GNAT Directory_Operations g-dirope ads,GNAT Directory_Operations Iteration g-diopit ads,GNAT Decode_UTF8_String g-deutst ads,The GNAT Library
-@anchor{gnat_rm/the_gnat_library id70}@anchor{35c}@anchor{gnat_rm/the_gnat_library gnat-directory-operations-g-dirope-ads}@anchor{35d}
+@anchor{gnat_rm/the_gnat_library id70}@anchor{35e}@anchor{gnat_rm/the_gnat_library gnat-directory-operations-g-dirope-ads}@anchor{35f}
 @section @code{GNAT.Directory_Operations} (@code{g-dirope.ads})
 
 
@@ -23838,7 +23866,7 @@ the current directory, making new directories, and scanning the files in a
 directory.
 
 @node GNAT Directory_Operations Iteration g-diopit ads,GNAT Dynamic_HTables g-dynhta ads,GNAT Directory_Operations g-dirope ads,The GNAT Library
-@anchor{gnat_rm/the_gnat_library id71}@anchor{35e}@anchor{gnat_rm/the_gnat_library gnat-directory-operations-iteration-g-diopit-ads}@anchor{35f}
+@anchor{gnat_rm/the_gnat_library id71}@anchor{360}@anchor{gnat_rm/the_gnat_library gnat-directory-operations-iteration-g-diopit-ads}@anchor{361}
 @section @code{GNAT.Directory_Operations.Iteration} (@code{g-diopit.ads})
 
 
@@ -23850,7 +23878,7 @@ A child unit of GNAT.Directory_Operations providing additional operations
 for iterating through directories.
 
 @node GNAT Dynamic_HTables g-dynhta ads,GNAT Dynamic_Tables g-dyntab ads,GNAT Directory_Operations Iteration g-diopit ads,The GNAT Library
-@anchor{gnat_rm/the_gnat_library id72}@anchor{360}@anchor{gnat_rm/the_gnat_library gnat-dynamic-htables-g-dynhta-ads}@anchor{361}
+@anchor{gnat_rm/the_gnat_library id72}@anchor{362}@anchor{gnat_rm/the_gnat_library gnat-dynamic-htables-g-dynhta-ads}@anchor{363}
 @section @code{GNAT.Dynamic_HTables} (@code{g-dynhta.ads})
 
 
@@ -23868,7 +23896,7 @@ dynamic instances of the hash table, while an instantiation of
 @code{GNAT.HTable} creates a single instance of the hash table.
 
 @node GNAT Dynamic_Tables g-dyntab ads,GNAT Encode_String g-encstr ads,GNAT Dynamic_HTables g-dynhta ads,The GNAT Library
-@anchor{gnat_rm/the_gnat_library gnat-dynamic-tables-g-dyntab-ads}@anchor{362}@anchor{gnat_rm/the_gnat_library id73}@anchor{363}
+@anchor{gnat_rm/the_gnat_library gnat-dynamic-tables-g-dyntab-ads}@anchor{364}@anchor{gnat_rm/the_gnat_library id73}@anchor{365}
 @section @code{GNAT.Dynamic_Tables} (@code{g-dyntab.ads})
 
 
@@ -23888,7 +23916,7 @@ dynamic instances of the table, while an instantiation of
 @code{GNAT.Table} creates a single instance of the table type.
 
 @node GNAT Encode_String g-encstr ads,GNAT Encode_UTF8_String g-enutst ads,GNAT Dynamic_Tables g-dyntab ads,The GNAT Library
-@anchor{gnat_rm/the_gnat_library id74}@anchor{364}@anchor{gnat_rm/the_gnat_library gnat-encode-string-g-encstr-ads}@anchor{365}
+@anchor{gnat_rm/the_gnat_library id74}@anchor{366}@anchor{gnat_rm/the_gnat_library gnat-encode-string-g-encstr-ads}@anchor{367}
 @section @code{GNAT.Encode_String} (@code{g-encstr.ads})
 
 
@@ -23910,7 +23938,7 @@ encoding method. Useful in conjunction with Unicode character coding.
 Note there is a preinstantiation for UTF-8. See next entry.
 
 @node GNAT Encode_UTF8_String g-enutst ads,GNAT Exception_Actions g-excact ads,GNAT Encode_String g-encstr ads,The GNAT Library
-@anchor{gnat_rm/the_gnat_library gnat-encode-utf8-string-g-enutst-ads}@anchor{366}@anchor{gnat_rm/the_gnat_library id75}@anchor{367}
+@anchor{gnat_rm/the_gnat_library gnat-encode-utf8-string-g-enutst-ads}@anchor{368}@anchor{gnat_rm/the_gnat_library id75}@anchor{369}
 @section @code{GNAT.Encode_UTF8_String} (@code{g-enutst.ads})
 
 
@@ -23931,7 +23959,7 @@ Note there is a preinstantiation for UTF-8. See next entry.
 A preinstantiation of GNAT.Encode_Strings for UTF-8 encoding.
 
 @node GNAT Exception_Actions g-excact ads,GNAT Exception_Traces g-exctra ads,GNAT Encode_UTF8_String g-enutst ads,The GNAT Library
-@anchor{gnat_rm/the_gnat_library gnat-exception-actions-g-excact-ads}@anchor{368}@anchor{gnat_rm/the_gnat_library id76}@anchor{369}
+@anchor{gnat_rm/the_gnat_library gnat-exception-actions-g-excact-ads}@anchor{36a}@anchor{gnat_rm/the_gnat_library id76}@anchor{36b}
 @section @code{GNAT.Exception_Actions} (@code{g-excact.ads})
 
 
@@ -23944,7 +23972,7 @@ for specific exceptions, or when any exception is raised. This
 can be used for instance to force a core dump to ease debugging.
 
 @node GNAT Exception_Traces g-exctra ads,GNAT Exceptions g-except ads,GNAT Exception_Actions g-excact ads,The GNAT Library
-@anchor{gnat_rm/the_gnat_library gnat-exception-traces-g-exctra-ads}@anchor{36a}@anchor{gnat_rm/the_gnat_library id77}@anchor{36b}
+@anchor{gnat_rm/the_gnat_library gnat-exception-traces-g-exctra-ads}@anchor{36c}@anchor{gnat_rm/the_gnat_library id77}@anchor{36d}
 @section @code{GNAT.Exception_Traces} (@code{g-exctra.ads})
 
 
@@ -23958,7 +23986,7 @@ Provides an interface allowing to control automatic output upon exception
 occurrences.
 
 @node GNAT Exceptions g-except ads,GNAT Expect g-expect ads,GNAT Exception_Traces g-exctra ads,The GNAT Library
-@anchor{gnat_rm/the_gnat_library id78}@anchor{36c}@anchor{gnat_rm/the_gnat_library gnat-exceptions-g-except-ads}@anchor{36d}
+@anchor{gnat_rm/the_gnat_library id78}@anchor{36e}@anchor{gnat_rm/the_gnat_library gnat-exceptions-g-except-ads}@anchor{36f}
 @section @code{GNAT.Exceptions} (@code{g-except.ads})
 
 
@@ -23979,7 +24007,7 @@ predefined exceptions, and for example allow raising
 @code{Constraint_Error} with a message from a pure subprogram.
 
 @node GNAT Expect g-expect ads,GNAT Expect TTY g-exptty ads,GNAT Exceptions g-except ads,The GNAT Library
-@anchor{gnat_rm/the_gnat_library id79}@anchor{36e}@anchor{gnat_rm/the_gnat_library gnat-expect-g-expect-ads}@anchor{36f}
+@anchor{gnat_rm/the_gnat_library id79}@anchor{370}@anchor{gnat_rm/the_gnat_library gnat-expect-g-expect-ads}@anchor{371}
 @section @code{GNAT.Expect} (@code{g-expect.ads})
 
 
@@ -23995,7 +24023,7 @@ It is not implemented for cross ports, and in particular is not
 implemented for VxWorks or LynxOS.
 
 @node GNAT Expect TTY g-exptty ads,GNAT Float_Control g-flocon ads,GNAT Expect g-expect ads,The GNAT Library
-@anchor{gnat_rm/the_gnat_library id80}@anchor{370}@anchor{gnat_rm/the_gnat_library gnat-expect-tty-g-exptty-ads}@anchor{371}
+@anchor{gnat_rm/the_gnat_library id80}@anchor{372}@anchor{gnat_rm/the_gnat_library gnat-expect-tty-g-exptty-ads}@anchor{373}
 @section @code{GNAT.Expect.TTY} (@code{g-exptty.ads})
 
 
@@ -24007,7 +24035,7 @@ ports. It is not implemented for cross ports, and
 in particular is not implemented for VxWorks or LynxOS.
 
 @node GNAT Float_Control g-flocon ads,GNAT Formatted_String g-forstr ads,GNAT Expect TTY g-exptty ads,The GNAT Library
-@anchor{gnat_rm/the_gnat_library id81}@anchor{372}@anchor{gnat_rm/the_gnat_library gnat-float-control-g-flocon-ads}@anchor{373}
+@anchor{gnat_rm/the_gnat_library id81}@anchor{374}@anchor{gnat_rm/the_gnat_library gnat-float-control-g-flocon-ads}@anchor{375}
 @section @code{GNAT.Float_Control} (@code{g-flocon.ads})
 
 
@@ -24021,7 +24049,7 @@ library calls may cause this mode to be modified, and the Reset procedure
 in this package can be used to reestablish the required mode.
 
 @node GNAT Formatted_String g-forstr ads,GNAT Heap_Sort g-heasor ads,GNAT Float_Control g-flocon ads,The GNAT Library
-@anchor{gnat_rm/the_gnat_library id82}@anchor{374}@anchor{gnat_rm/the_gnat_library gnat-formatted-string-g-forstr-ads}@anchor{375}
+@anchor{gnat_rm/the_gnat_library id82}@anchor{376}@anchor{gnat_rm/the_gnat_library gnat-formatted-string-g-forstr-ads}@anchor{377}
 @section @code{GNAT.Formatted_String} (@code{g-forstr.ads})
 
 
@@ -24036,7 +24064,7 @@ derived from Integer, Float or enumerations as values for the
 formatted string.
 
 @node GNAT Heap_Sort g-heasor ads,GNAT Heap_Sort_A g-hesora ads,GNAT Formatted_String g-forstr ads,The GNAT Library
-@anchor{gnat_rm/the_gnat_library id83}@anchor{376}@anchor{gnat_rm/the_gnat_library gnat-heap-sort-g-heasor-ads}@anchor{377}
+@anchor{gnat_rm/the_gnat_library id83}@anchor{378}@anchor{gnat_rm/the_gnat_library gnat-heap-sort-g-heasor-ads}@anchor{379}
 @section @code{GNAT.Heap_Sort} (@code{g-heasor.ads})
 
 
@@ -24050,7 +24078,7 @@ access-to-procedure values.  The algorithm used is a modified heap sort
 that performs approximately N*log(N) comparisons in the worst case.
 
 @node GNAT Heap_Sort_A g-hesora ads,GNAT Heap_Sort_G g-hesorg ads,GNAT Heap_Sort g-heasor ads,The GNAT Library
-@anchor{gnat_rm/the_gnat_library gnat-heap-sort-a-g-hesora-ads}@anchor{378}@anchor{gnat_rm/the_gnat_library id84}@anchor{379}
+@anchor{gnat_rm/the_gnat_library gnat-heap-sort-a-g-hesora-ads}@anchor{37a}@anchor{gnat_rm/the_gnat_library id84}@anchor{37b}
 @section @code{GNAT.Heap_Sort_A} (@code{g-hesora.ads})
 
 
@@ -24066,7 +24094,7 @@ This differs from @code{GNAT.Heap_Sort} in having a less convenient
 interface, but may be slightly more efficient.
 
 @node GNAT Heap_Sort_G g-hesorg ads,GNAT HTable g-htable ads,GNAT Heap_Sort_A g-hesora ads,The GNAT Library
-@anchor{gnat_rm/the_gnat_library id85}@anchor{37a}@anchor{gnat_rm/the_gnat_library gnat-heap-sort-g-g-hesorg-ads}@anchor{37b}
+@anchor{gnat_rm/the_gnat_library id85}@anchor{37c}@anchor{gnat_rm/the_gnat_library gnat-heap-sort-g-g-hesorg-ads}@anchor{37d}
 @section @code{GNAT.Heap_Sort_G} (@code{g-hesorg.ads})
 
 
@@ -24080,7 +24108,7 @@ if the procedures can be inlined, at the expense of duplicating code for
 multiple instantiations.
 
 @node GNAT HTable g-htable ads,GNAT IO g-io ads,GNAT Heap_Sort_G g-hesorg ads,The GNAT Library
-@anchor{gnat_rm/the_gnat_library id86}@anchor{37c}@anchor{gnat_rm/the_gnat_library gnat-htable-g-htable-ads}@anchor{37d}
+@anchor{gnat_rm/the_gnat_library id86}@anchor{37e}@anchor{gnat_rm/the_gnat_library gnat-htable-g-htable-ads}@anchor{37f}
 @section @code{GNAT.HTable} (@code{g-htable.ads})
 
 
@@ -24093,7 +24121,7 @@ data.  Provides two approaches, one a simple static approach, and the other
 allowing arbitrary dynamic hash tables.
 
 @node GNAT IO g-io ads,GNAT IO_Aux g-io_aux ads,GNAT HTable g-htable ads,The GNAT Library
-@anchor{gnat_rm/the_gnat_library id87}@anchor{37e}@anchor{gnat_rm/the_gnat_library gnat-io-g-io-ads}@anchor{37f}
+@anchor{gnat_rm/the_gnat_library id87}@anchor{380}@anchor{gnat_rm/the_gnat_library gnat-io-g-io-ads}@anchor{381}
 @section @code{GNAT.IO} (@code{g-io.ads})
 
 
@@ -24109,7 +24137,7 @@ Standard_Input, and writing characters, strings and integers to either
 Standard_Output or Standard_Error.
 
 @node GNAT IO_Aux g-io_aux ads,GNAT Lock_Files g-locfil ads,GNAT IO g-io ads,The GNAT Library
-@anchor{gnat_rm/the_gnat_library id88}@anchor{380}@anchor{gnat_rm/the_gnat_library gnat-io-aux-g-io-aux-ads}@anchor{381}
+@anchor{gnat_rm/the_gnat_library id88}@anchor{382}@anchor{gnat_rm/the_gnat_library gnat-io-aux-g-io-aux-ads}@anchor{383}
 @section @code{GNAT.IO_Aux} (@code{g-io_aux.ads})
 
 
@@ -24123,7 +24151,7 @@ Provides some auxiliary functions for use with Text_IO, including a test
 for whether a file exists, and functions for reading a line of text.
 
 @node GNAT Lock_Files g-locfil ads,GNAT MBBS_Discrete_Random g-mbdira ads,GNAT IO_Aux g-io_aux ads,The GNAT Library
-@anchor{gnat_rm/the_gnat_library id89}@anchor{382}@anchor{gnat_rm/the_gnat_library gnat-lock-files-g-locfil-ads}@anchor{383}
+@anchor{gnat_rm/the_gnat_library id89}@anchor{384}@anchor{gnat_rm/the_gnat_library gnat-lock-files-g-locfil-ads}@anchor{385}
 @section @code{GNAT.Lock_Files} (@code{g-locfil.ads})
 
 
@@ -24137,7 +24165,7 @@ Provides a general interface for using files as locks.  Can be used for
 providing program level synchronization.
 
 @node GNAT MBBS_Discrete_Random g-mbdira ads,GNAT MBBS_Float_Random g-mbflra ads,GNAT Lock_Files g-locfil ads,The GNAT Library
-@anchor{gnat_rm/the_gnat_library id90}@anchor{384}@anchor{gnat_rm/the_gnat_library gnat-mbbs-discrete-random-g-mbdira-ads}@anchor{385}
+@anchor{gnat_rm/the_gnat_library id90}@anchor{386}@anchor{gnat_rm/the_gnat_library gnat-mbbs-discrete-random-g-mbdira-ads}@anchor{387}
 @section @code{GNAT.MBBS_Discrete_Random} (@code{g-mbdira.ads})
 
 
@@ -24149,7 +24177,7 @@ The original implementation of @code{Ada.Numerics.Discrete_Random}.  Uses
 a modified version of the Blum-Blum-Shub generator.
 
 @node GNAT MBBS_Float_Random g-mbflra ads,GNAT MD5 g-md5 ads,GNAT MBBS_Discrete_Random g-mbdira ads,The GNAT Library
-@anchor{gnat_rm/the_gnat_library id91}@anchor{386}@anchor{gnat_rm/the_gnat_library gnat-mbbs-float-random-g-mbflra-ads}@anchor{387}
+@anchor{gnat_rm/the_gnat_library id91}@anchor{388}@anchor{gnat_rm/the_gnat_library gnat-mbbs-float-random-g-mbflra-ads}@anchor{389}
 @section @code{GNAT.MBBS_Float_Random} (@code{g-mbflra.ads})
 
 
@@ -24161,7 +24189,7 @@ The original implementation of @code{Ada.Numerics.Float_Random}.  Uses
 a modified version of the Blum-Blum-Shub generator.
 
 @node GNAT MD5 g-md5 ads,GNAT Memory_Dump g-memdum ads,GNAT MBBS_Float_Random g-mbflra ads,The GNAT Library
-@anchor{gnat_rm/the_gnat_library id92}@anchor{388}@anchor{gnat_rm/the_gnat_library gnat-md5-g-md5-ads}@anchor{389}
+@anchor{gnat_rm/the_gnat_library id92}@anchor{38a}@anchor{gnat_rm/the_gnat_library gnat-md5-g-md5-ads}@anchor{38b}
 @section @code{GNAT.MD5} (@code{g-md5.ads})
 
 
@@ -24174,7 +24202,7 @@ the HMAC-MD5 message authentication function as described in RFC 2104 and
 FIPS PUB 198.
 
 @node GNAT Memory_Dump g-memdum ads,GNAT Most_Recent_Exception g-moreex ads,GNAT MD5 g-md5 ads,The GNAT Library
-@anchor{gnat_rm/the_gnat_library id93}@anchor{38a}@anchor{gnat_rm/the_gnat_library gnat-memory-dump-g-memdum-ads}@anchor{38b}
+@anchor{gnat_rm/the_gnat_library id93}@anchor{38c}@anchor{gnat_rm/the_gnat_library gnat-memory-dump-g-memdum-ads}@anchor{38d}
 @section @code{GNAT.Memory_Dump} (@code{g-memdum.ads})
 
 
@@ -24187,7 +24215,7 @@ standard output or standard error files. Uses GNAT.IO for actual
 output.
 
 @node GNAT Most_Recent_Exception g-moreex ads,GNAT OS_Lib g-os_lib ads,GNAT Memory_Dump g-memdum ads,The GNAT Library
-@anchor{gnat_rm/the_gnat_library gnat-most-recent-exception-g-moreex-ads}@anchor{38c}@anchor{gnat_rm/the_gnat_library id94}@anchor{38d}
+@anchor{gnat_rm/the_gnat_library gnat-most-recent-exception-g-moreex-ads}@anchor{38e}@anchor{gnat_rm/the_gnat_library id94}@anchor{38f}
 @section @code{GNAT.Most_Recent_Exception} (@code{g-moreex.ads})
 
 
@@ -24201,7 +24229,7 @@ various logging purposes, including duplicating functionality of some
 Ada 83 implementation dependent extensions.
 
 @node GNAT OS_Lib g-os_lib ads,GNAT Perfect_Hash_Generators g-pehage ads,GNAT Most_Recent_Exception g-moreex ads,The GNAT Library
-@anchor{gnat_rm/the_gnat_library gnat-os-lib-g-os-lib-ads}@anchor{38e}@anchor{gnat_rm/the_gnat_library id95}@anchor{38f}
+@anchor{gnat_rm/the_gnat_library gnat-os-lib-g-os-lib-ads}@anchor{390}@anchor{gnat_rm/the_gnat_library id95}@anchor{391}
 @section @code{GNAT.OS_Lib} (@code{g-os_lib.ads})
 
 
@@ -24217,7 +24245,7 @@ including a portable spawn procedure, and access to environment variables
 and error return codes.
 
 @node GNAT Perfect_Hash_Generators g-pehage ads,GNAT Random_Numbers g-rannum ads,GNAT OS_Lib g-os_lib ads,The GNAT Library
-@anchor{gnat_rm/the_gnat_library gnat-perfect-hash-generators-g-pehage-ads}@anchor{390}@anchor{gnat_rm/the_gnat_library id96}@anchor{391}
+@anchor{gnat_rm/the_gnat_library gnat-perfect-hash-generators-g-pehage-ads}@anchor{392}@anchor{gnat_rm/the_gnat_library id96}@anchor{393}
 @section @code{GNAT.Perfect_Hash_Generators} (@code{g-pehage.ads})
 
 
@@ -24235,7 +24263,7 @@ hashcode are in the same order. These hashing functions are very
 convenient for use with realtime applications.
 
 @node GNAT Random_Numbers g-rannum ads,GNAT Regexp g-regexp ads,GNAT Perfect_Hash_Generators g-pehage ads,The GNAT Library
-@anchor{gnat_rm/the_gnat_library gnat-random-numbers-g-rannum-ads}@anchor{392}@anchor{gnat_rm/the_gnat_library id97}@anchor{393}
+@anchor{gnat_rm/the_gnat_library gnat-random-numbers-g-rannum-ads}@anchor{394}@anchor{gnat_rm/the_gnat_library id97}@anchor{395}
 @section @code{GNAT.Random_Numbers} (@code{g-rannum.ads})
 
 
@@ -24247,7 +24275,7 @@ Provides random number capabilities which extend those available in the
 standard Ada library and are more convenient to use.
 
 @node GNAT Regexp g-regexp ads,GNAT Registry g-regist ads,GNAT Random_Numbers g-rannum ads,The GNAT Library
-@anchor{gnat_rm/the_gnat_library id98}@anchor{394}@anchor{gnat_rm/the_gnat_library gnat-regexp-g-regexp-ads}@anchor{259}
+@anchor{gnat_rm/the_gnat_library id98}@anchor{396}@anchor{gnat_rm/the_gnat_library gnat-regexp-g-regexp-ads}@anchor{25b}
 @section @code{GNAT.Regexp} (@code{g-regexp.ads})
 
 
@@ -24263,7 +24291,7 @@ simplest of the three pattern matching packages provided, and is particularly
 suitable for 'file globbing' applications.
 
 @node GNAT Registry g-regist ads,GNAT Regpat g-regpat ads,GNAT Regexp g-regexp ads,The GNAT Library
-@anchor{gnat_rm/the_gnat_library id99}@anchor{395}@anchor{gnat_rm/the_gnat_library gnat-registry-g-regist-ads}@anchor{396}
+@anchor{gnat_rm/the_gnat_library id99}@anchor{397}@anchor{gnat_rm/the_gnat_library gnat-registry-g-regist-ads}@anchor{398}
 @section @code{GNAT.Registry} (@code{g-regist.ads})
 
 
@@ -24277,7 +24305,7 @@ registry API, but at a lower level of abstraction, refer to the Win32.Winreg
 package provided with the Win32Ada binding
 
 @node GNAT Regpat g-regpat ads,GNAT Rewrite_Data g-rewdat ads,GNAT Registry g-regist ads,The GNAT Library
-@anchor{gnat_rm/the_gnat_library id100}@anchor{397}@anchor{gnat_rm/the_gnat_library gnat-regpat-g-regpat-ads}@anchor{398}
+@anchor{gnat_rm/the_gnat_library id100}@anchor{399}@anchor{gnat_rm/the_gnat_library gnat-regpat-g-regpat-ads}@anchor{39a}
 @section @code{GNAT.Regpat} (@code{g-regpat.ads})
 
 
@@ -24292,7 +24320,7 @@ from the original V7 style regular expression library written in C by
 Henry Spencer (and binary compatible with this C library).
 
 @node GNAT Rewrite_Data g-rewdat ads,GNAT Secondary_Stack_Info g-sestin ads,GNAT Regpat g-regpat ads,The GNAT Library
-@anchor{gnat_rm/the_gnat_library id101}@anchor{399}@anchor{gnat_rm/the_gnat_library gnat-rewrite-data-g-rewdat-ads}@anchor{39a}
+@anchor{gnat_rm/the_gnat_library id101}@anchor{39b}@anchor{gnat_rm/the_gnat_library gnat-rewrite-data-g-rewdat-ads}@anchor{39c}
 @section @code{GNAT.Rewrite_Data} (@code{g-rewdat.ads})
 
 
@@ -24306,7 +24334,7 @@ full content to be processed is not loaded into memory all at once. This makes
 this interface usable for large files or socket streams.
 
 @node GNAT Secondary_Stack_Info g-sestin ads,GNAT Semaphores g-semaph ads,GNAT Rewrite_Data g-rewdat ads,The GNAT Library
-@anchor{gnat_rm/the_gnat_library gnat-secondary-stack-info-g-sestin-ads}@anchor{39b}@anchor{gnat_rm/the_gnat_library id102}@anchor{39c}
+@anchor{gnat_rm/the_gnat_library gnat-secondary-stack-info-g-sestin-ads}@anchor{39d}@anchor{gnat_rm/the_gnat_library id102}@anchor{39e}
 @section @code{GNAT.Secondary_Stack_Info} (@code{g-sestin.ads})
 
 
@@ -24318,7 +24346,7 @@ Provide the capability to query the high water mark of the current task's
 secondary stack.
 
 @node GNAT Semaphores g-semaph ads,GNAT Serial_Communications g-sercom ads,GNAT Secondary_Stack_Info g-sestin ads,The GNAT Library
-@anchor{gnat_rm/the_gnat_library id103}@anchor{39d}@anchor{gnat_rm/the_gnat_library gnat-semaphores-g-semaph-ads}@anchor{39e}
+@anchor{gnat_rm/the_gnat_library id103}@anchor{39f}@anchor{gnat_rm/the_gnat_library gnat-semaphores-g-semaph-ads}@anchor{3a0}
 @section @code{GNAT.Semaphores} (@code{g-semaph.ads})
 
 
@@ -24329,7 +24357,7 @@ secondary stack.
 Provides classic counting and binary semaphores using protected types.
 
 @node GNAT Serial_Communications g-sercom ads,GNAT SHA1 g-sha1 ads,GNAT Semaphores g-semaph ads,The GNAT Library
-@anchor{gnat_rm/the_gnat_library gnat-serial-communications-g-sercom-ads}@anchor{39f}@anchor{gnat_rm/the_gnat_library id104}@anchor{3a0}
+@anchor{gnat_rm/the_gnat_library gnat-serial-communications-g-sercom-ads}@anchor{3a1}@anchor{gnat_rm/the_gnat_library id104}@anchor{3a2}
 @section @code{GNAT.Serial_Communications} (@code{g-sercom.ads})
 
 
@@ -24341,7 +24369,7 @@ Provides a simple interface to send and receive data over a serial
 port. This is only supported on GNU/Linux and Windows.
 
 @node GNAT SHA1 g-sha1 ads,GNAT SHA224 g-sha224 ads,GNAT Serial_Communications g-sercom ads,The GNAT Library
-@anchor{gnat_rm/the_gnat_library gnat-sha1-g-sha1-ads}@anchor{3a1}@anchor{gnat_rm/the_gnat_library id105}@anchor{3a2}
+@anchor{gnat_rm/the_gnat_library gnat-sha1-g-sha1-ads}@anchor{3a3}@anchor{gnat_rm/the_gnat_library id105}@anchor{3a4}
 @section @code{GNAT.SHA1} (@code{g-sha1.ads})
 
 
@@ -24354,7 +24382,7 @@ and RFC 3174, and the HMAC-SHA1 message authentication function as described
 in RFC 2104 and FIPS PUB 198.
 
 @node GNAT SHA224 g-sha224 ads,GNAT SHA256 g-sha256 ads,GNAT SHA1 g-sha1 ads,The GNAT Library
-@anchor{gnat_rm/the_gnat_library gnat-sha224-g-sha224-ads}@anchor{3a3}@anchor{gnat_rm/the_gnat_library id106}@anchor{3a4}
+@anchor{gnat_rm/the_gnat_library gnat-sha224-g-sha224-ads}@anchor{3a5}@anchor{gnat_rm/the_gnat_library id106}@anchor{3a6}
 @section @code{GNAT.SHA224} (@code{g-sha224.ads})
 
 
@@ -24367,7 +24395,7 @@ and the HMAC-SHA224 message authentication function as described
 in RFC 2104 and FIPS PUB 198.
 
 @node GNAT SHA256 g-sha256 ads,GNAT SHA384 g-sha384 ads,GNAT SHA224 g-sha224 ads,The GNAT Library
-@anchor{gnat_rm/the_gnat_library gnat-sha256-g-sha256-ads}@anchor{3a5}@anchor{gnat_rm/the_gnat_library id107}@anchor{3a6}
+@anchor{gnat_rm/the_gnat_library gnat-sha256-g-sha256-ads}@anchor{3a7}@anchor{gnat_rm/the_gnat_library id107}@anchor{3a8}
 @section @code{GNAT.SHA256} (@code{g-sha256.ads})
 
 
@@ -24380,7 +24408,7 @@ and the HMAC-SHA256 message authentication function as described
 in RFC 2104 and FIPS PUB 198.
 
 @node GNAT SHA384 g-sha384 ads,GNAT SHA512 g-sha512 ads,GNAT SHA256 g-sha256 ads,The GNAT Library
-@anchor{gnat_rm/the_gnat_library id108}@anchor{3a7}@anchor{gnat_rm/the_gnat_library gnat-sha384-g-sha384-ads}@anchor{3a8}
+@anchor{gnat_rm/the_gnat_library id108}@anchor{3a9}@anchor{gnat_rm/the_gnat_library gnat-sha384-g-sha384-ads}@anchor{3aa}
 @section @code{GNAT.SHA384} (@code{g-sha384.ads})
 
 
@@ -24393,7 +24421,7 @@ and the HMAC-SHA384 message authentication function as described
 in RFC 2104 and FIPS PUB 198.
 
 @node GNAT SHA512 g-sha512 ads,GNAT Signals g-signal ads,GNAT SHA384 g-sha384 ads,The GNAT Library
-@anchor{gnat_rm/the_gnat_library id109}@anchor{3a9}@anchor{gnat_rm/the_gnat_library gnat-sha512-g-sha512-ads}@anchor{3aa}
+@anchor{gnat_rm/the_gnat_library id109}@anchor{3ab}@anchor{gnat_rm/the_gnat_library gnat-sha512-g-sha512-ads}@anchor{3ac}
 @section @code{GNAT.SHA512} (@code{g-sha512.ads})
 
 
@@ -24406,7 +24434,7 @@ and the HMAC-SHA512 message authentication function as described
 in RFC 2104 and FIPS PUB 198.
 
 @node GNAT Signals g-signal ads,GNAT Sockets g-socket ads,GNAT SHA512 g-sha512 ads,The GNAT Library
-@anchor{gnat_rm/the_gnat_library gnat-signals-g-signal-ads}@anchor{3ab}@anchor{gnat_rm/the_gnat_library id110}@anchor{3ac}
+@anchor{gnat_rm/the_gnat_library gnat-signals-g-signal-ads}@anchor{3ad}@anchor{gnat_rm/the_gnat_library id110}@anchor{3ae}
 @section @code{GNAT.Signals} (@code{g-signal.ads})
 
 
@@ -24418,7 +24446,7 @@ Provides the ability to manipulate the blocked status of signals on supported
 targets.
 
 @node GNAT Sockets g-socket ads,GNAT Source_Info g-souinf ads,GNAT Signals g-signal ads,The GNAT Library
-@anchor{gnat_rm/the_gnat_library gnat-sockets-g-socket-ads}@anchor{3ad}@anchor{gnat_rm/the_gnat_library id111}@anchor{3ae}
+@anchor{gnat_rm/the_gnat_library gnat-sockets-g-socket-ads}@anchor{3af}@anchor{gnat_rm/the_gnat_library id111}@anchor{3b0}
 @section @code{GNAT.Sockets} (@code{g-socket.ads})
 
 
@@ -24433,7 +24461,7 @@ on all native GNAT ports and on VxWorks cross prots.  It is not implemented for
 the LynxOS cross port.
 
 @node GNAT Source_Info g-souinf ads,GNAT Spelling_Checker g-speche ads,GNAT Sockets g-socket ads,The GNAT Library
-@anchor{gnat_rm/the_gnat_library gnat-source-info-g-souinf-ads}@anchor{3af}@anchor{gnat_rm/the_gnat_library id112}@anchor{3b0}
+@anchor{gnat_rm/the_gnat_library gnat-source-info-g-souinf-ads}@anchor{3b1}@anchor{gnat_rm/the_gnat_library id112}@anchor{3b2}
 @section @code{GNAT.Source_Info} (@code{g-souinf.ads})
 
 
@@ -24447,7 +24475,7 @@ subprograms yielding the date and time of the current compilation (like the
 C macros @code{__DATE__} and @code{__TIME__})
 
 @node GNAT Spelling_Checker g-speche ads,GNAT Spelling_Checker_Generic g-spchge ads,GNAT Source_Info g-souinf ads,The GNAT Library
-@anchor{gnat_rm/the_gnat_library gnat-spelling-checker-g-speche-ads}@anchor{3b1}@anchor{gnat_rm/the_gnat_library id113}@anchor{3b2}
+@anchor{gnat_rm/the_gnat_library gnat-spelling-checker-g-speche-ads}@anchor{3b3}@anchor{gnat_rm/the_gnat_library id113}@anchor{3b4}
 @section @code{GNAT.Spelling_Checker} (@code{g-speche.ads})
 
 
@@ -24459,7 +24487,7 @@ Provides a function for determining whether one string is a plausible
 near misspelling of another string.
 
 @node GNAT Spelling_Checker_Generic g-spchge ads,GNAT Spitbol Patterns g-spipat ads,GNAT Spelling_Checker g-speche ads,The GNAT Library
-@anchor{gnat_rm/the_gnat_library gnat-spelling-checker-generic-g-spchge-ads}@anchor{3b3}@anchor{gnat_rm/the_gnat_library id114}@anchor{3b4}
+@anchor{gnat_rm/the_gnat_library gnat-spelling-checker-generic-g-spchge-ads}@anchor{3b5}@anchor{gnat_rm/the_gnat_library id114}@anchor{3b6}
 @section @code{GNAT.Spelling_Checker_Generic} (@code{g-spchge.ads})
 
 
@@ -24472,7 +24500,7 @@ determining whether one string is a plausible near misspelling of another
 string.
 
 @node GNAT Spitbol Patterns g-spipat ads,GNAT Spitbol g-spitbo ads,GNAT Spelling_Checker_Generic g-spchge ads,The GNAT Library
-@anchor{gnat_rm/the_gnat_library gnat-spitbol-patterns-g-spipat-ads}@anchor{3b5}@anchor{gnat_rm/the_gnat_library id115}@anchor{3b6}
+@anchor{gnat_rm/the_gnat_library gnat-spitbol-patterns-g-spipat-ads}@anchor{3b7}@anchor{gnat_rm/the_gnat_library id115}@anchor{3b8}
 @section @code{GNAT.Spitbol.Patterns} (@code{g-spipat.ads})
 
 
@@ -24488,7 +24516,7 @@ the SNOBOL4 dynamic pattern construction and matching capabilities, using the
 efficient algorithm developed by Robert Dewar for the SPITBOL system.
 
 @node GNAT Spitbol g-spitbo ads,GNAT Spitbol Table_Boolean g-sptabo ads,GNAT Spitbol Patterns g-spipat ads,The GNAT Library
-@anchor{gnat_rm/the_gnat_library id116}@anchor{3b7}@anchor{gnat_rm/the_gnat_library gnat-spitbol-g-spitbo-ads}@anchor{3b8}
+@anchor{gnat_rm/the_gnat_library id116}@anchor{3b9}@anchor{gnat_rm/the_gnat_library gnat-spitbol-g-spitbo-ads}@anchor{3ba}
 @section @code{GNAT.Spitbol} (@code{g-spitbo.ads})
 
 
@@ -24503,7 +24531,7 @@ useful for constructing arbitrary mappings from strings in the style of
 the SNOBOL4 TABLE function.
 
 @node GNAT Spitbol Table_Boolean g-sptabo ads,GNAT Spitbol Table_Integer g-sptain ads,GNAT Spitbol g-spitbo ads,The GNAT Library
-@anchor{gnat_rm/the_gnat_library gnat-spitbol-table-boolean-g-sptabo-ads}@anchor{3b9}@anchor{gnat_rm/the_gnat_library id117}@anchor{3ba}
+@anchor{gnat_rm/the_gnat_library gnat-spitbol-table-boolean-g-sptabo-ads}@anchor{3bb}@anchor{gnat_rm/the_gnat_library id117}@anchor{3bc}
 @section @code{GNAT.Spitbol.Table_Boolean} (@code{g-sptabo.ads})
 
 
@@ -24518,7 +24546,7 @@ for type @code{Standard.Boolean}, giving an implementation of sets of
 string values.
 
 @node GNAT Spitbol Table_Integer g-sptain ads,GNAT Spitbol Table_VString g-sptavs ads,GNAT Spitbol Table_Boolean g-sptabo ads,The GNAT Library
-@anchor{gnat_rm/the_gnat_library gnat-spitbol-table-integer-g-sptain-ads}@anchor{3bb}@anchor{gnat_rm/the_gnat_library id118}@anchor{3bc}
+@anchor{gnat_rm/the_gnat_library gnat-spitbol-table-integer-g-sptain-ads}@anchor{3bd}@anchor{gnat_rm/the_gnat_library id118}@anchor{3be}
 @section @code{GNAT.Spitbol.Table_Integer} (@code{g-sptain.ads})
 
 
@@ -24535,7 +24563,7 @@ for type @code{Standard.Integer}, giving an implementation of maps
 from string to integer values.
 
 @node GNAT Spitbol Table_VString g-sptavs ads,GNAT SSE g-sse ads,GNAT Spitbol Table_Integer g-sptain ads,The GNAT Library
-@anchor{gnat_rm/the_gnat_library id119}@anchor{3bd}@anchor{gnat_rm/the_gnat_library gnat-spitbol-table-vstring-g-sptavs-ads}@anchor{3be}
+@anchor{gnat_rm/the_gnat_library id119}@anchor{3bf}@anchor{gnat_rm/the_gnat_library gnat-spitbol-table-vstring-g-sptavs-ads}@anchor{3c0}
 @section @code{GNAT.Spitbol.Table_VString} (@code{g-sptavs.ads})
 
 
@@ -24552,7 +24580,7 @@ a variable length string type, giving an implementation of general
 maps from strings to strings.
 
 @node GNAT SSE g-sse ads,GNAT SSE Vector_Types g-ssvety ads,GNAT Spitbol Table_VString g-sptavs ads,The GNAT Library
-@anchor{gnat_rm/the_gnat_library id120}@anchor{3bf}@anchor{gnat_rm/the_gnat_library gnat-sse-g-sse-ads}@anchor{3c0}
+@anchor{gnat_rm/the_gnat_library id120}@anchor{3c1}@anchor{gnat_rm/the_gnat_library gnat-sse-g-sse-ads}@anchor{3c2}
 @section @code{GNAT.SSE} (@code{g-sse.ads})
 
 
@@ -24564,7 +24592,7 @@ targets.  It exposes vector component types together with a general
 introduction to the binding contents and use.
 
 @node GNAT SSE Vector_Types g-ssvety ads,GNAT String_Hash g-strhas ads,GNAT SSE g-sse ads,The GNAT Library
-@anchor{gnat_rm/the_gnat_library gnat-sse-vector-types-g-ssvety-ads}@anchor{3c1}@anchor{gnat_rm/the_gnat_library id121}@anchor{3c2}
+@anchor{gnat_rm/the_gnat_library gnat-sse-vector-types-g-ssvety-ads}@anchor{3c3}@anchor{gnat_rm/the_gnat_library id121}@anchor{3c4}
 @section @code{GNAT.SSE.Vector_Types} (@code{g-ssvety.ads})
 
 
@@ -24573,7 +24601,7 @@ introduction to the binding contents and use.
 SSE vector types for use with SSE related intrinsics.
 
 @node GNAT String_Hash g-strhas ads,GNAT Strings g-string ads,GNAT SSE Vector_Types g-ssvety ads,The GNAT Library
-@anchor{gnat_rm/the_gnat_library gnat-string-hash-g-strhas-ads}@anchor{3c3}@anchor{gnat_rm/the_gnat_library id122}@anchor{3c4}
+@anchor{gnat_rm/the_gnat_library gnat-string-hash-g-strhas-ads}@anchor{3c5}@anchor{gnat_rm/the_gnat_library id122}@anchor{3c6}
 @section @code{GNAT.String_Hash} (@code{g-strhas.ads})
 
 
@@ -24585,7 +24613,7 @@ Provides a generic hash function working on arrays of scalars. Both the scalar
 type and the hash result type are parameters.
 
 @node GNAT Strings g-string ads,GNAT String_Split g-strspl ads,GNAT String_Hash g-strhas ads,The GNAT Library
-@anchor{gnat_rm/the_gnat_library id123}@anchor{3c5}@anchor{gnat_rm/the_gnat_library gnat-strings-g-string-ads}@anchor{3c6}
+@anchor{gnat_rm/the_gnat_library id123}@anchor{3c7}@anchor{gnat_rm/the_gnat_library gnat-strings-g-string-ads}@anchor{3c8}
 @section @code{GNAT.Strings} (@code{g-string.ads})
 
 
@@ -24595,7 +24623,7 @@ Common String access types and related subprograms. Basically it
 defines a string access and an array of string access types.
 
 @node GNAT String_Split g-strspl ads,GNAT Table g-table ads,GNAT Strings g-string ads,The GNAT Library
-@anchor{gnat_rm/the_gnat_library gnat-string-split-g-strspl-ads}@anchor{3c7}@anchor{gnat_rm/the_gnat_library id124}@anchor{3c8}
+@anchor{gnat_rm/the_gnat_library gnat-string-split-g-strspl-ads}@anchor{3c9}@anchor{gnat_rm/the_gnat_library id124}@anchor{3ca}
 @section @code{GNAT.String_Split} (@code{g-strspl.ads})
 
 
@@ -24609,7 +24637,7 @@ to the resulting slices. This package is instantiated from
 @code{GNAT.Array_Split}.
 
 @node GNAT Table g-table ads,GNAT Task_Lock g-tasloc ads,GNAT String_Split g-strspl ads,The GNAT Library
-@anchor{gnat_rm/the_gnat_library id125}@anchor{3c9}@anchor{gnat_rm/the_gnat_library gnat-table-g-table-ads}@anchor{3ca}
+@anchor{gnat_rm/the_gnat_library id125}@anchor{3cb}@anchor{gnat_rm/the_gnat_library gnat-table-g-table-ads}@anchor{3cc}
 @section @code{GNAT.Table} (@code{g-table.ads})
 
 
@@ -24629,7 +24657,7 @@ while an instantiation of @code{GNAT.Dynamic_Tables} creates a type that can be
 used to define dynamic instances of the table.
 
 @node GNAT Task_Lock g-tasloc ads,GNAT Time_Stamp g-timsta ads,GNAT Table g-table ads,The GNAT Library
-@anchor{gnat_rm/the_gnat_library id126}@anchor{3cb}@anchor{gnat_rm/the_gnat_library gnat-task-lock-g-tasloc-ads}@anchor{3cc}
+@anchor{gnat_rm/the_gnat_library id126}@anchor{3cd}@anchor{gnat_rm/the_gnat_library gnat-task-lock-g-tasloc-ads}@anchor{3ce}
 @section @code{GNAT.Task_Lock} (@code{g-tasloc.ads})
 
 
@@ -24646,7 +24674,7 @@ single global task lock.  Appropriate for use in situations where contention
 between tasks is very rarely expected.
 
 @node GNAT Time_Stamp g-timsta ads,GNAT Threads g-thread ads,GNAT Task_Lock g-tasloc ads,The GNAT Library
-@anchor{gnat_rm/the_gnat_library id127}@anchor{3cd}@anchor{gnat_rm/the_gnat_library gnat-time-stamp-g-timsta-ads}@anchor{3ce}
+@anchor{gnat_rm/the_gnat_library id127}@anchor{3cf}@anchor{gnat_rm/the_gnat_library gnat-time-stamp-g-timsta-ads}@anchor{3d0}
 @section @code{GNAT.Time_Stamp} (@code{g-timsta.ads})
 
 
@@ -24661,7 +24689,7 @@ represents the current date and time in ISO 8601 format. This is a very simple
 routine with minimal code and there are no dependencies on any other unit.
 
 @node GNAT Threads g-thread ads,GNAT Traceback g-traceb ads,GNAT Time_Stamp g-timsta ads,The GNAT Library
-@anchor{gnat_rm/the_gnat_library gnat-threads-g-thread-ads}@anchor{3cf}@anchor{gnat_rm/the_gnat_library id128}@anchor{3d0}
+@anchor{gnat_rm/the_gnat_library gnat-threads-g-thread-ads}@anchor{3d1}@anchor{gnat_rm/the_gnat_library id128}@anchor{3d2}
 @section @code{GNAT.Threads} (@code{g-thread.ads})
 
 
@@ -24678,7 +24706,7 @@ further details if your program has threads that are created by a non-Ada
 environment which then accesses Ada code.
 
 @node GNAT Traceback g-traceb ads,GNAT Traceback Symbolic g-trasym ads,GNAT Threads g-thread ads,The GNAT Library
-@anchor{gnat_rm/the_gnat_library id129}@anchor{3d1}@anchor{gnat_rm/the_gnat_library gnat-traceback-g-traceb-ads}@anchor{3d2}
+@anchor{gnat_rm/the_gnat_library id129}@anchor{3d3}@anchor{gnat_rm/the_gnat_library gnat-traceback-g-traceb-ads}@anchor{3d4}
 @section @code{GNAT.Traceback} (@code{g-traceb.ads})
 
 
@@ -24690,7 +24718,7 @@ Provides a facility for obtaining non-symbolic traceback information, useful
 in various debugging situations.
 
 @node GNAT Traceback Symbolic g-trasym ads,GNAT UTF_32 g-table ads,GNAT Traceback g-traceb ads,The GNAT Library
-@anchor{gnat_rm/the_gnat_library id130}@anchor{3d3}@anchor{gnat_rm/the_gnat_library gnat-traceback-symbolic-g-trasym-ads}@anchor{3d4}
+@anchor{gnat_rm/the_gnat_library id130}@anchor{3d5}@anchor{gnat_rm/the_gnat_library gnat-traceback-symbolic-g-trasym-ads}@anchor{3d6}
 @section @code{GNAT.Traceback.Symbolic} (@code{g-trasym.ads})
 
 
@@ -24699,7 +24727,7 @@ in various debugging situations.
 @geindex Trace back facilities
 
 @node GNAT UTF_32 g-table ads,GNAT Wide_Spelling_Checker g-u3spch ads,GNAT Traceback Symbolic g-trasym ads,The GNAT Library
-@anchor{gnat_rm/the_gnat_library id131}@anchor{3d5}@anchor{gnat_rm/the_gnat_library gnat-utf-32-g-table-ads}@anchor{3d6}
+@anchor{gnat_rm/the_gnat_library id131}@anchor{3d7}@anchor{gnat_rm/the_gnat_library gnat-utf-32-g-table-ads}@anchor{3d8}
 @section @code{GNAT.UTF_32} (@code{g-table.ads})
 
 
@@ -24718,7 +24746,7 @@ lower case to upper case fold routine corresponding to
 the Ada 2005 rules for identifier equivalence.
 
 @node GNAT Wide_Spelling_Checker g-u3spch ads,GNAT Wide_Spelling_Checker g-wispch ads,GNAT UTF_32 g-table ads,The GNAT Library
-@anchor{gnat_rm/the_gnat_library gnat-wide-spelling-checker-g-u3spch-ads}@anchor{3d7}@anchor{gnat_rm/the_gnat_library id132}@anchor{3d8}
+@anchor{gnat_rm/the_gnat_library gnat-wide-spelling-checker-g-u3spch-ads}@anchor{3d9}@anchor{gnat_rm/the_gnat_library id132}@anchor{3da}
 @section @code{GNAT.Wide_Spelling_Checker} (@code{g-u3spch.ads})
 
 
@@ -24731,7 +24759,7 @@ near misspelling of another wide wide string, where the strings are represented
 using the UTF_32_String type defined in System.Wch_Cnv.
 
 @node GNAT Wide_Spelling_Checker g-wispch ads,GNAT Wide_String_Split g-wistsp ads,GNAT Wide_Spelling_Checker g-u3spch ads,The GNAT Library
-@anchor{gnat_rm/the_gnat_library gnat-wide-spelling-checker-g-wispch-ads}@anchor{3d9}@anchor{gnat_rm/the_gnat_library id133}@anchor{3da}
+@anchor{gnat_rm/the_gnat_library gnat-wide-spelling-checker-g-wispch-ads}@anchor{3db}@anchor{gnat_rm/the_gnat_library id133}@anchor{3dc}
 @section @code{GNAT.Wide_Spelling_Checker} (@code{g-wispch.ads})
 
 
@@ -24743,7 +24771,7 @@ Provides a function for determining whether one wide string is a plausible
 near misspelling of another wide string.
 
 @node GNAT Wide_String_Split g-wistsp ads,GNAT Wide_Wide_Spelling_Checker g-zspche ads,GNAT Wide_Spelling_Checker g-wispch ads,The GNAT Library
-@anchor{gnat_rm/the_gnat_library id134}@anchor{3db}@anchor{gnat_rm/the_gnat_library gnat-wide-string-split-g-wistsp-ads}@anchor{3dc}
+@anchor{gnat_rm/the_gnat_library id134}@anchor{3dd}@anchor{gnat_rm/the_gnat_library gnat-wide-string-split-g-wistsp-ads}@anchor{3de}
 @section @code{GNAT.Wide_String_Split} (@code{g-wistsp.ads})
 
 
@@ -24757,7 +24785,7 @@ to the resulting slices. This package is instantiated from
 @code{GNAT.Array_Split}.
 
 @node GNAT Wide_Wide_Spelling_Checker g-zspche ads,GNAT Wide_Wide_String_Split g-zistsp ads,GNAT Wide_String_Split g-wistsp ads,The GNAT Library
-@anchor{gnat_rm/the_gnat_library gnat-wide-wide-spelling-checker-g-zspche-ads}@anchor{3dd}@anchor{gnat_rm/the_gnat_library id135}@anchor{3de}
+@anchor{gnat_rm/the_gnat_library gnat-wide-wide-spelling-checker-g-zspche-ads}@anchor{3df}@anchor{gnat_rm/the_gnat_library id135}@anchor{3e0}
 @section @code{GNAT.Wide_Wide_Spelling_Checker} (@code{g-zspche.ads})
 
 
@@ -24769,7 +24797,7 @@ Provides a function for determining whether one wide wide string is a plausible
 near misspelling of another wide wide string.
 
 @node GNAT Wide_Wide_String_Split g-zistsp ads,Interfaces C Extensions i-cexten ads,GNAT Wide_Wide_Spelling_Checker g-zspche ads,The GNAT Library
-@anchor{gnat_rm/the_gnat_library gnat-wide-wide-string-split-g-zistsp-ads}@anchor{3df}@anchor{gnat_rm/the_gnat_library id136}@anchor{3e0}
+@anchor{gnat_rm/the_gnat_library gnat-wide-wide-string-split-g-zistsp-ads}@anchor{3e1}@anchor{gnat_rm/the_gnat_library id136}@anchor{3e2}
 @section @code{GNAT.Wide_Wide_String_Split} (@code{g-zistsp.ads})
 
 
@@ -24783,7 +24811,7 @@ to the resulting slices. This package is instantiated from
 @code{GNAT.Array_Split}.
 
 @node Interfaces C Extensions i-cexten ads,Interfaces C Streams i-cstrea ads,GNAT Wide_Wide_String_Split g-zistsp ads,The GNAT Library
-@anchor{gnat_rm/the_gnat_library interfaces-c-extensions-i-cexten-ads}@anchor{3e1}@anchor{gnat_rm/the_gnat_library id137}@anchor{3e2}
+@anchor{gnat_rm/the_gnat_library interfaces-c-extensions-i-cexten-ads}@anchor{3e3}@anchor{gnat_rm/the_gnat_library id137}@anchor{3e4}
 @section @code{Interfaces.C.Extensions} (@code{i-cexten.ads})
 
 
@@ -24794,7 +24822,7 @@ for use with either manually or automatically generated bindings
 to C libraries.
 
 @node Interfaces C Streams i-cstrea ads,Interfaces Packed_Decimal i-pacdec ads,Interfaces C Extensions i-cexten ads,The GNAT Library
-@anchor{gnat_rm/the_gnat_library id138}@anchor{3e3}@anchor{gnat_rm/the_gnat_library interfaces-c-streams-i-cstrea-ads}@anchor{3e4}
+@anchor{gnat_rm/the_gnat_library id138}@anchor{3e5}@anchor{gnat_rm/the_gnat_library interfaces-c-streams-i-cstrea-ads}@anchor{3e6}
 @section @code{Interfaces.C.Streams} (@code{i-cstrea.ads})
 
 
@@ -24807,7 +24835,7 @@ This package is a binding for the most commonly used operations
 on C streams.
 
 @node Interfaces Packed_Decimal i-pacdec ads,Interfaces VxWorks i-vxwork ads,Interfaces C Streams i-cstrea ads,The GNAT Library
-@anchor{gnat_rm/the_gnat_library interfaces-packed-decimal-i-pacdec-ads}@anchor{3e5}@anchor{gnat_rm/the_gnat_library id139}@anchor{3e6}
+@anchor{gnat_rm/the_gnat_library interfaces-packed-decimal-i-pacdec-ads}@anchor{3e7}@anchor{gnat_rm/the_gnat_library id139}@anchor{3e8}
 @section @code{Interfaces.Packed_Decimal} (@code{i-pacdec.ads})
 
 
@@ -24822,7 +24850,7 @@ from a packed decimal format compatible with that used on IBM
 mainframes.
 
 @node Interfaces VxWorks i-vxwork ads,Interfaces VxWorks Int_Connection i-vxinco ads,Interfaces Packed_Decimal i-pacdec ads,The GNAT Library
-@anchor{gnat_rm/the_gnat_library interfaces-vxworks-i-vxwork-ads}@anchor{3e7}@anchor{gnat_rm/the_gnat_library id140}@anchor{3e8}
+@anchor{gnat_rm/the_gnat_library interfaces-vxworks-i-vxwork-ads}@anchor{3e9}@anchor{gnat_rm/the_gnat_library id140}@anchor{3ea}
 @section @code{Interfaces.VxWorks} (@code{i-vxwork.ads})
 
 
@@ -24838,7 +24866,7 @@ In particular, it interfaces with the
 VxWorks hardware interrupt facilities.
 
 @node Interfaces VxWorks Int_Connection i-vxinco ads,Interfaces VxWorks IO i-vxwoio ads,Interfaces VxWorks i-vxwork ads,The GNAT Library
-@anchor{gnat_rm/the_gnat_library interfaces-vxworks-int-connection-i-vxinco-ads}@anchor{3e9}@anchor{gnat_rm/the_gnat_library id141}@anchor{3ea}
+@anchor{gnat_rm/the_gnat_library interfaces-vxworks-int-connection-i-vxinco-ads}@anchor{3eb}@anchor{gnat_rm/the_gnat_library id141}@anchor{3ec}
 @section @code{Interfaces.VxWorks.Int_Connection} (@code{i-vxinco.ads})
 
 
@@ -24854,7 +24882,7 @@ intConnect() with a custom routine for installing interrupt
 handlers.
 
 @node Interfaces VxWorks IO i-vxwoio ads,System Address_Image s-addima ads,Interfaces VxWorks Int_Connection i-vxinco ads,The GNAT Library
-@anchor{gnat_rm/the_gnat_library interfaces-vxworks-io-i-vxwoio-ads}@anchor{3eb}@anchor{gnat_rm/the_gnat_library id142}@anchor{3ec}
+@anchor{gnat_rm/the_gnat_library interfaces-vxworks-io-i-vxwoio-ads}@anchor{3ed}@anchor{gnat_rm/the_gnat_library id142}@anchor{3ee}
 @section @code{Interfaces.VxWorks.IO} (@code{i-vxwoio.ads})
 
 
@@ -24877,7 +24905,7 @@ function codes. A particular use of this package is
 to enable the use of Get_Immediate under VxWorks.
 
 @node System Address_Image s-addima ads,System Assertions s-assert ads,Interfaces VxWorks IO i-vxwoio ads,The GNAT Library
-@anchor{gnat_rm/the_gnat_library system-address-image-s-addima-ads}@anchor{3ed}@anchor{gnat_rm/the_gnat_library id143}@anchor{3ee}
+@anchor{gnat_rm/the_gnat_library system-address-image-s-addima-ads}@anchor{3ef}@anchor{gnat_rm/the_gnat_library id143}@anchor{3f0}
 @section @code{System.Address_Image} (@code{s-addima.ads})
 
 
@@ -24893,7 +24921,7 @@ function that gives an (implementation dependent)
 string which identifies an address.
 
 @node System Assertions s-assert ads,System Atomic_Counters s-atocou ads,System Address_Image s-addima ads,The GNAT Library
-@anchor{gnat_rm/the_gnat_library id144}@anchor{3ef}@anchor{gnat_rm/the_gnat_library system-assertions-s-assert-ads}@anchor{3f0}
+@anchor{gnat_rm/the_gnat_library id144}@anchor{3f1}@anchor{gnat_rm/the_gnat_library system-assertions-s-assert-ads}@anchor{3f2}
 @section @code{System.Assertions} (@code{s-assert.ads})
 
 
@@ -24909,7 +24937,7 @@ by an run-time assertion failure, as well as the routine that
 is used internally to raise this assertion.
 
 @node System Atomic_Counters s-atocou ads,System Memory s-memory ads,System Assertions s-assert ads,The GNAT Library
-@anchor{gnat_rm/the_gnat_library id145}@anchor{3f1}@anchor{gnat_rm/the_gnat_library system-atomic-counters-s-atocou-ads}@anchor{3f2}
+@anchor{gnat_rm/the_gnat_library id145}@anchor{3f3}@anchor{gnat_rm/the_gnat_library system-atomic-counters-s-atocou-ads}@anchor{3f4}
 @section @code{System.Atomic_Counters} (@code{s-atocou.ads})
 
 
@@ -24923,7 +24951,7 @@ on most targets, including all Alpha, ia64, PowerPC, SPARC V9,
 x86, and x86_64 platforms.
 
 @node System Memory s-memory ads,System Multiprocessors s-multip ads,System Atomic_Counters s-atocou ads,The GNAT Library
-@anchor{gnat_rm/the_gnat_library system-memory-s-memory-ads}@anchor{3f3}@anchor{gnat_rm/the_gnat_library id146}@anchor{3f4}
+@anchor{gnat_rm/the_gnat_library system-memory-s-memory-ads}@anchor{3f5}@anchor{gnat_rm/the_gnat_library id146}@anchor{3f6}
 @section @code{System.Memory} (@code{s-memory.ads})
 
 
@@ -24941,7 +24969,7 @@ calls to this unit may be made for low level allocation uses (for
 example see the body of @code{GNAT.Tables}).
 
 @node System Multiprocessors s-multip ads,System Multiprocessors Dispatching_Domains s-mudido ads,System Memory s-memory ads,The GNAT Library
-@anchor{gnat_rm/the_gnat_library id147}@anchor{3f5}@anchor{gnat_rm/the_gnat_library system-multiprocessors-s-multip-ads}@anchor{3f6}
+@anchor{gnat_rm/the_gnat_library id147}@anchor{3f7}@anchor{gnat_rm/the_gnat_library system-multiprocessors-s-multip-ads}@anchor{3f8}
 @section @code{System.Multiprocessors} (@code{s-multip.ads})
 
 
@@ -24954,7 +24982,7 @@ in GNAT we also make it available in Ada 95 and Ada 2005 (where it is
 technically an implementation-defined addition).
 
 @node System Multiprocessors Dispatching_Domains s-mudido ads,System Partition_Interface s-parint ads,System Multiprocessors s-multip ads,The GNAT Library
-@anchor{gnat_rm/the_gnat_library system-multiprocessors-dispatching-domains-s-mudido-ads}@anchor{3f7}@anchor{gnat_rm/the_gnat_library id148}@anchor{3f8}
+@anchor{gnat_rm/the_gnat_library system-multiprocessors-dispatching-domains-s-mudido-ads}@anchor{3f9}@anchor{gnat_rm/the_gnat_library id148}@anchor{3fa}
 @section @code{System.Multiprocessors.Dispatching_Domains} (@code{s-mudido.ads})
 
 
@@ -24967,7 +24995,7 @@ in GNAT we also make it available in Ada 95 and Ada 2005 (where it is
 technically an implementation-defined addition).
 
 @node System Partition_Interface s-parint ads,System Pool_Global s-pooglo ads,System Multiprocessors Dispatching_Domains s-mudido ads,The GNAT Library
-@anchor{gnat_rm/the_gnat_library id149}@anchor{3f9}@anchor{gnat_rm/the_gnat_library system-partition-interface-s-parint-ads}@anchor{3fa}
+@anchor{gnat_rm/the_gnat_library id149}@anchor{3fb}@anchor{gnat_rm/the_gnat_library system-partition-interface-s-parint-ads}@anchor{3fc}
 @section @code{System.Partition_Interface} (@code{s-parint.ads})
 
 
@@ -24980,7 +25008,7 @@ is used primarily in a distribution context when using Annex E
 with @code{GLADE}.
 
 @node System Pool_Global s-pooglo ads,System Pool_Local s-pooloc ads,System Partition_Interface s-parint ads,The GNAT Library
-@anchor{gnat_rm/the_gnat_library id150}@anchor{3fb}@anchor{gnat_rm/the_gnat_library system-pool-global-s-pooglo-ads}@anchor{3fc}
+@anchor{gnat_rm/the_gnat_library id150}@anchor{3fd}@anchor{gnat_rm/the_gnat_library system-pool-global-s-pooglo-ads}@anchor{3fe}
 @section @code{System.Pool_Global} (@code{s-pooglo.ads})
 
 
@@ -24997,7 +25025,7 @@ declared. It uses malloc/free to allocate/free and does not attempt to
 do any automatic reclamation.
 
 @node System Pool_Local s-pooloc ads,System Restrictions s-restri ads,System Pool_Global s-pooglo ads,The GNAT Library
-@anchor{gnat_rm/the_gnat_library system-pool-local-s-pooloc-ads}@anchor{3fd}@anchor{gnat_rm/the_gnat_library id151}@anchor{3fe}
+@anchor{gnat_rm/the_gnat_library system-pool-local-s-pooloc-ads}@anchor{3ff}@anchor{gnat_rm/the_gnat_library id151}@anchor{400}
 @section @code{System.Pool_Local} (@code{s-pooloc.ads})
 
 
@@ -25014,7 +25042,7 @@ a list of allocated blocks, so that all storage allocated for the pool can
 be freed automatically when the pool is finalized.
 
 @node System Restrictions s-restri ads,System Rident s-rident ads,System Pool_Local s-pooloc ads,The GNAT Library
-@anchor{gnat_rm/the_gnat_library id152}@anchor{3ff}@anchor{gnat_rm/the_gnat_library system-restrictions-s-restri-ads}@anchor{400}
+@anchor{gnat_rm/the_gnat_library id152}@anchor{401}@anchor{gnat_rm/the_gnat_library system-restrictions-s-restri-ads}@anchor{402}
 @section @code{System.Restrictions} (@code{s-restri.ads})
 
 
@@ -25030,7 +25058,7 @@ compiler determined information on which restrictions
 are violated by one or more packages in the partition.
 
 @node System Rident s-rident ads,System Strings Stream_Ops s-ststop ads,System Restrictions s-restri ads,The GNAT Library
-@anchor{gnat_rm/the_gnat_library system-rident-s-rident-ads}@anchor{401}@anchor{gnat_rm/the_gnat_library id153}@anchor{402}
+@anchor{gnat_rm/the_gnat_library system-rident-s-rident-ads}@anchor{403}@anchor{gnat_rm/the_gnat_library id153}@anchor{404}
 @section @code{System.Rident} (@code{s-rident.ads})
 
 
@@ -25046,7 +25074,7 @@ since the necessary instantiation is included in
 package System.Restrictions.
 
 @node System Strings Stream_Ops s-ststop ads,System Unsigned_Types s-unstyp ads,System Rident s-rident ads,The GNAT Library
-@anchor{gnat_rm/the_gnat_library id154}@anchor{403}@anchor{gnat_rm/the_gnat_library system-strings-stream-ops-s-ststop-ads}@anchor{404}
+@anchor{gnat_rm/the_gnat_library id154}@anchor{405}@anchor{gnat_rm/the_gnat_library system-strings-stream-ops-s-ststop-ads}@anchor{406}
 @section @code{System.Strings.Stream_Ops} (@code{s-ststop.ads})
 
 
@@ -25062,7 +25090,7 @@ stream attributes are applied to string types, but the subprograms in this
 package can be used directly by application programs.
 
 @node System Unsigned_Types s-unstyp ads,System Wch_Cnv s-wchcnv ads,System Strings Stream_Ops s-ststop ads,The GNAT Library
-@anchor{gnat_rm/the_gnat_library system-unsigned-types-s-unstyp-ads}@anchor{405}@anchor{gnat_rm/the_gnat_library id155}@anchor{406}
+@anchor{gnat_rm/the_gnat_library system-unsigned-types-s-unstyp-ads}@anchor{407}@anchor{gnat_rm/the_gnat_library id155}@anchor{408}
 @section @code{System.Unsigned_Types} (@code{s-unstyp.ads})
 
 
@@ -25075,7 +25103,7 @@ also contains some related definitions for other specialized types
 used by the compiler in connection with packed array types.
 
 @node System Wch_Cnv s-wchcnv ads,System Wch_Con s-wchcon ads,System Unsigned_Types s-unstyp ads,The GNAT Library
-@anchor{gnat_rm/the_gnat_library system-wch-cnv-s-wchcnv-ads}@anchor{407}@anchor{gnat_rm/the_gnat_library id156}@anchor{408}
+@anchor{gnat_rm/the_gnat_library system-wch-cnv-s-wchcnv-ads}@anchor{409}@anchor{gnat_rm/the_gnat_library id156}@anchor{40a}
 @section @code{System.Wch_Cnv} (@code{s-wchcnv.ads})
 
 
@@ -25096,7 +25124,7 @@ encoding method.  It uses definitions in
 package @code{System.Wch_Con}.
 
 @node System Wch_Con s-wchcon ads,,System Wch_Cnv s-wchcnv ads,The GNAT Library
-@anchor{gnat_rm/the_gnat_library id157}@anchor{409}@anchor{gnat_rm/the_gnat_library system-wch-con-s-wchcon-ads}@anchor{40a}
+@anchor{gnat_rm/the_gnat_library id157}@anchor{40b}@anchor{gnat_rm/the_gnat_library system-wch-con-s-wchcon-ads}@anchor{40c}
 @section @code{System.Wch_Con} (@code{s-wchcon.ads})
 
 
@@ -25108,7 +25136,7 @@ in ordinary strings.  These definitions are used by
 the package @code{System.Wch_Cnv}.
 
 @node Interfacing to Other Languages,Specialized Needs Annexes,The GNAT Library,Top
-@anchor{gnat_rm/interfacing_to_other_languages interfacing-to-other-languages}@anchor{11}@anchor{gnat_rm/interfacing_to_other_languages doc}@anchor{40b}@anchor{gnat_rm/interfacing_to_other_languages id1}@anchor{40c}
+@anchor{gnat_rm/interfacing_to_other_languages interfacing-to-other-languages}@anchor{11}@anchor{gnat_rm/interfacing_to_other_languages doc}@anchor{40d}@anchor{gnat_rm/interfacing_to_other_languages id1}@anchor{40e}
 @chapter Interfacing to Other Languages
 
 
@@ -25126,7 +25154,7 @@ provided.
 @end menu
 
 @node Interfacing to C,Interfacing to C++,,Interfacing to Other Languages
-@anchor{gnat_rm/interfacing_to_other_languages interfacing-to-c}@anchor{40d}@anchor{gnat_rm/interfacing_to_other_languages id2}@anchor{40e}
+@anchor{gnat_rm/interfacing_to_other_languages interfacing-to-c}@anchor{40f}@anchor{gnat_rm/interfacing_to_other_languages id2}@anchor{410}
 @section Interfacing to C
 
 
@@ -25266,7 +25294,7 @@ of the length corresponding to the @code{type'Size} value in Ada.
 @end itemize
 
 @node Interfacing to C++,Interfacing to COBOL,Interfacing to C,Interfacing to Other Languages
-@anchor{gnat_rm/interfacing_to_other_languages id4}@anchor{40f}@anchor{gnat_rm/interfacing_to_other_languages id3}@anchor{47}
+@anchor{gnat_rm/interfacing_to_other_languages id4}@anchor{411}@anchor{gnat_rm/interfacing_to_other_languages id3}@anchor{47}
 @section Interfacing to C++
 
 
@@ -25323,7 +25351,7 @@ The @code{External_Name} is the name of the C++ RTTI symbol. You can then
 cover a specific C++ exception in an exception handler.
 
 @node Interfacing to COBOL,Interfacing to Fortran,Interfacing to C++,Interfacing to Other Languages
-@anchor{gnat_rm/interfacing_to_other_languages id5}@anchor{410}@anchor{gnat_rm/interfacing_to_other_languages interfacing-to-cobol}@anchor{411}
+@anchor{gnat_rm/interfacing_to_other_languages id5}@anchor{412}@anchor{gnat_rm/interfacing_to_other_languages interfacing-to-cobol}@anchor{413}
 @section Interfacing to COBOL
 
 
@@ -25331,7 +25359,7 @@ Interfacing to COBOL is achieved as described in section B.4 of
 the Ada Reference Manual.
 
 @node Interfacing to Fortran,Interfacing to non-GNAT Ada code,Interfacing to COBOL,Interfacing to Other Languages
-@anchor{gnat_rm/interfacing_to_other_languages id6}@anchor{412}@anchor{gnat_rm/interfacing_to_other_languages interfacing-to-fortran}@anchor{413}
+@anchor{gnat_rm/interfacing_to_other_languages id6}@anchor{414}@anchor{gnat_rm/interfacing_to_other_languages interfacing-to-fortran}@anchor{415}
 @section Interfacing to Fortran
 
 
@@ -25341,7 +25369,7 @@ multi-dimensional array causes the array to be stored in column-major
 order as required for convenient interface to Fortran.
 
 @node Interfacing to non-GNAT Ada code,,Interfacing to Fortran,Interfacing to Other Languages
-@anchor{gnat_rm/interfacing_to_other_languages interfacing-to-non-gnat-ada-code}@anchor{414}@anchor{gnat_rm/interfacing_to_other_languages id7}@anchor{415}
+@anchor{gnat_rm/interfacing_to_other_languages interfacing-to-non-gnat-ada-code}@anchor{416}@anchor{gnat_rm/interfacing_to_other_languages id7}@anchor{417}
 @section Interfacing to non-GNAT Ada code
 
 
@@ -25365,7 +25393,7 @@ values or simple record types without variants, or simple array
 types with fixed bounds.
 
 @node Specialized Needs Annexes,Implementation of Specific Ada Features,Interfacing to Other Languages,Top
-@anchor{gnat_rm/specialized_needs_annexes specialized-needs-annexes}@anchor{12}@anchor{gnat_rm/specialized_needs_annexes doc}@anchor{416}@anchor{gnat_rm/specialized_needs_annexes id1}@anchor{417}
+@anchor{gnat_rm/specialized_needs_annexes specialized-needs-annexes}@anchor{12}@anchor{gnat_rm/specialized_needs_annexes doc}@anchor{418}@anchor{gnat_rm/specialized_needs_annexes id1}@anchor{419}
 @chapter Specialized Needs Annexes
 
 
@@ -25406,7 +25434,7 @@ in Ada 2005) is fully implemented.
 @end table
 
 @node Implementation of Specific Ada Features,Implementation of Ada 2012 Features,Specialized Needs Annexes,Top
-@anchor{gnat_rm/implementation_of_specific_ada_features implementation-of-specific-ada-features}@anchor{13}@anchor{gnat_rm/implementation_of_specific_ada_features doc}@anchor{418}@anchor{gnat_rm/implementation_of_specific_ada_features id1}@anchor{419}
+@anchor{gnat_rm/implementation_of_specific_ada_features implementation-of-specific-ada-features}@anchor{13}@anchor{gnat_rm/implementation_of_specific_ada_features doc}@anchor{41a}@anchor{gnat_rm/implementation_of_specific_ada_features id1}@anchor{41b}
 @chapter Implementation of Specific Ada Features
 
 
@@ -25424,7 +25452,7 @@ facilities.
 @end menu
 
 @node Machine Code Insertions,GNAT Implementation of Tasking,,Implementation of Specific Ada Features
-@anchor{gnat_rm/implementation_of_specific_ada_features machine-code-insertions}@anchor{169}@anchor{gnat_rm/implementation_of_specific_ada_features id2}@anchor{41a}
+@anchor{gnat_rm/implementation_of_specific_ada_features machine-code-insertions}@anchor{169}@anchor{gnat_rm/implementation_of_specific_ada_features id2}@anchor{41c}
 @section Machine Code Insertions
 
 
@@ -25592,7 +25620,7 @@ according to normal visibility rules. In particular if there is no
 qualification is required.
 
 @node GNAT Implementation of Tasking,GNAT Implementation of Shared Passive Packages,Machine Code Insertions,Implementation of Specific Ada Features
-@anchor{gnat_rm/implementation_of_specific_ada_features id3}@anchor{41b}@anchor{gnat_rm/implementation_of_specific_ada_features gnat-implementation-of-tasking}@anchor{41c}
+@anchor{gnat_rm/implementation_of_specific_ada_features id3}@anchor{41d}@anchor{gnat_rm/implementation_of_specific_ada_features gnat-implementation-of-tasking}@anchor{41e}
 @section GNAT Implementation of Tasking
 
 
@@ -25608,7 +25636,7 @@ to compliance with the Real-Time Systems Annex.
 @end menu
 
 @node Mapping Ada Tasks onto the Underlying Kernel Threads,Ensuring Compliance with the Real-Time Annex,,GNAT Implementation of Tasking
-@anchor{gnat_rm/implementation_of_specific_ada_features mapping-ada-tasks-onto-the-underlying-kernel-threads}@anchor{41d}@anchor{gnat_rm/implementation_of_specific_ada_features id4}@anchor{41e}
+@anchor{gnat_rm/implementation_of_specific_ada_features mapping-ada-tasks-onto-the-underlying-kernel-threads}@anchor{41f}@anchor{gnat_rm/implementation_of_specific_ada_features id4}@anchor{420}
 @subsection Mapping Ada Tasks onto the Underlying Kernel Threads
 
 
@@ -25677,7 +25705,7 @@ support this functionality when the parent contains more than one task.
 @geindex Forking a new process
 
 @node Ensuring Compliance with the Real-Time Annex,Support for Locking Policies,Mapping Ada Tasks onto the Underlying Kernel Threads,GNAT Implementation of Tasking
-@anchor{gnat_rm/implementation_of_specific_ada_features id5}@anchor{41f}@anchor{gnat_rm/implementation_of_specific_ada_features ensuring-compliance-with-the-real-time-annex}@anchor{420}
+@anchor{gnat_rm/implementation_of_specific_ada_features id5}@anchor{421}@anchor{gnat_rm/implementation_of_specific_ada_features ensuring-compliance-with-the-real-time-annex}@anchor{422}
 @subsection Ensuring Compliance with the Real-Time Annex
 
 
@@ -25728,7 +25756,7 @@ placed at the end.
 @c Support_for_Locking_Policies
 
 @node Support for Locking Policies,,Ensuring Compliance with the Real-Time Annex,GNAT Implementation of Tasking
-@anchor{gnat_rm/implementation_of_specific_ada_features support-for-locking-policies}@anchor{421}
+@anchor{gnat_rm/implementation_of_specific_ada_features support-for-locking-policies}@anchor{423}
 @subsection Support for Locking Policies
 
 
@@ -25762,7 +25790,7 @@ then ceiling locking is used.
 Otherwise, the @code{Ceiling_Locking} policy is ignored.
 
 @node GNAT Implementation of Shared Passive Packages,Code Generation for Array Aggregates,GNAT Implementation of Tasking,Implementation of Specific Ada Features
-@anchor{gnat_rm/implementation_of_specific_ada_features id6}@anchor{422}@anchor{gnat_rm/implementation_of_specific_ada_features gnat-implementation-of-shared-passive-packages}@anchor{423}
+@anchor{gnat_rm/implementation_of_specific_ada_features id6}@anchor{424}@anchor{gnat_rm/implementation_of_specific_ada_features gnat-implementation-of-shared-passive-packages}@anchor{425}
 @section GNAT Implementation of Shared Passive Packages
 
 
@@ -25860,7 +25888,7 @@ This is used to provide the required locking
 semantics for proper protected object synchronization.
 
 @node Code Generation for Array Aggregates,The Size of Discriminated Records with Default Discriminants,GNAT Implementation of Shared Passive Packages,Implementation of Specific Ada Features
-@anchor{gnat_rm/implementation_of_specific_ada_features code-generation-for-array-aggregates}@anchor{424}@anchor{gnat_rm/implementation_of_specific_ada_features id7}@anchor{425}
+@anchor{gnat_rm/implementation_of_specific_ada_features code-generation-for-array-aggregates}@anchor{426}@anchor{gnat_rm/implementation_of_specific_ada_features id7}@anchor{427}
 @section Code Generation for Array Aggregates
 
 
@@ -25891,7 +25919,7 @@ component values and static subtypes also lead to simpler code.
 @end menu
 
 @node Static constant aggregates with static bounds,Constant aggregates with unconstrained nominal types,,Code Generation for Array Aggregates
-@anchor{gnat_rm/implementation_of_specific_ada_features static-constant-aggregates-with-static-bounds}@anchor{426}@anchor{gnat_rm/implementation_of_specific_ada_features id8}@anchor{427}
+@anchor{gnat_rm/implementation_of_specific_ada_features static-constant-aggregates-with-static-bounds}@anchor{428}@anchor{gnat_rm/implementation_of_specific_ada_features id8}@anchor{429}
 @subsection Static constant aggregates with static bounds
 
 
@@ -25938,7 +25966,7 @@ Zero2: constant two_dim := (others => (others => 0));
 @end example
 
 @node Constant aggregates with unconstrained nominal types,Aggregates with static bounds,Static constant aggregates with static bounds,Code Generation for Array Aggregates
-@anchor{gnat_rm/implementation_of_specific_ada_features constant-aggregates-with-unconstrained-nominal-types}@anchor{428}@anchor{gnat_rm/implementation_of_specific_ada_features id9}@anchor{429}
+@anchor{gnat_rm/implementation_of_specific_ada_features constant-aggregates-with-unconstrained-nominal-types}@anchor{42a}@anchor{gnat_rm/implementation_of_specific_ada_features id9}@anchor{42b}
 @subsection Constant aggregates with unconstrained nominal types
 
 
@@ -25953,7 +25981,7 @@ Cr_Unc : constant One_Unc := (12,24,36);
 @end example
 
 @node Aggregates with static bounds,Aggregates with nonstatic bounds,Constant aggregates with unconstrained nominal types,Code Generation for Array Aggregates
-@anchor{gnat_rm/implementation_of_specific_ada_features id10}@anchor{42a}@anchor{gnat_rm/implementation_of_specific_ada_features aggregates-with-static-bounds}@anchor{42b}
+@anchor{gnat_rm/implementation_of_specific_ada_features id10}@anchor{42c}@anchor{gnat_rm/implementation_of_specific_ada_features aggregates-with-static-bounds}@anchor{42d}
 @subsection Aggregates with static bounds
 
 
@@ -25981,7 +26009,7 @@ end loop;
 @end example
 
 @node Aggregates with nonstatic bounds,Aggregates in assignment statements,Aggregates with static bounds,Code Generation for Array Aggregates
-@anchor{gnat_rm/implementation_of_specific_ada_features id11}@anchor{42c}@anchor{gnat_rm/implementation_of_specific_ada_features aggregates-with-nonstatic-bounds}@anchor{42d}
+@anchor{gnat_rm/implementation_of_specific_ada_features id11}@anchor{42e}@anchor{gnat_rm/implementation_of_specific_ada_features aggregates-with-nonstatic-bounds}@anchor{42f}
 @subsection Aggregates with nonstatic bounds
 
 
@@ -25992,7 +26020,7 @@ have to be applied to sub-arrays individually, if they do not have statically
 compatible subtypes.
 
 @node Aggregates in assignment statements,,Aggregates with nonstatic bounds,Code Generation for Array Aggregates
-@anchor{gnat_rm/implementation_of_specific_ada_features id12}@anchor{42e}@anchor{gnat_rm/implementation_of_specific_ada_features aggregates-in-assignment-statements}@anchor{42f}
+@anchor{gnat_rm/implementation_of_specific_ada_features id12}@anchor{430}@anchor{gnat_rm/implementation_of_specific_ada_features aggregates-in-assignment-statements}@anchor{431}
 @subsection Aggregates in assignment statements
 
 
@@ -26034,7 +26062,7 @@ a temporary (created either by the front-end or the code generator) and then
 that temporary will be copied onto the target.
 
 @node The Size of Discriminated Records with Default Discriminants,Strict Conformance to the Ada Reference Manual,Code Generation for Array Aggregates,Implementation of Specific Ada Features
-@anchor{gnat_rm/implementation_of_specific_ada_features id13}@anchor{430}@anchor{gnat_rm/implementation_of_specific_ada_features the-size-of-discriminated-records-with-default-discriminants}@anchor{431}
+@anchor{gnat_rm/implementation_of_specific_ada_features id13}@anchor{432}@anchor{gnat_rm/implementation_of_specific_ada_features the-size-of-discriminated-records-with-default-discriminants}@anchor{433}
 @section The Size of Discriminated Records with Default Discriminants
 
 
@@ -26114,7 +26142,7 @@ say) must be consistent, so it is imperative that the object, once created,
 remain invariant.
 
 @node Strict Conformance to the Ada Reference Manual,,The Size of Discriminated Records with Default Discriminants,Implementation of Specific Ada Features
-@anchor{gnat_rm/implementation_of_specific_ada_features strict-conformance-to-the-ada-reference-manual}@anchor{432}@anchor{gnat_rm/implementation_of_specific_ada_features id14}@anchor{433}
+@anchor{gnat_rm/implementation_of_specific_ada_features strict-conformance-to-the-ada-reference-manual}@anchor{434}@anchor{gnat_rm/implementation_of_specific_ada_features id14}@anchor{435}
 @section Strict Conformance to the Ada Reference Manual
 
 
@@ -26141,7 +26169,7 @@ behavior (although at the cost of a significant performance penalty), so
 infinite and NaN values are properly generated.
 
 @node Implementation of Ada 2012 Features,Obsolescent Features,Implementation of Specific Ada Features,Top
-@anchor{gnat_rm/implementation_of_ada_2012_features doc}@anchor{434}@anchor{gnat_rm/implementation_of_ada_2012_features implementation-of-ada-2012-features}@anchor{14}@anchor{gnat_rm/implementation_of_ada_2012_features id1}@anchor{435}
+@anchor{gnat_rm/implementation_of_ada_2012_features doc}@anchor{436}@anchor{gnat_rm/implementation_of_ada_2012_features implementation-of-ada-2012-features}@anchor{14}@anchor{gnat_rm/implementation_of_ada_2012_features id1}@anchor{437}
 @chapter Implementation of Ada 2012 Features
 
 
@@ -28307,7 +28335,7 @@ RM References:  H.04 (8/1)
 @end itemize
 
 @node Obsolescent Features,Compatibility and Porting Guide,Implementation of Ada 2012 Features,Top
-@anchor{gnat_rm/obsolescent_features id1}@anchor{436}@anchor{gnat_rm/obsolescent_features doc}@anchor{437}@anchor{gnat_rm/obsolescent_features obsolescent-features}@anchor{15}
+@anchor{gnat_rm/obsolescent_features id1}@anchor{438}@anchor{gnat_rm/obsolescent_features doc}@anchor{439}@anchor{gnat_rm/obsolescent_features obsolescent-features}@anchor{15}
 @chapter Obsolescent Features
 
 
@@ -28326,7 +28354,7 @@ compatibility purposes.
 @end menu
 
 @node pragma No_Run_Time,pragma Ravenscar,,Obsolescent Features
-@anchor{gnat_rm/obsolescent_features id2}@anchor{438}@anchor{gnat_rm/obsolescent_features pragma-no-run-time}@anchor{439}
+@anchor{gnat_rm/obsolescent_features id2}@anchor{43a}@anchor{gnat_rm/obsolescent_features pragma-no-run-time}@anchor{43b}
 @section pragma No_Run_Time
 
 
@@ -28339,7 +28367,7 @@ preferred usage is to use an appropriately configured run-time that
 includes just those features that are to be made accessible.
 
 @node pragma Ravenscar,pragma Restricted_Run_Time,pragma No_Run_Time,Obsolescent Features
-@anchor{gnat_rm/obsolescent_features id3}@anchor{43a}@anchor{gnat_rm/obsolescent_features pragma-ravenscar}@anchor{43b}
+@anchor{gnat_rm/obsolescent_features id3}@anchor{43c}@anchor{gnat_rm/obsolescent_features pragma-ravenscar}@anchor{43d}
 @section pragma Ravenscar
 
 
@@ -28348,7 +28376,7 @@ The pragma @code{Ravenscar} has exactly the same effect as pragma
 is part of the new Ada 2005 standard.
 
 @node pragma Restricted_Run_Time,pragma Task_Info,pragma Ravenscar,Obsolescent Features
-@anchor{gnat_rm/obsolescent_features pragma-restricted-run-time}@anchor{43c}@anchor{gnat_rm/obsolescent_features id4}@anchor{43d}
+@anchor{gnat_rm/obsolescent_features pragma-restricted-run-time}@anchor{43e}@anchor{gnat_rm/obsolescent_features id4}@anchor{43f}
 @section pragma Restricted_Run_Time
 
 
@@ -28358,7 +28386,7 @@ preferred since the Ada 2005 pragma @code{Profile} is intended for
 this kind of implementation dependent addition.
 
 @node pragma Task_Info,package System Task_Info s-tasinf ads,pragma Restricted_Run_Time,Obsolescent Features
-@anchor{gnat_rm/obsolescent_features pragma-task-info}@anchor{43e}@anchor{gnat_rm/obsolescent_features id5}@anchor{43f}
+@anchor{gnat_rm/obsolescent_features pragma-task-info}@anchor{440}@anchor{gnat_rm/obsolescent_features id5}@anchor{441}
 @section pragma Task_Info
 
 
@@ -28384,7 +28412,7 @@ in the spec of package System.Task_Info in the runtime
 library.
 
 @node package System Task_Info s-tasinf ads,,pragma Task_Info,Obsolescent Features
-@anchor{gnat_rm/obsolescent_features package-system-task-info}@anchor{440}@anchor{gnat_rm/obsolescent_features package-system-task-info-s-tasinf-ads}@anchor{441}
+@anchor{gnat_rm/obsolescent_features package-system-task-info}@anchor{442}@anchor{gnat_rm/obsolescent_features package-system-task-info-s-tasinf-ads}@anchor{443}
 @section package System.Task_Info (@code{s-tasinf.ads})
 
 
@@ -28394,7 +28422,7 @@ to support the @code{Task_Info} pragma. The predefined Ada package
 standard replacement for GNAT's @code{Task_Info} functionality.
 
 @node Compatibility and Porting Guide,GNU Free Documentation License,Obsolescent Features,Top
-@anchor{gnat_rm/compatibility_and_porting_guide compatibility-and-porting-guide}@anchor{16}@anchor{gnat_rm/compatibility_and_porting_guide doc}@anchor{442}@anchor{gnat_rm/compatibility_and_porting_guide id1}@anchor{443}
+@anchor{gnat_rm/compatibility_and_porting_guide compatibility-and-porting-guide}@anchor{16}@anchor{gnat_rm/compatibility_and_porting_guide doc}@anchor{444}@anchor{gnat_rm/compatibility_and_porting_guide id1}@anchor{445}
 @chapter Compatibility and Porting Guide
 
 
@@ -28416,7 +28444,7 @@ applications developed in other Ada environments.
 @end menu
 
 @node Writing Portable Fixed-Point Declarations,Compatibility with Ada 83,,Compatibility and Porting Guide
-@anchor{gnat_rm/compatibility_and_porting_guide id2}@anchor{444}@anchor{gnat_rm/compatibility_and_porting_guide writing-portable-fixed-point-declarations}@anchor{445}
+@anchor{gnat_rm/compatibility_and_porting_guide id2}@anchor{446}@anchor{gnat_rm/compatibility_and_porting_guide writing-portable-fixed-point-declarations}@anchor{447}
 @section Writing Portable Fixed-Point Declarations
 
 
@@ -28538,7 +28566,7 @@ If you follow this scheme you will be guaranteed that your fixed-point
 types will be portable.
 
 @node Compatibility with Ada 83,Compatibility between Ada 95 and Ada 2005,Writing Portable Fixed-Point Declarations,Compatibility and Porting Guide
-@anchor{gnat_rm/compatibility_and_porting_guide compatibility-with-ada-83}@anchor{446}@anchor{gnat_rm/compatibility_and_porting_guide id3}@anchor{447}
+@anchor{gnat_rm/compatibility_and_porting_guide compatibility-with-ada-83}@anchor{448}@anchor{gnat_rm/compatibility_and_porting_guide id3}@anchor{449}
 @section Compatibility with Ada 83
 
 
@@ -28566,7 +28594,7 @@ following subsections treat the most likely issues to be encountered.
 @end menu
 
 @node Legal Ada 83 programs that are illegal in Ada 95,More deterministic semantics,,Compatibility with Ada 83
-@anchor{gnat_rm/compatibility_and_porting_guide id4}@anchor{448}@anchor{gnat_rm/compatibility_and_porting_guide legal-ada-83-programs-that-are-illegal-in-ada-95}@anchor{449}
+@anchor{gnat_rm/compatibility_and_porting_guide id4}@anchor{44a}@anchor{gnat_rm/compatibility_and_porting_guide legal-ada-83-programs-that-are-illegal-in-ada-95}@anchor{44b}
 @subsection Legal Ada 83 programs that are illegal in Ada 95
 
 
@@ -28666,7 +28694,7 @@ the fix is usually simply to add the @code{(<>)} to the generic declaration.
 @end itemize
 
 @node More deterministic semantics,Changed semantics,Legal Ada 83 programs that are illegal in Ada 95,Compatibility with Ada 83
-@anchor{gnat_rm/compatibility_and_porting_guide more-deterministic-semantics}@anchor{44a}@anchor{gnat_rm/compatibility_and_porting_guide id5}@anchor{44b}
+@anchor{gnat_rm/compatibility_and_porting_guide more-deterministic-semantics}@anchor{44c}@anchor{gnat_rm/compatibility_and_porting_guide id5}@anchor{44d}
 @subsection More deterministic semantics
 
 
@@ -28694,7 +28722,7 @@ which open select branches are executed.
 @end itemize
 
 @node Changed semantics,Other language compatibility issues,More deterministic semantics,Compatibility with Ada 83
-@anchor{gnat_rm/compatibility_and_porting_guide id6}@anchor{44c}@anchor{gnat_rm/compatibility_and_porting_guide changed-semantics}@anchor{44d}
+@anchor{gnat_rm/compatibility_and_porting_guide id6}@anchor{44e}@anchor{gnat_rm/compatibility_and_porting_guide changed-semantics}@anchor{44f}
 @subsection Changed semantics
 
 
@@ -28736,7 +28764,7 @@ covers only the restricted range.
 @end itemize
 
 @node Other language compatibility issues,,Changed semantics,Compatibility with Ada 83
-@anchor{gnat_rm/compatibility_and_porting_guide other-language-compatibility-issues}@anchor{44e}@anchor{gnat_rm/compatibility_and_porting_guide id7}@anchor{44f}
+@anchor{gnat_rm/compatibility_and_porting_guide other-language-compatibility-issues}@anchor{450}@anchor{gnat_rm/compatibility_and_porting_guide id7}@anchor{451}
 @subsection Other language compatibility issues
 
 
@@ -28769,7 +28797,7 @@ include @code{pragma Interface} and the floating point type attributes
 @end itemize
 
 @node Compatibility between Ada 95 and Ada 2005,Implementation-dependent characteristics,Compatibility with Ada 83,Compatibility and Porting Guide
-@anchor{gnat_rm/compatibility_and_porting_guide compatibility-between-ada-95-and-ada-2005}@anchor{450}@anchor{gnat_rm/compatibility_and_porting_guide id8}@anchor{451}
+@anchor{gnat_rm/compatibility_and_porting_guide compatibility-between-ada-95-and-ada-2005}@anchor{452}@anchor{gnat_rm/compatibility_and_porting_guide id8}@anchor{453}
 @section Compatibility between Ada 95 and Ada 2005
 
 
@@ -28841,7 +28869,7 @@ can declare a function returning a value from an anonymous access type.
 @end itemize
 
 @node Implementation-dependent characteristics,Compatibility with Other Ada Systems,Compatibility between Ada 95 and Ada 2005,Compatibility and Porting Guide
-@anchor{gnat_rm/compatibility_and_porting_guide implementation-dependent-characteristics}@anchor{452}@anchor{gnat_rm/compatibility_and_porting_guide id9}@anchor{453}
+@anchor{gnat_rm/compatibility_and_porting_guide implementation-dependent-characteristics}@anchor{454}@anchor{gnat_rm/compatibility_and_porting_guide id9}@anchor{455}
 @section Implementation-dependent characteristics
 
 
@@ -28864,7 +28892,7 @@ transition from certain Ada 83 compilers.
 @end menu
 
 @node Implementation-defined pragmas,Implementation-defined attributes,,Implementation-dependent characteristics
-@anchor{gnat_rm/compatibility_and_porting_guide implementation-defined-pragmas}@anchor{454}@anchor{gnat_rm/compatibility_and_porting_guide id10}@anchor{455}
+@anchor{gnat_rm/compatibility_and_porting_guide implementation-defined-pragmas}@anchor{456}@anchor{gnat_rm/compatibility_and_porting_guide id10}@anchor{457}
 @subsection Implementation-defined pragmas
 
 
@@ -28886,7 +28914,7 @@ avoiding compiler rejection of units that contain such pragmas; they are not
 relevant in a GNAT context and hence are not otherwise implemented.
 
 @node Implementation-defined attributes,Libraries,Implementation-defined pragmas,Implementation-dependent characteristics
-@anchor{gnat_rm/compatibility_and_porting_guide id11}@anchor{456}@anchor{gnat_rm/compatibility_and_porting_guide implementation-defined-attributes}@anchor{457}
+@anchor{gnat_rm/compatibility_and_porting_guide id11}@anchor{458}@anchor{gnat_rm/compatibility_and_porting_guide implementation-defined-attributes}@anchor{459}
 @subsection Implementation-defined attributes
 
 
@@ -28900,7 +28928,7 @@ Ada 83, GNAT supplies the attributes @code{Bit}, @code{Machine_Size} and
 @code{Type_Class}.
 
 @node Libraries,Elaboration order,Implementation-defined attributes,Implementation-dependent characteristics
-@anchor{gnat_rm/compatibility_and_porting_guide libraries}@anchor{458}@anchor{gnat_rm/compatibility_and_porting_guide id12}@anchor{459}
+@anchor{gnat_rm/compatibility_and_porting_guide libraries}@anchor{45a}@anchor{gnat_rm/compatibility_and_porting_guide id12}@anchor{45b}
 @subsection Libraries
 
 
@@ -28929,7 +28957,7 @@ be preferable to retrofit the application using modular types.
 @end itemize
 
 @node Elaboration order,Target-specific aspects,Libraries,Implementation-dependent characteristics
-@anchor{gnat_rm/compatibility_and_porting_guide elaboration-order}@anchor{45a}@anchor{gnat_rm/compatibility_and_porting_guide id13}@anchor{45b}
+@anchor{gnat_rm/compatibility_and_porting_guide elaboration-order}@anchor{45c}@anchor{gnat_rm/compatibility_and_porting_guide id13}@anchor{45d}
 @subsection Elaboration order
 
 
@@ -28965,7 +28993,7 @@ pragmas either globally (as an effect of the @emph{-gnatE} switch) or locally
 @end itemize
 
 @node Target-specific aspects,,Elaboration order,Implementation-dependent characteristics
-@anchor{gnat_rm/compatibility_and_porting_guide target-specific-aspects}@anchor{45c}@anchor{gnat_rm/compatibility_and_porting_guide id14}@anchor{45d}
+@anchor{gnat_rm/compatibility_and_porting_guide target-specific-aspects}@anchor{45e}@anchor{gnat_rm/compatibility_and_porting_guide id14}@anchor{45f}
 @subsection Target-specific aspects
 
 
@@ -28978,10 +29006,10 @@ on the robustness of the original design.  Moreover, Ada 95 (and thus
 Ada 2005 and Ada 2012) are sometimes
 incompatible with typical Ada 83 compiler practices regarding implicit
 packing, the meaning of the Size attribute, and the size of access values.
-GNAT's approach to these issues is described in @ref{45e,,Representation Clauses}.
+GNAT's approach to these issues is described in @ref{460,,Representation Clauses}.
 
 @node Compatibility with Other Ada Systems,Representation Clauses,Implementation-dependent characteristics,Compatibility and Porting Guide
-@anchor{gnat_rm/compatibility_and_porting_guide id15}@anchor{45f}@anchor{gnat_rm/compatibility_and_porting_guide compatibility-with-other-ada-systems}@anchor{460}
+@anchor{gnat_rm/compatibility_and_porting_guide id15}@anchor{461}@anchor{gnat_rm/compatibility_and_porting_guide compatibility-with-other-ada-systems}@anchor{462}
 @section Compatibility with Other Ada Systems
 
 
@@ -29024,7 +29052,7 @@ far beyond this minimal set, as described in the next section.
 @end itemize
 
 @node Representation Clauses,Compatibility with HP Ada 83,Compatibility with Other Ada Systems,Compatibility and Porting Guide
-@anchor{gnat_rm/compatibility_and_porting_guide representation-clauses}@anchor{45e}@anchor{gnat_rm/compatibility_and_porting_guide id16}@anchor{461}
+@anchor{gnat_rm/compatibility_and_porting_guide representation-clauses}@anchor{460}@anchor{gnat_rm/compatibility_and_porting_guide id16}@anchor{463}
 @section Representation Clauses
 
 
@@ -29117,7 +29145,7 @@ with thin pointers.
 @end itemize
 
 @node Compatibility with HP Ada 83,,Representation Clauses,Compatibility and Porting Guide
-@anchor{gnat_rm/compatibility_and_porting_guide compatibility-with-hp-ada-83}@anchor{462}@anchor{gnat_rm/compatibility_and_porting_guide id17}@anchor{463}
+@anchor{gnat_rm/compatibility_and_porting_guide compatibility-with-hp-ada-83}@anchor{464}@anchor{gnat_rm/compatibility_and_porting_guide id17}@anchor{465}
 @section Compatibility with HP Ada 83
 
 
@@ -29147,7 +29175,7 @@ extension of package System.
 @end itemize
 
 @node GNU Free Documentation License,Index,Compatibility and Porting Guide,Top
-@anchor{share/gnu_free_documentation_license gnu-fdl}@anchor{1}@anchor{share/gnu_free_documentation_license doc}@anchor{464}@anchor{share/gnu_free_documentation_license gnu-free-documentation-license}@anchor{465}
+@anchor{share/gnu_free_documentation_license gnu-fdl}@anchor{1}@anchor{share/gnu_free_documentation_license doc}@anchor{466}@anchor{share/gnu_free_documentation_license gnu-free-documentation-license}@anchor{467}
 @chapter GNU Free Documentation License
 
 
index 67cb917d5eb46d7c31be4cceea15ccd1996a003a..93862beb094bf3f899445af3b254a464d011336d 100644 (file)
@@ -151,12 +151,12 @@ with System.Val_Fixed_64; use System.Val_Fixed_64;
 package body Ada.Text_IO.Fixed_IO is
 
    --  Note: we still use the floating-point I/O routines for types whose small
-   --  is not a sufficiently small integer or the reciprocal thereof. This will
-   --  result in inaccuracies for fixed point types that require more precision
-   --  than is available in Long_Long_Float.
+   --  is not the ratio of two sufficiently small integers. This will result in
+   --  inaccuracies for fixed point types that require more precision than is
+   --  available in Long_Long_Float.
 
-   subtype Int32 is Interfaces.Integer_32;
-   subtype Int64 is Interfaces.Integer_64;
+   subtype Int32 is Interfaces.Integer_32; use type Int32;
+   subtype Int64 is Interfaces.Integer_64; use type Int64;
 
    package Aux32 is new
      Ada.Text_IO.Fixed_Aux (Int32, Scan_Fixed32, Set_Image_Fixed32);
@@ -164,25 +164,63 @@ package body Ada.Text_IO.Fixed_IO is
    package Aux64 is new
      Ada.Text_IO.Fixed_Aux (Int64, Scan_Fixed64, Set_Image_Fixed64);
 
-   Exact : constant Boolean :=
-     (Float'Floor (Num'Small) = Float'Ceiling (Num'Small)
-       or else Float'Floor (1.0 / Num'Small) = Float'Ceiling (1.0 / Num'Small))
-     and then Num'Small >= 2.0**(-63)
-     and then Num'Small <= 2.0**63;
-   --  True if the exact algorithm implemented in Fixed_Aux can be used. The
-   --  condition is a Small which is either an integer or the reciprocal of an
-   --  integer with the appropriate magnitude.
-
-   Need_64 : constant Boolean :=
-     Num'Object_Size > 32
-       or else Num'Small > 2.0**31
-       or else Num'Small < 2.0**(-31);
    --  Throughout this generic body, we distinguish between the case where type
-   --  Int32 is acceptable and where type Int64 is needed. This Boolean is used
-   --  to test for these cases and since it is a constant, only code for the
-   --  relevant case will be included in the instance.
-
-   E : constant Natural := 31 + 32 * Boolean'Pos (Need_64);
+   --  Int32 is OK and where type Int64 is OK. These boolean constants are used
+   --  to test for this, such that only code for the relevant case is included
+   --  in the instance; that's why the computation of their value must be fully
+   --  static (although it is not a static expressions in the RM sense).
+
+   OK_Get_32 : constant Boolean :=
+     Num'Object_Size <= 32
+       and then
+         ((Num'Small_Numerator = 1 and then Num'Small_Denominator <= 2**31)
+           or else
+          (Num'Small_Denominator = 1 and then Num'Small_Numerator <= 2**31)
+           or else
+          (Num'Small_Numerator <= 2**27
+            and then Num'Small_Denominator <= 2**27));
+   --  These conditions are derived from the prerequisites of System.Value_F
+
+   OK_Put_32 : constant Boolean :=
+     Num'Object_Size <= 32
+       and then
+         ((Num'Small_Numerator = 1 and then Num'Small_Denominator <= 2**31)
+           or else
+          (Num'Small_Denominator = 1 and then Num'Small_Numerator <= 2**31)
+           or else
+          (Num'Small_Numerator < Num'Small_Denominator
+            and then Num'Small_Denominator <= 2**27)
+           or else
+          (Num'Small_Denominator < Num'Small_Numerator
+            and then Num'Small_Numerator <= 2**25));
+   --  These conditions are derived from the prerequisites of System.Image_F
+
+   OK_Get_64 : constant Boolean :=
+     Num'Object_Size <= 64
+       and then
+         ((Num'Small_Numerator = 1 and then Num'Small_Denominator <= 2**63)
+           or else
+          (Num'Small_Denominator = 1 and then Num'Small_Numerator <= 2**63)
+           or else
+          (Num'Small_Numerator <= 2**59
+            and then Num'Small_Denominator <= 2**59));
+   --  These conditions are derived from the prerequisites of System.Value_F
+
+   OK_Put_64 : constant Boolean :=
+     Num'Object_Size <= 64
+       and then
+         ((Num'Small_Numerator = 1 and then Num'Small_Denominator <= 2**63)
+           or else
+          (Num'Small_Denominator = 1 and then Num'Small_Numerator <= 2**63)
+           or else
+          (Num'Small_Numerator < Num'Small_Denominator
+            and then Num'Small_Denominator <= 2**59)
+           or else
+          (Num'Small_Denominator < Num'Small_Numerator
+            and then Num'Small_Numerator <= 2**53));
+   --  These conditions are derived from the prerequisites of System.Image_F
+
+   E : constant Natural := 63 - 32 * Boolean'Pos (OK_Put_32);
    --  T'Size - 1 for the selected Int{32,64}
 
    F0 : constant Natural := 0;
@@ -217,18 +255,18 @@ package body Ada.Text_IO.Fixed_IO is
       pragma Unsuppress (Range_Check);
 
    begin
-      if not Exact then
-         Float_Aux.Get (File, Long_Long_Float (Item), Width);
-      elsif Need_64 then
+      if OK_Get_32 then
+         Item := Num'Fixed_Value
+                   (Aux32.Get (File, Width,
+                               -Num'Small_Numerator,
+                               -Num'Small_Denominator));
+      elsif OK_Get_64 then
          Item := Num'Fixed_Value
                    (Aux64.Get (File, Width,
-                               Int64 (-Float'Ceiling (Num'Small)),
-                               Int64 (-Float'Ceiling (1.0 / Num'Small))));
+                               -Num'Small_Numerator,
+                               -Num'Small_Denominator));
       else
-         Item := Num'Fixed_Value
-                   (Aux32.Get (File, Width,
-                               Int32 (-Float'Ceiling (Num'Small)),
-                               Int32 (-Float'Ceiling (1.0 / Num'Small))));
+         Float_Aux.Get (File, Long_Long_Float (Item), Width);
       end if;
 
    exception
@@ -251,18 +289,18 @@ package body Ada.Text_IO.Fixed_IO is
       pragma Unsuppress (Range_Check);
 
    begin
-      if not Exact then
-         Float_Aux.Gets (From, Long_Long_Float (Item), Last);
-      elsif Need_64 then
+      if OK_Get_32 then
+         Item := Num'Fixed_Value
+                   (Aux32.Gets (From, Last,
+                                -Num'Small_Numerator,
+                                -Num'Small_Denominator));
+      elsif OK_Get_64 then
          Item := Num'Fixed_Value
                    (Aux64.Gets (From, Last,
-                                Int64 (-Float'Ceiling (Num'Small)),
-                                Int64 (-Float'Ceiling (1.0 / Num'Small))));
+                                -Num'Small_Numerator,
+                                -Num'Small_Denominator));
       else
-         Item := Num'Fixed_Value
-                   (Aux32.Gets (From, Last,
-                                Int32 (-Float'Ceiling (Num'Small)),
-                                Int32 (-Float'Ceiling (1.0 / Num'Small))));
+         Float_Aux.Gets (From, Long_Long_Float (Item), Last);
       end if;
 
    exception
@@ -281,18 +319,16 @@ package body Ada.Text_IO.Fixed_IO is
       Exp  : Field := Default_Exp)
    is
    begin
-      if not Exact then
-         Float_Aux.Put (File, Long_Long_Float (Item), Fore, Aft, Exp);
-      elsif Need_64 then
+      if OK_Put_32 then
+         Aux32.Put (File, Int32'Integer_Value (Item), Fore, Aft, Exp,
+                    -Num'Small_Numerator, -Num'Small_Denominator,
+                    For0, Num'Aft);
+      elsif OK_Put_64 then
          Aux64.Put (File, Int64'Integer_Value (Item), Fore, Aft, Exp,
-                    Int64 (-Float'Ceiling (Num'Small)),
-                    Int64 (-Float'Ceiling (1.0 / Num'Small)),
+                    -Num'Small_Numerator, -Num'Small_Denominator,
                     For0, Num'Aft);
       else
-         Aux32.Put (File, Int32'Integer_Value (Item), Fore, Aft, Exp,
-                    Int32 (-Float'Ceiling (Num'Small)),
-                    Int32 (-Float'Ceiling (1.0 / Num'Small)),
-                    For0, Num'Aft);
+         Float_Aux.Put (File, Long_Long_Float (Item), Fore, Aft, Exp);
       end if;
    end Put;
 
@@ -313,18 +349,16 @@ package body Ada.Text_IO.Fixed_IO is
       Exp  : Field := Default_Exp)
    is
    begin
-      if not Exact then
-         Float_Aux.Puts (To, Long_Long_Float (Item), Aft, Exp);
-      elsif Need_64 then
+      if OK_Put_32 then
+         Aux32.Puts (To, Int32'Integer_Value (Item), Aft, Exp,
+                     -Num'Small_Numerator, -Num'Small_Denominator,
+                     For0, Num'Aft);
+      elsif OK_Put_64 then
          Aux64.Puts (To, Int64'Integer_Value (Item), Aft, Exp,
-                     Int64 (-Float'Ceiling (Num'Small)),
-                     Int64 (-Float'Ceiling (1.0 / Num'Small)),
+                     -Num'Small_Numerator, -Num'Small_Denominator,
                      For0, Num'Aft);
       else
-         Aux32.Puts (To, Int32'Integer_Value (Item), Aft, Exp,
-                     Int32 (-Float'Ceiling (Num'Small)),
-                     Int32 (-Float'Ceiling (1.0 / Num'Small)),
-                     For0, Num'Aft);
+         Float_Aux.Puts (To, Long_Long_Float (Item), Aft, Exp);
       end if;
    end Put;
 
index f164209c3b3927e63d94cae2288f38f613f74a6c..f2dffcffad33b1923a1f7ecfd6154f5f79a3e5ba 100644 (file)
@@ -153,13 +153,13 @@ with System.Val_Fixed_128; use System.Val_Fixed_128;
 package body Ada.Text_IO.Fixed_IO is
 
    --  Note: we still use the floating-point I/O routines for types whose small
-   --  is not a sufficiently small integer or the reciprocal thereof. This will
-   --  result in inaccuracies for fixed point types that require more precision
-   --  than is available in Long_Long_Float.
+   --  is not the ratio of two sufficiently small integers. This will result in
+   --  inaccuracies for fixed point types that require more precision than is
+   --  available in Long_Long_Float.
 
-   subtype Int32  is Interfaces.Integer_32;
-   subtype Int64  is Interfaces.Integer_64;
-   subtype Int128 is Interfaces.Integer_128;
+   subtype Int32  is Interfaces.Integer_32;  use type Int32;
+   subtype Int64  is Interfaces.Integer_64;  use type Int64;
+   subtype Int128 is Interfaces.Integer_128; use type Int128;
 
    package Aux32 is new
      Ada.Text_IO.Fixed_Aux (Int32, Scan_Fixed32, Set_Image_Fixed32);
@@ -170,31 +170,90 @@ package body Ada.Text_IO.Fixed_IO is
    package Aux128 is new
      Ada.Text_IO.Fixed_Aux (Int128, Scan_Fixed128, Set_Image_Fixed128);
 
-   Exact : constant Boolean :=
-     (Float'Floor (Num'Small) = Float'Ceiling (Num'Small)
-       or else Float'Floor (1.0 / Num'Small) = Float'Ceiling (1.0 / Num'Small))
-     and then Num'Small >= 2.0**(-127)
-     and then Num'Small <= 2.0**127;
-   --  True if the exact algorithm implemented in Fixed_Aux can be used. The
-   --  condition is a Small which is either an integer or the reciprocal of an
-   --  integer with the appropriate magnitude.
-
-   Need_64 : constant Boolean :=
-     Num'Object_Size > 32
-       or else Num'Small > 2.0**31
-       or else Num'Small < 2.0**(-31);
-   Need_128 : constant Boolean :=
-     Num'Object_Size > 64
-       or else Num'Small > 2.0**63
-       or else Num'Small < 2.0**(-63);
-   --  Throughout this generic body, we distinguish between the cases where
-   --  type Int32 is acceptable, where type Int64 is acceptable, and where
-   --  type Int128 is needed. These boolean constants are used to test for
-   --  these cases and since they are constant, only code for the relevant
-   --  case will be really included in the instance.
+   --  Throughout this generic body, we distinguish between the case where type
+   --  Int32 is OK, where type Int64 is OK and where type Int128 is OK. These
+   --  boolean constants are used to test for this, such that only code for the
+   --  relevant case is included in the instance; that's why the computation of
+   --  their value must be fully static (although it is not a static expression
+   --  in the RM sense).
+
+   OK_Get_32 : constant Boolean :=
+     Num'Object_Size <= 32
+       and then
+         ((Num'Small_Numerator = 1 and then Num'Small_Denominator <= 2**31)
+           or else
+          (Num'Small_Denominator = 1 and then Num'Small_Numerator <= 2**31)
+           or else
+          (Num'Small_Numerator <= 2**27
+            and then Num'Small_Denominator <= 2**27));
+   --  These conditions are derived from the prerequisites of System.Value_F
+
+   OK_Put_32 : constant Boolean :=
+     Num'Object_Size <= 32
+       and then
+         ((Num'Small_Numerator = 1 and then Num'Small_Denominator <= 2**31)
+           or else
+          (Num'Small_Denominator = 1 and then Num'Small_Numerator <= 2**31)
+           or else
+          (Num'Small_Numerator < Num'Small_Denominator
+            and then Num'Small_Denominator <= 2**27)
+           or else
+          (Num'Small_Denominator < Num'Small_Numerator
+            and then Num'Small_Numerator <= 2**25));
+   --  These conditions are derived from the prerequisites of System.Image_F
+
+   OK_Get_64 : constant Boolean :=
+     Num'Object_Size <= 64
+       and then
+         ((Num'Small_Numerator = 1 and then Num'Small_Denominator <= 2**63)
+           or else
+          (Num'Small_Denominator = 1 and then Num'Small_Numerator <= 2**63)
+           or else
+          (Num'Small_Numerator <= 2**59
+            and then Num'Small_Denominator <= 2**59));
+   --  These conditions are derived from the prerequisites of System.Value_F
+
+   OK_Put_64 : constant Boolean :=
+     Num'Object_Size <= 64
+       and then
+         ((Num'Small_Numerator = 1 and then Num'Small_Denominator <= 2**63)
+           or else
+          (Num'Small_Denominator = 1 and then Num'Small_Numerator <= 2**63)
+           or else
+          (Num'Small_Numerator < Num'Small_Denominator
+            and then Num'Small_Denominator <= 2**59)
+           or else
+          (Num'Small_Denominator < Num'Small_Numerator
+            and then Num'Small_Numerator <= 2**53));
+   --  These conditions are derived from the prerequisites of System.Image_F
+
+   OK_Get_128 : constant Boolean :=
+     Num'Object_Size <= 128
+       and then
+         ((Num'Small_Numerator = 1 and then Num'Small_Denominator <= 2**127)
+           or else
+          (Num'Small_Denominator = 1 and then Num'Small_Numerator <= 2**127)
+           or else
+          (Num'Small_Numerator <= 2**123
+            and then Num'Small_Denominator <= 2**123));
+   --  These conditions are derived from the prerequisites of System.Value_F
+
+   OK_Put_128 : constant Boolean :=
+     Num'Object_Size <= 128
+       and then
+         ((Num'Small_Numerator = 1 and then Num'Small_Denominator <= 2**127)
+           or else
+          (Num'Small_Denominator = 1 and then Num'Small_Numerator <= 2**127)
+           or else
+          (Num'Small_Numerator < Num'Small_Denominator
+            and then Num'Small_Denominator <= 2**123)
+           or else
+          (Num'Small_Denominator < Num'Small_Numerator
+            and then Num'Small_Numerator <= 2**122));
+   --  These conditions are derived from the prerequisites of System.Image_F
 
    E : constant Natural :=
-         31 + 32 * Boolean'Pos (Need_64) + 64 * Boolean'Pos (Need_128);
+         127 - 64 * Boolean'Pos (OK_Put_64) - 32 * Boolean'Pos (OK_Put_32);
    --  T'Size - 1 for the selected Int{32,64,128}
 
    F0 : constant Natural := 0;
@@ -231,23 +290,23 @@ package body Ada.Text_IO.Fixed_IO is
       pragma Unsuppress (Range_Check);
 
    begin
-      if not Exact then
-         Float_Aux.Get (File, Long_Long_Float (Item), Width);
-      elsif Need_128 then
+      if OK_Get_32 then
          Item := Num'Fixed_Value
-                   (Aux128.Get (File, Width,
-                                Int128 (-Float'Ceiling (Num'Small)),
-                                Int128 (-Float'Ceiling (1.0 / Num'Small))));
-      elsif Need_64 then
+                   (Aux32.Get (File, Width,
+                               -Num'Small_Numerator,
+                               -Num'Small_Denominator));
+      elsif OK_Get_64 then
          Item := Num'Fixed_Value
                    (Aux64.Get (File, Width,
-                               Int64 (-Float'Ceiling (Num'Small)),
-                               Int64 (-Float'Ceiling (1.0 / Num'Small))));
-      else
+                               -Num'Small_Numerator,
+                               -Num'Small_Denominator));
+      elsif OK_Get_128 then
          Item := Num'Fixed_Value
-                   (Aux32.Get (File, Width,
-                               Int32 (-Float'Ceiling (Num'Small)),
-                               Int32 (-Float'Ceiling (1.0 / Num'Small))));
+                   (Aux128.Get (File, Width,
+                                -Num'Small_Numerator,
+                                -Num'Small_Denominator));
+      else
+         Float_Aux.Get (File, Long_Long_Float (Item), Width);
       end if;
 
    exception
@@ -270,23 +329,23 @@ package body Ada.Text_IO.Fixed_IO is
       pragma Unsuppress (Range_Check);
 
    begin
-      if not Exact then
-         Float_Aux.Gets (From, Long_Long_Float (Item), Last);
-      elsif Need_128 then
+      if OK_Get_32 then
          Item := Num'Fixed_Value
-                   (Aux128.Gets (From, Last,
-                                 Int128 (-Float'Ceiling (Num'Small)),
-                                 Int128 (-Float'Ceiling (1.0 / Num'Small))));
-      elsif Need_64 then
+                   (Aux32.Gets (From, Last,
+                                -Num'Small_Numerator,
+                                -Num'Small_Denominator));
+      elsif OK_Get_64 then
          Item := Num'Fixed_Value
                    (Aux64.Gets (From, Last,
-                                Int64 (-Float'Ceiling (Num'Small)),
-                                Int64 (-Float'Ceiling (1.0 / Num'Small))));
-      else
+                                -Num'Small_Numerator,
+                                -Num'Small_Denominator));
+      elsif OK_Get_128 then
          Item := Num'Fixed_Value
-                   (Aux32.Gets (From, Last,
-                                Int32 (-Float'Ceiling (Num'Small)),
-                                Int32 (-Float'Ceiling (1.0 / Num'Small))));
+                   (Aux128.Gets (From, Last,
+                                 -Num'Small_Numerator,
+                                 -Num'Small_Denominator));
+      else
+         Float_Aux.Gets (From, Long_Long_Float (Item), Last);
       end if;
 
    exception
@@ -305,23 +364,20 @@ package body Ada.Text_IO.Fixed_IO is
       Exp  : Field := Default_Exp)
    is
    begin
-      if not Exact then
-         Float_Aux.Put (File, Long_Long_Float (Item), Fore, Aft, Exp);
-      elsif Need_128 then
-         Aux128.Put (File, Int128'Integer_Value (Item), Fore, Aft, Exp,
-                     Int128 (-Float'Ceiling (Num'Small)),
-                     Int128 (-Float'Ceiling (1.0 / Num'Small)),
-                     For0, Num'Aft);
-      elsif Need_64 then
+      if OK_Put_32 then
+         Aux32.Put (File, Int32'Integer_Value (Item), Fore, Aft, Exp,
+                    -Num'Small_Numerator, -Num'Small_Denominator,
+                    For0, Num'Aft);
+      elsif OK_Put_64 then
          Aux64.Put (File, Int64'Integer_Value (Item), Fore, Aft, Exp,
-                    Int64 (-Float'Ceiling (Num'Small)),
-                    Int64 (-Float'Ceiling (1.0 / Num'Small)),
+                    -Num'Small_Numerator, -Num'Small_Denominator,
                     For0, Num'Aft);
+      elsif OK_Put_128 then
+         Aux128.Put (File, Int128'Integer_Value (Item), Fore, Aft, Exp,
+                     -Num'Small_Numerator, -Num'Small_Denominator,
+                     For0, Num'Aft);
       else
-         Aux32.Put (File, Int32'Integer_Value (Item), Fore, Aft, Exp,
-                    Int32 (-Float'Ceiling (Num'Small)),
-                    Int32 (-Float'Ceiling (1.0 / Num'Small)),
-                    For0, Num'Aft);
+         Float_Aux.Put (File, Long_Long_Float (Item), Fore, Aft, Exp);
       end if;
    end Put;
 
@@ -342,23 +398,20 @@ package body Ada.Text_IO.Fixed_IO is
       Exp  : Field := Default_Exp)
    is
    begin
-      if not Exact then
-         Float_Aux.Puts (To, Long_Long_Float (Item), Aft, Exp);
-      elsif Need_128 then
-         Aux128.Puts (To, Int128'Integer_Value (Item), Aft, Exp,
-                      Int128 (-Float'Ceiling (Num'Small)),
-                      Int128 (-Float'Ceiling (1.0 / Num'Small)),
-                      For0, Num'Aft);
-      elsif Need_64 then
+      if OK_Put_32 then
+         Aux32.Puts (To, Int32'Integer_Value (Item), Aft, Exp,
+                     -Num'Small_Numerator, -Num'Small_Denominator,
+                     For0, Num'Aft);
+      elsif OK_Put_64 then
          Aux64.Puts (To, Int64'Integer_Value (Item), Aft, Exp,
-                     Int64 (-Float'Ceiling (Num'Small)),
-                     Int64 (-Float'Ceiling (1.0 / Num'Small)),
+                     -Num'Small_Numerator, -Num'Small_Denominator,
                      For0, Num'Aft);
+      elsif OK_Put_128 then
+         Aux128.Puts (To, Int128'Integer_Value (Item), Aft, Exp,
+                      -Num'Small_Numerator, -Num'Small_Denominator,
+                      For0, Num'Aft);
       else
-         Aux32.Puts (To, Int32'Integer_Value (Item), Aft, Exp,
-                     Int32 (-Float'Ceiling (Num'Small)),
-                     Int32 (-Float'Ceiling (1.0 / Num'Small)),
-                     For0, Num'Aft);
+         Float_Aux.Puts (To, Long_Long_Float (Item), Aft, Exp);
       end if;
    end Put;
 
index 00990af87d26c783ae4ccc97ac37422a17b15837..142a445e555d8e04eeedeef03cf24a44d86ef79b 100644 (file)
@@ -42,12 +42,12 @@ with System.WCh_WtS;      use System.WCh_WtS;
 package body Ada.Wide_Text_IO.Fixed_IO is
 
    --  Note: we still use the floating-point I/O routines for types whose small
-   --  is not a sufficiently small integer or the reciprocal thereof. This will
-   --  result in inaccuracies for fixed point types that require more precision
-   --  than is available in Long_Long_Float.
+   --  is not the ratio of two sufficiently small integers. This will result in
+   --  inaccuracies for fixed point types that require more precision than is
+   --  available in Long_Long_Float.
 
-   subtype Int32 is Interfaces.Integer_32;
-   subtype Int64 is Interfaces.Integer_64;
+   subtype Int32 is Interfaces.Integer_32; use type Int32;
+   subtype Int64 is Interfaces.Integer_64; use type Int64;
 
    package Aux32 is new
      Ada.Wide_Text_IO.Fixed_Aux (Int32, Scan_Fixed32, Set_Image_Fixed32);
@@ -55,25 +55,63 @@ package body Ada.Wide_Text_IO.Fixed_IO is
    package Aux64 is new
      Ada.Wide_Text_IO.Fixed_Aux (Int64, Scan_Fixed64, Set_Image_Fixed64);
 
-   Exact : constant Boolean :=
-     (Float'Floor (Num'Small) = Float'Ceiling (Num'Small)
-       or else Float'Floor (1.0 / Num'Small) = Float'Ceiling (1.0 / Num'Small))
-     and then Num'Small >= 2.0**(-63)
-     and then Num'Small <= 2.0**63;
-   --  True if the exact algorithm implemented in Fixed_Aux can be used. The
-   --  condition is a Small which is either an integer or the reciprocal of an
-   --  integer with the appropriate magnitude.
-
-   Need_64 : constant Boolean :=
-     Num'Object_Size > 32
-       or else Num'Small > 2.0**31
-       or else Num'Small < 2.0**(-31);
    --  Throughout this generic body, we distinguish between the case where type
-   --  Int32 is acceptable and where type Int64 is needed. This Boolean is used
-   --  to test for these cases and since it is a constant, only code for the
-   --  relevant case will be included in the instance.
+   --  Int32 is OK and where type Int64 is OK. These boolean constants are used
+   --  to test for this, such that only code for the relevant case is included
+   --  in the instance; that's why the computation of their value must be fully
+   --  static (although it is not a static expressions in the RM sense).
 
-   E : constant Natural := 31 + 32 * Boolean'Pos (Need_64);
+   OK_Get_32 : constant Boolean :=
+     Num'Object_Size <= 32
+       and then
+         ((Num'Small_Numerator = 1 and then Num'Small_Denominator <= 2**31)
+           or else
+          (Num'Small_Denominator = 1 and then Num'Small_Numerator <= 2**31)
+           or else
+          (Num'Small_Numerator <= 2**27
+            and then Num'Small_Denominator <= 2**27));
+   --  These conditions are derived from the prerequisites of System.Value_F
+
+   OK_Put_32 : constant Boolean :=
+     Num'Object_Size <= 32
+       and then
+         ((Num'Small_Numerator = 1 and then Num'Small_Denominator <= 2**31)
+           or else
+          (Num'Small_Denominator = 1 and then Num'Small_Numerator <= 2**31)
+           or else
+          (Num'Small_Numerator < Num'Small_Denominator
+            and then Num'Small_Denominator <= 2**27)
+           or else
+          (Num'Small_Denominator < Num'Small_Numerator
+            and then Num'Small_Numerator <= 2**25));
+   --  These conditions are derived from the prerequisites of System.Image_F
+
+   OK_Get_64 : constant Boolean :=
+     Num'Object_Size <= 64
+       and then
+         ((Num'Small_Numerator = 1 and then Num'Small_Denominator <= 2**63)
+           or else
+          (Num'Small_Denominator = 1 and then Num'Small_Numerator <= 2**63)
+           or else
+          (Num'Small_Numerator <= 2**59
+            and then Num'Small_Denominator <= 2**59));
+   --  These conditions are derived from the prerequisites of System.Value_F
+
+   OK_Put_64 : constant Boolean :=
+     Num'Object_Size <= 64
+       and then
+         ((Num'Small_Numerator = 1 and then Num'Small_Denominator <= 2**63)
+           or else
+          (Num'Small_Denominator = 1 and then Num'Small_Numerator <= 2**63)
+           or else
+          (Num'Small_Numerator < Num'Small_Denominator
+            and then Num'Small_Denominator <= 2**59)
+           or else
+          (Num'Small_Denominator < Num'Small_Numerator
+            and then Num'Small_Numerator <= 2**53));
+   --  These conditions are derived from the prerequisites of System.Image_F
+
+   E : constant Natural := 63 - 32 * Boolean'Pos (OK_Put_32);
    --  T'Size - 1 for the selected Int{32,64}
 
    F0 : constant Natural := 0;
@@ -108,18 +146,18 @@ package body Ada.Wide_Text_IO.Fixed_IO is
       pragma Unsuppress (Range_Check);
 
    begin
-      if not Exact then
-         Float_Aux.Get (File, Long_Long_Float (Item), Width);
-      elsif Need_64 then
+      if OK_Get_32 then
+         Item := Num'Fixed_Value
+                   (Aux32.Get (File, Width,
+                               -Num'Small_Numerator,
+                               -Num'Small_Denominator));
+      elsif OK_Get_64 then
          Item := Num'Fixed_Value
                    (Aux64.Get (File, Width,
-                               Int64 (-Float'Ceiling (Num'Small)),
-                               Int64 (-Float'Ceiling (1.0 / Num'Small))));
+                               -Num'Small_Numerator,
+                               -Num'Small_Denominator));
       else
-         Item := Num'Fixed_Value
-                   (Aux32.Get (File, Width,
-                               Int32 (-Float'Ceiling (Num'Small)),
-                               Int32 (-Float'Ceiling (1.0 / Num'Small))));
+         Float_Aux.Get (File, Long_Long_Float (Item), Width);
       end if;
 
    exception
@@ -148,18 +186,18 @@ package body Ada.Wide_Text_IO.Fixed_IO is
       --  Aux.Gets will raise Data_Error in any case.
 
    begin
-      if not Exact then
-         Float_Aux.Gets (S, Long_Long_Float (Item), Last);
-      elsif Need_64 then
+      if OK_Get_32 then
+         Item := Num'Fixed_Value
+                   (Aux32.Gets (S, Last,
+                                -Num'Small_Numerator,
+                                -Num'Small_Denominator));
+      elsif OK_Get_64 then
          Item := Num'Fixed_Value
                    (Aux64.Gets (S, Last,
-                                Int64 (-Float'Ceiling (Num'Small)),
-                                Int64 (-Float'Ceiling (1.0 / Num'Small))));
+                                -Num'Small_Numerator,
+                                -Num'Small_Denominator));
       else
-         Item := Num'Fixed_Value
-                   (Aux32.Gets (S, Last,
-                                Int32 (-Float'Ceiling (Num'Small)),
-                                Int32 (-Float'Ceiling (1.0 / Num'Small))));
+         Float_Aux.Gets (S, Long_Long_Float (Item), Last);
       end if;
 
    exception
@@ -178,18 +216,16 @@ package body Ada.Wide_Text_IO.Fixed_IO is
       Exp  : Field := Default_Exp)
    is
    begin
-      if not Exact then
-         Float_Aux.Put (File, Long_Long_Float (Item), Fore, Aft, Exp);
-      elsif Need_64 then
+      if OK_Put_32 then
+         Aux32.Put (File, Int32'Integer_Value (Item), Fore, Aft, Exp,
+                    -Num'Small_Numerator, -Num'Small_Denominator,
+                    For0, Num'Aft);
+      elsif OK_Put_64 then
          Aux64.Put (File, Int64'Integer_Value (Item), Fore, Aft, Exp,
-                    Int64 (-Float'Ceiling (Num'Small)),
-                    Int64 (-Float'Ceiling (1.0 / Num'Small)),
+                    -Num'Small_Numerator, -Num'Small_Denominator,
                     For0, Num'Aft);
       else
-         Aux32.Put (File, Int32'Integer_Value (Item), Fore, Aft, Exp,
-                    Int32 (-Float'Ceiling (Num'Small)),
-                    Int32 (-Float'Ceiling (1.0 / Num'Small)),
-                    For0, Num'Aft);
+         Float_Aux.Put (File, Long_Long_Float (Item), Fore, Aft, Exp);
       end if;
    end Put;
 
@@ -212,18 +248,16 @@ package body Ada.Wide_Text_IO.Fixed_IO is
       S : String (To'First .. To'Last);
 
    begin
-      if not Exact then
-         Float_Aux.Puts (S, Long_Long_Float (Item), Aft, Exp);
-      elsif Need_64 then
+      if OK_Put_32 then
+         Aux32.Puts (S, Int32'Integer_Value (Item), Aft, Exp,
+                     -Num'Small_Numerator, -Num'Small_Denominator,
+                     For0, Num'Aft);
+      elsif OK_Put_64 then
          Aux64.Puts (S, Int64'Integer_Value (Item), Aft, Exp,
-                     Int64 (-Float'Ceiling (Num'Small)),
-                     Int64 (-Float'Ceiling (1.0 / Num'Small)),
+                     -Num'Small_Numerator, -Num'Small_Denominator,
                      For0, Num'Aft);
       else
-         Aux32.Puts (S, Int32'Integer_Value (Item), Aft, Exp,
-                     Int32 (-Float'Ceiling (Num'Small)),
-                     Int32 (-Float'Ceiling (1.0 / Num'Small)),
-                     For0, Num'Aft);
+         Float_Aux.Puts (S, Long_Long_Float (Item), Aft, Exp);
       end if;
 
       for J in S'Range loop
index 7607d5cccf72ec2c20d6b2a4905c0a7d2b68ead2..b4f1b1d90395735294847aa7be4e6262a43821fc 100644 (file)
@@ -44,13 +44,13 @@ with System.WCh_WtS;       use System.WCh_WtS;
 package body Ada.Wide_Text_IO.Fixed_IO is
 
    --  Note: we still use the floating-point I/O routines for types whose small
-   --  is not a sufficiently small integer or the reciprocal thereof. This will
-   --  result in inaccuracies for fixed point types that require more precision
-   --  than is available in Long_Long_Float.
+   --  is not the ratio of two sufficiently small integers. This will result in
+   --  inaccuracies for fixed point types that require more precision than is
+   --  available in Long_Long_Float.
 
-   subtype Int32  is Interfaces.Integer_32;
-   subtype Int64  is Interfaces.Integer_64;
-   subtype Int128 is Interfaces.Integer_128;
+   subtype Int32  is Interfaces.Integer_32;  use type Int32;
+   subtype Int64  is Interfaces.Integer_64;  use type Int64;
+   subtype Int128 is Interfaces.Integer_128; use type Int128;
 
    package Aux32 is new
      Ada.Wide_Text_IO.Fixed_Aux (Int32, Scan_Fixed32, Set_Image_Fixed32);
@@ -61,31 +61,90 @@ package body Ada.Wide_Text_IO.Fixed_IO is
    package Aux128 is new
      Ada.Wide_Text_IO.Fixed_Aux (Int128, Scan_Fixed128, Set_Image_Fixed128);
 
-   Exact : constant Boolean :=
-     (Float'Floor (Num'Small) = Float'Ceiling (Num'Small)
-       or else Float'Floor (1.0 / Num'Small) = Float'Ceiling (1.0 / Num'Small))
-     and then Num'Small >= 2.0**(-127)
-     and then Num'Small <= 2.0**127;
-   --  True if the exact algorithm implemented in Fixed_Aux can be used. The
-   --  condition is a Small which is either an integer or the reciprocal of an
-   --  integer with the appropriate magnitude.
-
-   Need_64 : constant Boolean :=
-     Num'Object_Size > 32
-       or else Num'Small > 2.0**31
-       or else Num'Small < 2.0**(-31);
-   Need_128 : constant Boolean :=
-     Num'Object_Size > 64
-       or else Num'Small > 2.0**63
-       or else Num'Small < 2.0**(-63);
-   --  Throughout this generic body, we distinguish between the cases where
-   --  type Int32 is acceptable, where type Int64 is acceptable, and where
-   --  type Int128 is needed. These boolean constants are used to test for
-   --  these cases and since they are constant, only code for the relevant
-   --  case will be really included in the instance.
+   --  Throughout this generic body, we distinguish between the case where type
+   --  Int32 is OK, where type Int64 is OK and where type Int128 is OK. These
+   --  boolean constants are used to test for this, such that only code for the
+   --  relevant case is included in the instance; that's why the computation of
+   --  their value must be fully static (although it is not a static expression
+   --  in the RM sense).
+
+   OK_Get_32 : constant Boolean :=
+     Num'Object_Size <= 32
+       and then
+         ((Num'Small_Numerator = 1 and then Num'Small_Denominator <= 2**31)
+           or else
+          (Num'Small_Denominator = 1 and then Num'Small_Numerator <= 2**31)
+           or else
+          (Num'Small_Numerator <= 2**27
+            and then Num'Small_Denominator <= 2**27));
+   --  These conditions are derived from the prerequisites of System.Value_F
+
+   OK_Put_32 : constant Boolean :=
+     Num'Object_Size <= 32
+       and then
+         ((Num'Small_Numerator = 1 and then Num'Small_Denominator <= 2**31)
+           or else
+          (Num'Small_Denominator = 1 and then Num'Small_Numerator <= 2**31)
+           or else
+          (Num'Small_Numerator < Num'Small_Denominator
+            and then Num'Small_Denominator <= 2**27)
+           or else
+          (Num'Small_Denominator < Num'Small_Numerator
+            and then Num'Small_Numerator <= 2**25));
+   --  These conditions are derived from the prerequisites of System.Image_F
+
+   OK_Get_64 : constant Boolean :=
+     Num'Object_Size <= 64
+       and then
+         ((Num'Small_Numerator = 1 and then Num'Small_Denominator <= 2**63)
+           or else
+          (Num'Small_Denominator = 1 and then Num'Small_Numerator <= 2**63)
+           or else
+          (Num'Small_Numerator <= 2**59
+            and then Num'Small_Denominator <= 2**59));
+   --  These conditions are derived from the prerequisites of System.Value_F
+
+   OK_Put_64 : constant Boolean :=
+     Num'Object_Size <= 64
+       and then
+         ((Num'Small_Numerator = 1 and then Num'Small_Denominator <= 2**63)
+           or else
+          (Num'Small_Denominator = 1 and then Num'Small_Numerator <= 2**63)
+           or else
+          (Num'Small_Numerator < Num'Small_Denominator
+            and then Num'Small_Denominator <= 2**59)
+           or else
+          (Num'Small_Denominator < Num'Small_Numerator
+            and then Num'Small_Numerator <= 2**53));
+   --  These conditions are derived from the prerequisites of System.Image_F
+
+   OK_Get_128 : constant Boolean :=
+     Num'Object_Size <= 128
+       and then
+         ((Num'Small_Numerator = 1 and then Num'Small_Denominator <= 2**127)
+           or else
+          (Num'Small_Denominator = 1 and then Num'Small_Numerator <= 2**127)
+           or else
+          (Num'Small_Numerator <= 2**123
+            and then Num'Small_Denominator <= 2**123));
+   --  These conditions are derived from the prerequisites of System.Value_F
+
+   OK_Put_128 : constant Boolean :=
+     Num'Object_Size <= 128
+       and then
+         ((Num'Small_Numerator = 1 and then Num'Small_Denominator <= 2**127)
+           or else
+          (Num'Small_Denominator = 1 and then Num'Small_Numerator <= 2**127)
+           or else
+          (Num'Small_Numerator < Num'Small_Denominator
+            and then Num'Small_Denominator <= 2**123)
+           or else
+          (Num'Small_Denominator < Num'Small_Numerator
+            and then Num'Small_Numerator <= 2**122));
+   --  These conditions are derived from the prerequisites of System.Image_F
 
    E : constant Natural :=
-         31 + 32 * Boolean'Pos (Need_64) + 64 * Boolean'Pos (Need_128);
+         127 - 64 * Boolean'Pos (OK_Put_64) - 32 * Boolean'Pos (OK_Put_32);
    --  T'Size - 1 for the selected Int{32,64,128}
 
    F0 : constant Natural := 0;
@@ -122,23 +181,23 @@ package body Ada.Wide_Text_IO.Fixed_IO is
       pragma Unsuppress (Range_Check);
 
    begin
-      if not Exact then
-         Float_Aux.Get (File, Long_Long_Float (Item), Width);
-      elsif Need_128 then
+      if OK_Get_32 then
          Item := Num'Fixed_Value
-                   (Aux128.Get (File, Width,
-                                Int128 (-Float'Ceiling (Num'Small)),
-                                Int128 (-Float'Ceiling (1.0 / Num'Small))));
-      elsif Need_64 then
+                   (Aux32.Get (File, Width,
+                               -Num'Small_Numerator,
+                               -Num'Small_Denominator));
+      elsif OK_Get_64 then
          Item := Num'Fixed_Value
                    (Aux64.Get (File, Width,
-                               Int64 (-Float'Ceiling (Num'Small)),
-                               Int64 (-Float'Ceiling (1.0 / Num'Small))));
-      else
+                               -Num'Small_Numerator,
+                               -Num'Small_Denominator));
+      elsif OK_Get_128 then
          Item := Num'Fixed_Value
-                   (Aux32.Get (File, Width,
-                               Int32 (-Float'Ceiling (Num'Small)),
-                               Int32 (-Float'Ceiling (1.0 / Num'Small))));
+                   (Aux128.Get (File, Width,
+                                -Num'Small_Numerator,
+                                -Num'Small_Denominator));
+      else
+         Float_Aux.Get (File, Long_Long_Float (Item), Width);
       end if;
 
    exception
@@ -167,23 +226,23 @@ package body Ada.Wide_Text_IO.Fixed_IO is
       --  Aux.Gets will raise Data_Error in any case.
 
    begin
-      if not Exact then
-         Float_Aux.Gets (S, Long_Long_Float (Item), Last);
-      elsif Need_128 then
+      if OK_Get_32 then
          Item := Num'Fixed_Value
-                   (Aux128.Gets (S, Last,
-                                 Int128 (-Float'Ceiling (Num'Small)),
-                                 Int128 (-Float'Ceiling (1.0 / Num'Small))));
-      elsif Need_64 then
+                   (Aux32.Gets (S, Last,
+                                -Num'Small_Numerator,
+                                -Num'Small_Denominator));
+      elsif OK_Get_64 then
          Item := Num'Fixed_Value
                    (Aux64.Gets (S, Last,
-                                Int64 (-Float'Ceiling (Num'Small)),
-                                Int64 (-Float'Ceiling (1.0 / Num'Small))));
-      else
+                                -Num'Small_Numerator,
+                                -Num'Small_Denominator));
+      elsif OK_Get_128 then
          Item := Num'Fixed_Value
-                   (Aux32.Gets (S, Last,
-                                Int32 (-Float'Ceiling (Num'Small)),
-                                Int32 (-Float'Ceiling (1.0 / Num'Small))));
+                   (Aux128.Gets (S, Last,
+                                 -Num'Small_Numerator,
+                                 -Num'Small_Denominator));
+      else
+         Float_Aux.Gets (S, Long_Long_Float (Item), Last);
       end if;
 
    exception
@@ -202,23 +261,20 @@ package body Ada.Wide_Text_IO.Fixed_IO is
       Exp  : Field := Default_Exp)
    is
    begin
-      if not Exact then
-         Float_Aux.Put (File, Long_Long_Float (Item), Fore, Aft, Exp);
-      elsif Need_128 then
-         Aux128.Put (File, Int128'Integer_Value (Item), Fore, Aft, Exp,
-                     Int128 (-Float'Ceiling (Num'Small)),
-                     Int128 (-Float'Ceiling (1.0 / Num'Small)),
-                     For0, Num'Aft);
-      elsif Need_64 then
+      if OK_Put_32 then
+         Aux32.Put (File, Int32'Integer_Value (Item), Fore, Aft, Exp,
+                    -Num'Small_Numerator, -Num'Small_Denominator,
+                    For0, Num'Aft);
+      elsif OK_Put_64 then
          Aux64.Put (File, Int64'Integer_Value (Item), Fore, Aft, Exp,
-                    Int64 (-Float'Ceiling (Num'Small)),
-                    Int64 (-Float'Ceiling (1.0 / Num'Small)),
+                    -Num'Small_Numerator, -Num'Small_Denominator,
                     For0, Num'Aft);
+      elsif OK_Put_128 then
+         Aux128.Put (File, Int128'Integer_Value (Item), Fore, Aft, Exp,
+                     -Num'Small_Numerator, -Num'Small_Denominator,
+                     For0, Num'Aft);
       else
-         Aux32.Put (File, Int32'Integer_Value (Item), Fore, Aft, Exp,
-                    Int32 (-Float'Ceiling (Num'Small)),
-                    Int32 (-Float'Ceiling (1.0 / Num'Small)),
-                    For0, Num'Aft);
+         Float_Aux.Put (File, Long_Long_Float (Item), Fore, Aft, Exp);
       end if;
    end Put;
 
@@ -241,24 +297,22 @@ package body Ada.Wide_Text_IO.Fixed_IO is
       S : String (To'First .. To'Last);
 
    begin
-      if not Exact then
-         Float_Aux.Puts (S, Long_Long_Float (Item), Aft, Exp);
-      elsif Need_128 then
-         Aux128.Puts (S, Int128'Integer_Value (Item), Aft, Exp,
-                      Int128 (-Float'Ceiling (Num'Small)),
-                      Int128 (-Float'Ceiling (1.0 / Num'Small)),
-                      For0, Num'Aft);
-      elsif Need_64 then
+      if OK_Put_32 then
+         Aux32.Puts (S, Int32'Integer_Value (Item), Aft, Exp,
+                     -Num'Small_Numerator, -Num'Small_Denominator,
+                     For0, Num'Aft);
+      elsif OK_Put_64 then
          Aux64.Puts (S, Int64'Integer_Value (Item), Aft, Exp,
-                     Int64 (-Float'Ceiling (Num'Small)),
-                     Int64 (-Float'Ceiling (1.0 / Num'Small)),
+                     -Num'Small_Numerator, -Num'Small_Denominator,
                      For0, Num'Aft);
+      elsif OK_Put_128 then
+         Aux128.Puts (S, Int128'Integer_Value (Item), Aft, Exp,
+                      -Num'Small_Numerator, -Num'Small_Denominator,
+                      For0, Num'Aft);
       else
-         Aux32.Puts (S, Int32'Integer_Value (Item), Aft, Exp,
-                     Int32 (-Float'Ceiling (Num'Small)),
-                     Int32 (-Float'Ceiling (1.0 / Num'Small)),
-                     For0, Num'Aft);
+         Float_Aux.Puts (S, Long_Long_Float (Item), Aft, Exp);
       end if;
+
       for J in S'Range loop
          To (J) := Wide_Character'Val (Character'Pos (S (J)));
       end loop;
index 16e552d9733cc81b76079d42e7094b626c4eb320..c666c7b58b322cad363416615a1e75c37649b66e 100644 (file)
@@ -42,12 +42,12 @@ with System.WCh_WtS;      use System.WCh_WtS;
 package body Ada.Wide_Wide_Text_IO.Fixed_IO is
 
    --  Note: we still use the floating-point I/O routines for types whose small
-   --  is not a sufficiently small integer or the reciprocal thereof. This will
-   --  result in inaccuracies for fixed point types that require more precision
-   --  than is available in Long_Long_Float.
+   --  is not the ratio of two sufficiently small integers. This will result in
+   --  inaccuracies for fixed point types that require more precision than is
+   --  available in Long_Long_Float.
 
-   subtype Int32 is Interfaces.Integer_32;
-   subtype Int64 is Interfaces.Integer_64;
+   subtype Int32 is Interfaces.Integer_32; use type Int32;
+   subtype Int64 is Interfaces.Integer_64; use type Int64;
 
    package Aux32 is new
      Ada.Wide_Wide_Text_IO.Fixed_Aux (Int32, Scan_Fixed32, Set_Image_Fixed32);
@@ -55,25 +55,63 @@ package body Ada.Wide_Wide_Text_IO.Fixed_IO is
    package Aux64 is new
      Ada.Wide_Wide_Text_IO.Fixed_Aux (Int64, Scan_Fixed64, Set_Image_Fixed64);
 
-   Exact : constant Boolean :=
-     (Float'Floor (Num'Small) = Float'Ceiling (Num'Small)
-       or else Float'Floor (1.0 / Num'Small) = Float'Ceiling (1.0 / Num'Small))
-     and then Num'Small >= 2.0**(-63)
-     and then Num'Small <= 2.0**63;
-   --  True if the exact algorithm implemented in Fixed_Aux can be used. The
-   --  condition is a Small which is either an integer or the reciprocal of an
-   --  integer with the appropriate magnitude.
-
-   Need_64 : constant Boolean :=
-     Num'Object_Size > 32
-       or else Num'Small > 2.0**31
-       or else Num'Small < 2.0**(-31);
    --  Throughout this generic body, we distinguish between the case where type
-   --  Int32 is acceptable and where type Int64 is needed. This Boolean is used
-   --  to test for these cases and since it is a constant, only code for the
-   --  relevant case will be included in the instance.
+   --  Int32 is OK and where type Int64 is OK. These boolean constants are used
+   --  to test for this, such that only code for the relevant case is included
+   --  in the instance; that's why the computation of their value must be fully
+   --  static (although it is not a static expressions in the RM sense).
 
-   E : constant Natural := 31 + 32 * Boolean'Pos (Need_64);
+   OK_Get_32 : constant Boolean :=
+     Num'Object_Size <= 32
+       and then
+         ((Num'Small_Numerator = 1 and then Num'Small_Denominator <= 2**31)
+           or else
+          (Num'Small_Denominator = 1 and then Num'Small_Numerator <= 2**31)
+           or else
+          (Num'Small_Numerator <= 2**27
+            and then Num'Small_Denominator <= 2**27));
+   --  These conditions are derived from the prerequisites of System.Value_F
+
+   OK_Put_32 : constant Boolean :=
+     Num'Object_Size <= 32
+       and then
+         ((Num'Small_Numerator = 1 and then Num'Small_Denominator <= 2**31)
+           or else
+          (Num'Small_Denominator = 1 and then Num'Small_Numerator <= 2**31)
+           or else
+          (Num'Small_Numerator < Num'Small_Denominator
+            and then Num'Small_Denominator <= 2**27)
+           or else
+          (Num'Small_Denominator < Num'Small_Numerator
+            and then Num'Small_Numerator <= 2**25));
+   --  These conditions are derived from the prerequisites of System.Image_F
+
+   OK_Get_64 : constant Boolean :=
+     Num'Object_Size <= 64
+       and then
+         ((Num'Small_Numerator = 1 and then Num'Small_Denominator <= 2**63)
+           or else
+          (Num'Small_Denominator = 1 and then Num'Small_Numerator <= 2**63)
+           or else
+          (Num'Small_Numerator <= 2**59
+            and then Num'Small_Denominator <= 2**59));
+   --  These conditions are derived from the prerequisites of System.Value_F
+
+   OK_Put_64 : constant Boolean :=
+     Num'Object_Size <= 64
+       and then
+         ((Num'Small_Numerator = 1 and then Num'Small_Denominator <= 2**63)
+           or else
+          (Num'Small_Denominator = 1 and then Num'Small_Numerator <= 2**63)
+           or else
+          (Num'Small_Numerator < Num'Small_Denominator
+            and then Num'Small_Denominator <= 2**59)
+           or else
+          (Num'Small_Denominator < Num'Small_Numerator
+            and then Num'Small_Numerator <= 2**53));
+   --  These conditions are derived from the prerequisites of System.Image_F
+
+   E : constant Natural := 63 - 32 * Boolean'Pos (OK_Put_32);
    --  T'Size - 1 for the selected Int{32,64}
 
    F0 : constant Natural := 0;
@@ -108,18 +146,18 @@ package body Ada.Wide_Wide_Text_IO.Fixed_IO is
       pragma Unsuppress (Range_Check);
 
    begin
-      if not Exact then
-         Float_Aux.Get (File, Long_Long_Float (Item), Width);
-      elsif Need_64 then
+      if OK_Get_32 then
+         Item := Num'Fixed_Value
+                   (Aux32.Get (File, Width,
+                               -Num'Small_Numerator,
+                               -Num'Small_Denominator));
+      elsif OK_Get_64 then
          Item := Num'Fixed_Value
                    (Aux64.Get (File, Width,
-                               Int64 (-Float'Ceiling (Num'Small)),
-                               Int64 (-Float'Ceiling (1.0 / Num'Small))));
+                               -Num'Small_Numerator,
+                               -Num'Small_Denominator));
       else
-         Item := Num'Fixed_Value
-                   (Aux32.Get (File, Width,
-                               Int32 (-Float'Ceiling (Num'Small)),
-                               Int32 (-Float'Ceiling (1.0 / Num'Small))));
+         Float_Aux.Get (File, Long_Long_Float (Item), Width);
       end if;
 
    exception
@@ -148,18 +186,18 @@ package body Ada.Wide_Wide_Text_IO.Fixed_IO is
       --  Aux.Gets will raise Data_Error in any case.
 
    begin
-      if not Exact then
-         Float_Aux.Gets (S, Long_Long_Float (Item), Last);
-      elsif Need_64 then
+      if OK_Get_32 then
+         Item := Num'Fixed_Value
+                   (Aux32.Gets (S, Last,
+                                -Num'Small_Numerator,
+                                -Num'Small_Denominator));
+      elsif OK_Get_64 then
          Item := Num'Fixed_Value
                    (Aux64.Gets (S, Last,
-                                Int64 (-Float'Ceiling (Num'Small)),
-                                Int64 (-Float'Ceiling (1.0 / Num'Small))));
+                                -Num'Small_Numerator,
+                                -Num'Small_Denominator));
       else
-         Item := Num'Fixed_Value
-                   (Aux32.Gets (S, Last,
-                                Int32 (-Float'Ceiling (Num'Small)),
-                                Int32 (-Float'Ceiling (1.0 / Num'Small))));
+         Float_Aux.Gets (S, Long_Long_Float (Item), Last);
       end if;
 
    exception
@@ -178,18 +216,16 @@ package body Ada.Wide_Wide_Text_IO.Fixed_IO is
       Exp  : Field := Default_Exp)
    is
    begin
-      if not Exact then
-         Float_Aux.Put (File, Long_Long_Float (Item), Fore, Aft, Exp);
-      elsif Need_64 then
+      if OK_Put_32 then
+         Aux32.Put (File, Int32'Integer_Value (Item), Fore, Aft, Exp,
+                    -Num'Small_Numerator, -Num'Small_Denominator,
+                    For0, Num'Aft);
+      elsif OK_Put_64 then
          Aux64.Put (File, Int64'Integer_Value (Item), Fore, Aft, Exp,
-                    Int64 (-Float'Ceiling (Num'Small)),
-                    Int64 (-Float'Ceiling (1.0 / Num'Small)),
+                    -Num'Small_Numerator, -Num'Small_Denominator,
                     For0, Num'Aft);
       else
-         Aux32.Put (File, Int32'Integer_Value (Item), Fore, Aft, Exp,
-                    Int32 (-Float'Ceiling (Num'Small)),
-                    Int32 (-Float'Ceiling (1.0 / Num'Small)),
-                    For0, Num'Aft);
+         Float_Aux.Put (File, Long_Long_Float (Item), Fore, Aft, Exp);
       end if;
    end Put;
 
@@ -212,18 +248,16 @@ package body Ada.Wide_Wide_Text_IO.Fixed_IO is
       S : String (To'First .. To'Last);
 
    begin
-      if not Exact then
-         Float_Aux.Puts (S, Long_Long_Float (Item), Aft, Exp);
-      elsif Need_64 then
+      if OK_Put_32 then
+         Aux32.Puts (S, Int32'Integer_Value (Item), Aft, Exp,
+                     -Num'Small_Numerator, -Num'Small_Denominator,
+                     For0, Num'Aft);
+      elsif OK_Put_64 then
          Aux64.Puts (S, Int64'Integer_Value (Item), Aft, Exp,
-                     Int64 (-Float'Ceiling (Num'Small)),
-                     Int64 (-Float'Ceiling (1.0 / Num'Small)),
+                     -Num'Small_Numerator, -Num'Small_Denominator,
                      For0, Num'Aft);
       else
-         Aux32.Puts (S, Int32'Integer_Value (Item), Aft, Exp,
-                     Int32 (-Float'Ceiling (Num'Small)),
-                     Int32 (-Float'Ceiling (1.0 / Num'Small)),
-                     For0, Num'Aft);
+         Float_Aux.Puts (S, Long_Long_Float (Item), Aft, Exp);
       end if;
 
       for J in S'Range loop
index 02ad61372ef4cfcf5163087f0b5834788765f645..47041466a02c41d1c67115fde1996113e476f372 100644 (file)
@@ -44,13 +44,13 @@ with System.WCh_WtS;       use System.WCh_WtS;
 package body Ada.Wide_Wide_Text_IO.Fixed_IO is
 
    --  Note: we still use the floating-point I/O routines for types whose small
-   --  is not a sufficiently small integer or the reciprocal thereof. This will
-   --  result in inaccuracies for fixed point types that require more precision
-   --  than is available in Long_Long_Float.
+   --  is not the ratio of two sufficiently small integers. This will result in
+   --  inaccuracies for fixed point types that require more precision than is
+   --  available in Long_Long_Float.
 
-   subtype Int32  is Interfaces.Integer_32;
-   subtype Int64  is Interfaces.Integer_64;
-   subtype Int128 is Interfaces.Integer_128;
+   subtype Int32  is Interfaces.Integer_32;  use type Int32;
+   subtype Int64  is Interfaces.Integer_64;  use type Int64;
+   subtype Int128 is Interfaces.Integer_128; use type Int128;
 
    package Aux32 is new
      Ada.Wide_Wide_Text_IO.Fixed_Aux (Int32, Scan_Fixed32, Set_Image_Fixed32);
@@ -62,31 +62,90 @@ package body Ada.Wide_Wide_Text_IO.Fixed_IO is
      Ada.Wide_Wide_Text_IO.Fixed_Aux
       (Int128, Scan_Fixed128, Set_Image_Fixed128);
 
-   Exact : constant Boolean :=
-     (Float'Floor (Num'Small) = Float'Ceiling (Num'Small)
-       or else Float'Floor (1.0 / Num'Small) = Float'Ceiling (1.0 / Num'Small))
-     and then Num'Small >= 2.0**(-127)
-     and then Num'Small <= 2.0**127;
-   --  True if the exact algorithm implemented in Fixed_Aux can be used. The
-   --  condition is a Small which is either an integer or the reciprocal of an
-   --  integer with the appropriate magnitude.
-
-   Need_64 : constant Boolean :=
-     Num'Object_Size > 32
-       or else Num'Small > 2.0**31
-       or else Num'Small < 2.0**(-31);
-   Need_128 : constant Boolean :=
-     Num'Object_Size > 64
-       or else Num'Small > 2.0**63
-       or else Num'Small < 2.0**(-63);
-   --  Throughout this generic body, we distinguish between the cases where
-   --  type Int32 is acceptable, where type Int64 is acceptable, and where
-   --  type Int128 is needed. These boolean constants are used to test for
-   --  these cases and since they are constant, only code for the relevant
-   --  case will be really included in the instance.
+   --  Throughout this generic body, we distinguish between the case where type
+   --  Int32 is OK, where type Int64 is OK and where type Int128 is OK. These
+   --  boolean constants are used to test for this, such that only code for the
+   --  relevant case is included in the instance; that's why the computation of
+   --  their value must be fully static (although it is not a static expression
+   --  in the RM sense).
+
+   OK_Get_32 : constant Boolean :=
+     Num'Object_Size <= 32
+       and then
+         ((Num'Small_Numerator = 1 and then Num'Small_Denominator <= 2**31)
+           or else
+          (Num'Small_Denominator = 1 and then Num'Small_Numerator <= 2**31)
+           or else
+          (Num'Small_Numerator <= 2**27
+            and then Num'Small_Denominator <= 2**27));
+   --  These conditions are derived from the prerequisites of System.Value_F
+
+   OK_Put_32 : constant Boolean :=
+     Num'Object_Size <= 32
+       and then
+         ((Num'Small_Numerator = 1 and then Num'Small_Denominator <= 2**31)
+           or else
+          (Num'Small_Denominator = 1 and then Num'Small_Numerator <= 2**31)
+           or else
+          (Num'Small_Numerator < Num'Small_Denominator
+            and then Num'Small_Denominator <= 2**27)
+           or else
+          (Num'Small_Denominator < Num'Small_Numerator
+            and then Num'Small_Numerator <= 2**25));
+   --  These conditions are derived from the prerequisites of System.Image_F
+
+   OK_Get_64 : constant Boolean :=
+     Num'Object_Size <= 64
+       and then
+         ((Num'Small_Numerator = 1 and then Num'Small_Denominator <= 2**63)
+           or else
+          (Num'Small_Denominator = 1 and then Num'Small_Numerator <= 2**63)
+           or else
+          (Num'Small_Numerator <= 2**59
+            and then Num'Small_Denominator <= 2**59));
+   --  These conditions are derived from the prerequisites of System.Value_F
+
+   OK_Put_64 : constant Boolean :=
+     Num'Object_Size <= 64
+       and then
+         ((Num'Small_Numerator = 1 and then Num'Small_Denominator <= 2**63)
+           or else
+          (Num'Small_Denominator = 1 and then Num'Small_Numerator <= 2**63)
+           or else
+          (Num'Small_Numerator < Num'Small_Denominator
+            and then Num'Small_Denominator <= 2**59)
+           or else
+          (Num'Small_Denominator < Num'Small_Numerator
+            and then Num'Small_Numerator <= 2**53));
+   --  These conditions are derived from the prerequisites of System.Image_F
+
+   OK_Get_128 : constant Boolean :=
+     Num'Object_Size <= 128
+       and then
+         ((Num'Small_Numerator = 1 and then Num'Small_Denominator <= 2**127)
+           or else
+          (Num'Small_Denominator = 1 and then Num'Small_Numerator <= 2**127)
+           or else
+          (Num'Small_Numerator <= 2**123
+            and then Num'Small_Denominator <= 2**123));
+   --  These conditions are derived from the prerequisites of System.Value_F
+
+   OK_Put_128 : constant Boolean :=
+     Num'Object_Size <= 128
+       and then
+         ((Num'Small_Numerator = 1 and then Num'Small_Denominator <= 2**127)
+           or else
+          (Num'Small_Denominator = 1 and then Num'Small_Numerator <= 2**127)
+           or else
+          (Num'Small_Numerator < Num'Small_Denominator
+            and then Num'Small_Denominator <= 2**123)
+           or else
+          (Num'Small_Denominator < Num'Small_Numerator
+            and then Num'Small_Numerator <= 2**122));
+   --  These conditions are derived from the prerequisites of System.Image_F
 
    E : constant Natural :=
-         31 + 32 * Boolean'Pos (Need_64) + 64 * Boolean'Pos (Need_128);
+         127 - 64 * Boolean'Pos (OK_Put_64) - 32 * Boolean'Pos (OK_Put_32);
    --  T'Size - 1 for the selected Int{32,64,128}
 
    F0 : constant Natural := 0;
@@ -123,23 +182,23 @@ package body Ada.Wide_Wide_Text_IO.Fixed_IO is
       pragma Unsuppress (Range_Check);
 
    begin
-      if not Exact then
-         Float_Aux.Get (File, Long_Long_Float (Item), Width);
-      elsif Need_128 then
+      if OK_Get_32 then
          Item := Num'Fixed_Value
-                   (Aux128.Get (File, Width,
-                                Int128 (-Float'Ceiling (Num'Small)),
-                                Int128 (-Float'Ceiling (1.0 / Num'Small))));
-      elsif Need_64 then
+                   (Aux32.Get (File, Width,
+                               -Num'Small_Numerator,
+                               -Num'Small_Denominator));
+      elsif OK_Get_64 then
          Item := Num'Fixed_Value
                    (Aux64.Get (File, Width,
-                               Int64 (-Float'Ceiling (Num'Small)),
-                               Int64 (-Float'Ceiling (1.0 / Num'Small))));
-      else
+                               -Num'Small_Numerator,
+                               -Num'Small_Denominator));
+      elsif OK_Get_128 then
          Item := Num'Fixed_Value
-                   (Aux32.Get (File, Width,
-                               Int32 (-Float'Ceiling (Num'Small)),
-                               Int32 (-Float'Ceiling (1.0 / Num'Small))));
+                   (Aux128.Get (File, Width,
+                                -Num'Small_Numerator,
+                                -Num'Small_Denominator));
+      else
+         Float_Aux.Get (File, Long_Long_Float (Item), Width);
       end if;
 
    exception
@@ -168,23 +227,23 @@ package body Ada.Wide_Wide_Text_IO.Fixed_IO is
       --  Aux.Gets will raise Data_Error in any case.
 
    begin
-      if not Exact then
-         Float_Aux.Gets (S, Long_Long_Float (Item), Last);
-      elsif Need_128 then
+      if OK_Get_32 then
          Item := Num'Fixed_Value
-                   (Aux128.Gets (S, Last,
-                                 Int128 (-Float'Ceiling (Num'Small)),
-                                 Int128 (-Float'Ceiling (1.0 / Num'Small))));
-      elsif Need_64 then
+                   (Aux32.Gets (S, Last,
+                                -Num'Small_Numerator,
+                                -Num'Small_Denominator));
+      elsif OK_Get_64 then
          Item := Num'Fixed_Value
                    (Aux64.Gets (S, Last,
-                                Int64 (-Float'Ceiling (Num'Small)),
-                                Int64 (-Float'Ceiling (1.0 / Num'Small))));
-      else
+                                -Num'Small_Numerator,
+                                -Num'Small_Denominator));
+      elsif OK_Get_128 then
          Item := Num'Fixed_Value
-                   (Aux32.Gets (S, Last,
-                                Int32 (-Float'Ceiling (Num'Small)),
-                                Int32 (-Float'Ceiling (1.0 / Num'Small))));
+                   (Aux128.Gets (S, Last,
+                                 -Num'Small_Numerator,
+                                 -Num'Small_Denominator));
+      else
+         Float_Aux.Gets (S, Long_Long_Float (Item), Last);
       end if;
 
    exception
@@ -203,23 +262,20 @@ package body Ada.Wide_Wide_Text_IO.Fixed_IO is
       Exp  : Field := Default_Exp)
    is
    begin
-      if not Exact then
-         Float_Aux.Put (File, Long_Long_Float (Item), Fore, Aft, Exp);
-      elsif Need_128 then
-         Aux128.Put (File, Int128'Integer_Value (Item), Fore, Aft, Exp,
-                     Int128 (-Float'Ceiling (Num'Small)),
-                     Int128 (-Float'Ceiling (1.0 / Num'Small)),
-                     For0, Num'Aft);
-      elsif Need_64 then
+      if OK_Put_32 then
+         Aux32.Put (File, Int32'Integer_Value (Item), Fore, Aft, Exp,
+                    -Num'Small_Numerator, -Num'Small_Denominator,
+                    For0, Num'Aft);
+      elsif OK_Put_64 then
          Aux64.Put (File, Int64'Integer_Value (Item), Fore, Aft, Exp,
-                    Int64 (-Float'Ceiling (Num'Small)),
-                    Int64 (-Float'Ceiling (1.0 / Num'Small)),
+                    -Num'Small_Numerator, -Num'Small_Denominator,
                     For0, Num'Aft);
+      elsif OK_Put_128 then
+         Aux128.Put (File, Int128'Integer_Value (Item), Fore, Aft, Exp,
+                     -Num'Small_Numerator, -Num'Small_Denominator,
+                     For0, Num'Aft);
       else
-         Aux32.Put (File, Int32'Integer_Value (Item), Fore, Aft, Exp,
-                    Int32 (-Float'Ceiling (Num'Small)),
-                    Int32 (-Float'Ceiling (1.0 / Num'Small)),
-                    For0, Num'Aft);
+         Float_Aux.Put (File, Long_Long_Float (Item), Fore, Aft, Exp);
       end if;
    end Put;
 
@@ -242,23 +298,20 @@ package body Ada.Wide_Wide_Text_IO.Fixed_IO is
       S : String (To'First .. To'Last);
 
    begin
-      if not Exact then
-         Float_Aux.Puts (S, Long_Long_Float (Item), Aft, Exp);
-      elsif Need_128 then
-         Aux128.Puts (S, Int128'Integer_Value (Item), Aft, Exp,
-                      Int128 (-Float'Ceiling (Num'Small)),
-                      Int128 (-Float'Ceiling (1.0 / Num'Small)),
-                      For0, Num'Aft);
-      elsif Need_64 then
+      if OK_Put_32 then
+         Aux32.Puts (S, Int32'Integer_Value (Item), Aft, Exp,
+                     -Num'Small_Numerator, -Num'Small_Denominator,
+                     For0, Num'Aft);
+      elsif OK_Put_64 then
          Aux64.Puts (S, Int64'Integer_Value (Item), Aft, Exp,
-                     Int64 (-Float'Ceiling (Num'Small)),
-                     Int64 (-Float'Ceiling (1.0 / Num'Small)),
+                     -Num'Small_Numerator, -Num'Small_Denominator,
                      For0, Num'Aft);
+      elsif OK_Put_128 then
+         Aux128.Puts (S, Int128'Integer_Value (Item), Aft, Exp,
+                      -Num'Small_Numerator, -Num'Small_Denominator,
+                      For0, Num'Aft);
       else
-         Aux32.Puts (S, Int32'Integer_Value (Item), Aft, Exp,
-                     Int32 (-Float'Ceiling (Num'Small)),
-                     Int32 (-Float'Ceiling (1.0 / Num'Small)),
-                     For0, Num'Aft);
+         Float_Aux.Puts (S, Long_Long_Float (Item), Aft, Exp);
       end if;
 
       for J in S'Range loop
index d580ec82a2a660add7a9af64f2e09c8580a8a5ca..aaa117f489bf0d56ae23408927512be5f4846c71 100644 (file)
@@ -43,7 +43,8 @@ package System.Fore_Fixed_128 is
 
    package Impl is new Fore_F (Int128, Arith_128.Scaled_Divide128);
 
-   function Fore_Fixed128 (Lo, Hi, Num, Den : Int128) return Natural
+   function Fore_Fixed128
+     (Lo, Hi, Num, Den : Int128; Scale : Integer) return Natural
      renames Impl.Fore_Fixed;
 
 end System.Fore_Fixed_128;
index 5e48f555dea4afd4f219a1e7ed0711f56816d4a3..cf94fb8ce7b616c083c94935377041613d73e7cb 100644 (file)
@@ -43,7 +43,8 @@ package System.Fore_Fixed_32 is
 
    package Impl is new Fore_F (Int32, Arith_32.Scaled_Divide32);
 
-   function Fore_Fixed32 (Lo, Hi, Num, Den : Int32) return Natural
+   function Fore_Fixed32
+     (Lo, Hi, Num, Den : Int32; Scale : Integer) return Natural
      renames Impl.Fore_Fixed;
 
 end System.Fore_Fixed_32;
index 588fac48428ba0faaf781f0ff52bc0bcb39300f3..cdde2043ca4cb0868f63aca612f3a7bcc166e97b 100644 (file)
@@ -43,7 +43,8 @@ package System.Fore_Fixed_64 is
 
    package Impl is new Fore_F (Int64, Arith_64.Scaled_Divide64);
 
-   function Fore_Fixed64 (Lo, Hi, Num, Den : Int64) return Natural
+   function Fore_Fixed64
+     (Lo, Hi, Num, Den : Int64; Scale : Integer) return Natural
      renames Impl.Fore_Fixed;
 
 end System.Fore_Fixed_64;
index b63d8d4b5b03d599f942a419b847277095d5755a..c9c476dfccaf946446bcae22715c36c78e172fda 100644 (file)
@@ -39,16 +39,22 @@ package body System.Fore_F is
    --  and has 19 digits, but the maximum number of 9's that can be represented
    --  in Integer_64 is only 18.
 
-   --  The prerequisite of the implementation is that the scaled divide does
-   --  not overflow, which means that the absolute value of the bounds of
+   --  The first prerequisite of the implementation is that the scaled divide
+   --  does not overflow, which means that the absolute value of the bounds of
    --  the subtype must be smaller than 10**Maxdigs * 2**(Int'Size - 1).
    --  Otherwise Constraint_Error is raised by the scaled divide operation.
 
+   --  The second prerequisite is that the computation of the operands does not
+   --  overflow, which means that, if the small is larger than 1, it is either
+   --  an integer or its numerator and denominator must be both smaller than
+   --  the power 10**(Maxdigs - 1).
+
    ----------------
    -- Fore_Fixed --
    ----------------
 
-   function Fore_Fixed (Lo, Hi, Num, Den : Int) return Natural is
+   function Fore_Fixed (Lo, Hi, Num, Den : Int; Scale : Integer) return Natural
+   is
       pragma Assert (Num < 0 and then Den < 0);
       --  Accept only negative numbers to allow -2**(Int'Size - 1)
 
@@ -59,39 +65,60 @@ package body System.Fore_F is
       T : Int := Int'Min (Negative_Abs (Lo), Negative_Abs (Hi));
       F : Natural;
 
+      Q, R : Int;
+
    begin
       --  Initial value of 2 allows for sign and mandatory single digit
 
       F := 2;
 
-      --  If the Small is 1, then no scaling is needed
+      --  The easy case is when Num is not larger than Den in magnitude,
+      --  i.e. if S = Num / Den, then S <= 1, in which case we can just
+      --  compute the product Q = T * S.
+
+      if Num >= Den then
+         Scaled_Divide (T, Num, Den, Q, R, Round => False);
+         T := Q;
+
+      --  Otherwise S > 1 and thus Scale <= 0, compute Q and R such that
+
+      --    T * Num = Q * (Den * 10**(-D)) + R
 
-      if Num = -1 and then Den = -1 then
-         null;
+      --  with
 
-      --  The easy case is when the Small is the reciprocal of an integer
+      --    D = Integer'Max (-Maxdigs, Scale - 1)
 
-      elsif Num = -1 then
-         T := T / Den;
+      --  then reason on Q if it is non-zero or else on R / Den.
 
-      --  If the Small is an integer, compute Q and R such that
+      --  This works only if Den * 10**(-D) does not overflow, which is true
+      --  if Den = 1. Suppose that Num corresponds to the maximum value of -D,
+      --  i.e. Maxdigs and 10**(-D) = 10**Maxdigs. If you change Den into 10,
+      --  then S becomes 10 times smaller and, therefore, Scale is incremented
+      --  by 1, which means that -D is decremented by 1 provided that Scale was
+      --  initially not smaller than 1 - Maxdigs, so the multiplication still
+      --  does not overflow. But you need to reach 10 to trigger this effect,
+      --  which means that a leeway of 10 is required, so let's restrict this
+      --  to a Num for which 10**(-D) <= 10**(Maxdigs - 1). To sum up, if S is
+      --  the ratio of two integers with
 
-      --    T * Small = Q * 10**Maxdigs - R
+      --    1 < Den < Num <= B
 
-      --  then reason on Q if it is non-zero or else on R.
+      --  where B is a fixed limit, then the multiplication does not overflow.
+      --  B can be taken as the largest integer Small such that D = 1 - Maxdigs
+      --  i.e. such that Scale = 2 - Maxdigs, which is 10**(Maxdigs - 1) - 1.
 
-      else pragma Assert (Den = -1);
+      else
          declare
-            Q, R : Int;
+            D : constant Integer := Integer'Max (-Maxdigs, Scale - 1);
 
          begin
-            Scaled_Divide (T, Num, -10**Maxdigs, Q, R, Round => False);
+            Scaled_Divide (T, Num, Den * 10**(-D), Q, R, Round => False);
 
             if Q /= 0 then
                T := Q;
-               F := F + Maxdigs;
+               F := F - D;
             else
-               T := R;
+               T := R / Den;
             end if;
          end;
       end if;
index 15fcb72fddb38bf6e27c010cf19bd22fbf746c02..cf6d983d20ae130fa0aca624f6ff342aa9fb7c03 100644 (file)
@@ -30,7 +30,7 @@
 ------------------------------------------------------------------------------
 
 --  This package contains the routine used for the Fore attribute of ordinary
---  fixed point types whose Small is an integer or its reciprocal.
+--  fixed point types whose Small is the ratio of two Int values.
 
 generic
 
@@ -44,8 +44,11 @@ generic
 package System.Fore_F is
    pragma Pure;
 
-   function Fore_Fixed (Lo, Hi, Num, Den : Int) return Natural;
-   --  Compute Fore attribute value for an ordinary fixed point type with small
-   --  Num/Den. The parameters are the low and high bounds (in units of small).
+   function Fore_Fixed
+     (Lo, Hi, Num, Den : Int; Scale : Integer) return Natural;
+   --  Compute Fore attribute value for an ordinary fixed point type. The
+   --  parameters are the low and high bounds (in units of small), the small
+   --  Num/Den and the associated scale, which is the smallest integer N such
+   --  that 10**N * (Num/Den) is greater or equal to 1, if it is nonpositive.
 
 end System.Fore_F;
index 2b5a54520a2628da2e187b6724f9f88f97692c74..94a7a2f8ac351a9f3f7fa8a331975f06a1460447 100644 (file)
@@ -34,6 +34,26 @@ with System.Img_Util; use System.Img_Util;
 
 package body System.Image_F is
 
+   Maxdigs : constant Natural := Int'Width - 2;
+   --  Maximum number of decimal digits that can be represented in an Int.
+   --  The "-2" accounts for the sign and one extra digit, since we need the
+   --  maximum number of 9's that can be represented, e.g. for the 64-bit case,
+   --  Integer_64'Width is 20 since the maximum value is approximately 9.2E+18
+   --  and has 19 digits, but the maximum number of 9's that can be represented
+   --  in Integer_64 is only 18.
+
+   --  The first prerequisite of the implementation is that the first scaled
+   --  divide does not overflow, which means that the absolute value of the
+   --  input X must always be smaller than 10**Maxdigs * 2**(Int'Size - 1).
+   --  Otherwise Constraint_Error is raised by the scaled divide operation.
+
+   --  The second prerequisite of the implementation is that the computation
+   --  of the operands does not overflow when the small is neither an integer
+   --  nor the reciprocal of an integer, which means that its numerator and
+   --  denominator must be smaller than 10**(2*Maxdigs-1) / 2**(Int'Size - 1)
+   --  if the small is larger than 1, and smaller than 2**(Int'Size - 1) / 10
+   --  if the small is smaller than 1.
+
    package Image_I is new System.Image_I (Int);
 
    procedure Set_Image_Integer
@@ -113,6 +133,61 @@ package body System.Image_F is
    --  in the denominator for the extra decimal scaling required, so case (3)
    --  will not overflow.
 
+   --  In fact this reasoning can be generalized to most S which are the ratio
+   --  of two integers with bounded magnitude. Let S = Num / Den and rewrite
+   --  case (1) above where Den = 1 into
+
+   --    (1b)   Y = -Num and Z = -Den * 10**(-D)
+
+   --  Suppose that Num corresponds to the maximum value of -D, i.e. 18 and
+   --  10**(-D) = 10**18. If you change Den into 10, then S becomes 10 times
+   --  smaller and, therefore, Fore is decremented by 1, which means that -D
+   --  is as well, provided that Fore was initially not larger than 37, so the
+   --  multiplication for Z still does not overflow. But you need to reach 10
+   --  to trigger this effect, which means that a leeway of 10 is required, so
+   --  let's restrict this to a Num for which 10**(-D) <= 10**17. To summarize
+   --  this case, if S is the ratio of two integers with
+
+   --    Den < Num <= B1
+
+   --  where B1 is a fixed limit, then case (1b) does not overflow. B1 can be
+   --  taken as the largest integer Small such that D = -17, i.e. Fore = 36,
+   --  which means that B1 * 2.0**63 must be smaller than 10**35.
+
+   --  Let's continue and rewrite case (2) above when Num = 1 into
+
+   --    (2b)   Y = -Num * 10**D and Z = -Den, for D >= 0
+
+   --  Note that D <= 18 - (Fore - 1) and Fore >= 2 so D <= 17, thus you can
+   --  safely change Num into 10 in the product, but then S becomes 10 times
+   --  larger and, therefore, Fore is incremented by 1, which means that D is
+   --  decremented by 1 so you again have a product lesser or equal to 10**17.
+   --  To sum up, if S is the ratio of two integers with
+
+   --    Num <= Den * S0
+
+   --  where S0 is the largest Small such that D >= 0, then case (2b) does not
+   --  overflow.
+
+   --  Let's conclude and rewrite case (3) above when Num = 1 into
+
+   --    (3b)   Y = -Num and Z = -Den * 10**(-D), for D < 0
+
+   --  As explained above, this occurs only if both S0 < S < 1 and D = -1 and
+   --  is preserved if you scale up Num and Den simultaneously, what you can
+   --  do until Den * 10 tops the upper bound. To sum up, if S is the ratio of
+   --  two integers with
+
+   --    Den * S0 < Num < Den <= B2
+
+   --  where B2 is a fixed limit, then case (3b) does not overflow. B2 can be
+   --  taken as the largest integer such that B2 * 10 is smaller than 2.0**63.
+
+   --  The conclusion is that the algorithm works if the small is the ratio of
+   --  two integers in the range 1 .. 2**63 if either is equal to 1, or of two
+   --  integers in the range 1 .. B1 if the small is larger than 1, or of two
+   --  integers in the range 1 .. B2 if the small is smaller than 1.
+
    --  Using a scaled divide which truncates and returns a remainder R,
    --  another K trailing digits can be calculated by computing the value
    --  (R * (10.0**K)) / Z using another scaled divide. This procedure
@@ -121,19 +196,6 @@ package body System.Image_F is
    --  a possible carry propagating to the more significant digits, to
    --  ensure correct rounding of the unit in the last place.
 
-   Maxdigs : constant Natural := Int'Width - 2;
-   --  Maximum number of decimal digits that can be represented in an Int.
-   --  The "-2" accounts for the sign and one extra digit, since we need the
-   --  maximum number of 9's that can be represented, e.g. for the 64-bit case,
-   --  Integer_64'Width is 20 since the maximum value is approximately 9.2E+18
-   --  and has 19 digits, but the maximum number of 9's that can be represented
-   --  in Integer_64 is only 18.
-
-   --  The prerequisite of the implementation is that the first scaled divide
-   --  does not overflow, which means that the absolute value of the input X
-   --  must always be smaller than 10**Maxdigs * 2**(Int'Size - 1). Otherwise
-   --  Constraint_Error is raised by the scaled divide operation.
-
    -----------------
    -- Image_Fixed --
    -----------------
@@ -181,10 +243,6 @@ package body System.Image_F is
       pragma Assert (Num < 0 and then Den < 0);
       --  Accept only negative numbers to allow -2**(Int'Size - 1)
 
-      pragma Assert (Num = -1 or else Den = -1);
-      --  Accept only integer or reciprocal of integer to control the
-      --  magnitude of the arithmetic operations below.
-
       A : constant Natural :=
             Boolean'Pos (Exp > 0) * Aft0 + Natural'Max (Aft, 1) + 1;
       --  Number of digits after the decimal point to be computed. If Exp is
index bd1fb15814b29134d679536db875dd3cc0e6148f..ace7e6b31bdebc01a6ce352386261d2dbab3b6ce 100644 (file)
@@ -30,9 +30,8 @@
 ------------------------------------------------------------------------------
 
 --  This package contains the routines for supporting the Image attribute for
---  ordinary fixed point types whose Small is an integer or its reciprocal,
---  and also for conversion operations required in Text_IO.Fixed_IO for such
---  types.
+--  ordinary fixed point types whose Small is the ratio of two Int values, and
+--  also for conversion operations required in Text_IO.Fixed_IO for such types.
 
 generic
 
index e3d254a1322b3dc3635c95e65c282efd063447b7..9a54cf368722878d053e742cc35d47d26a9624ce 100644 (file)
@@ -35,6 +35,14 @@ with System.Value_R;
 
 package body System.Value_F is
 
+   --  The prerequisite of the implementation is that the computation of the
+   --  operands of the scaled divide does not unduly overflow when the small
+   --  is neither an integer nor the reciprocal of an integer, which means
+   --  that its numerator and denominator must be both not larger than the
+   --  smallest divide 2**(Int'Size - 1) / Base where Base ranges over the
+   --  supported values for the base of the literal. Given that the largest
+   --  supported base is 16, this gives a limit of 2**(Int'Size - 5).
+
    package Impl is new Value_R (Uns, Floating => False);
 
    function Integer_To_Fixed
@@ -73,11 +81,11 @@ package body System.Value_F is
 
    --    V = (Val * Base + Extra) * (Base ** (ScaleB - 1)) / (Num / Den)
 
-   --  using two steps of scaled divide if Extra is non-zero
+   --  using two steps of scaled divide if Extra is positive and ScaleB too
 
-   --    (1)  Val * ((Base ** ScaleB) * Den) = Q1 * Num + R1
+   --    (1)  Val * (Den * (Base ** ScaleB)) = Q1 * Num + R1
 
-   --    (2)  Extra * ((Base ** ScaleB) * Den) = Q2 * (-Base) + R2
+   --    (2)  Extra * (Den * (Base ** ScaleB)) = Q2 * -Base + R2
 
    --  which yields after dividing (1) by Num and (2) by Num * Base and summing
 
@@ -85,6 +93,43 @@ package body System.Value_F is
 
    --  but we get rid of the third term by using a rounding divide for (2).
 
+   --  This works only if Den * (Base ** ScaleB) does not overflow for inputs
+   --  corresponding to 'Image. Let S = Num / Den, B = Base and N the scale in
+   --  base B of S, i.e. the smallest integer such that B**N * S >= 1. Then,
+   --  for X a positive of the mantissa, i.e. 1 <= X <= 2**(M-1), we have
+
+   --    1/B <= X * S * B**(N-1) < 2**(M-1)
+
+   --  which means that the inputs corresponding to the output of 'Image have a
+   --  ScaleB equal either to 1 - N or (after multiplying the inequality by B)
+   --  to -N, possibly after renormalizing X, i.e. multiplying it by a suitable
+   --  power of B. Therefore
+
+   --    Den * (Base ** ScaleB) <= Den * (B ** (1 - N)) < Num * B
+
+   --  which means that the product does not overflow if Num <= 2**(M-1) / B.
+
+   --  On the other hand, if Extra is positive and ScaleB negative, the above
+   --  two steps are
+
+   --   (1b)  Val * Den = Q1 * (Num * (Base ** -ScaleB)) + R1
+
+   --   (2b)  Extra * Den = Q2 * -Base + R2
+
+   --  which yields after dividing (1b) by Num * (Base ** -ScaleB) and (2b) by
+   --  Num * (Base ** (1 - ScaleB)) and summing
+
+   --    V = Q1 + (R1 - Q2) / (Num * (Base ** -ScaleB)) + R2 / ...
+
+   --  but we get rid of the third term by using a rounding divide for (2b).
+
+   --  This works only if Num * (Base ** -ScaleB) does not overflow for inputs
+   --  corresponding to 'Image. With the determination of ScaleB above, we have
+
+   --    Num * (Base ** -ScaleB) <= Num * (B ** N) < Den * B
+
+   --  which means that the product does not overflow if Den <= 2**(M-1) / B.
+
    ----------------------
    -- Integer_To_Fixed --
    ----------------------
@@ -234,7 +279,7 @@ package body System.Value_F is
       --  third operands are always negative so the sign of the quotient is the
       --  sign of the first operand and the sign of the remainder the opposite.
 
-      if E /= 0 then
+      if E > 0 then
          Scaled_Divide (Unsigned_To_Signed (V), Y, Z, Q1, R1, Round => False);
          Scaled_Divide (Unsigned_To_Signed (E), Y, -B, Q2, R2, Round => True);
 
index fac8c236c4f3dee76f9443c80a65dca7261a424a..abd4817c8bcbd819f6f3ebf37e4c9f1cebfbd78b 100644 (file)
@@ -30,8 +30,8 @@
 ------------------------------------------------------------------------------
 
 --  This package contains the routines for supporting the Value attribute for
---  ordinary fixed point types, and also for conversion operations required in
---  Text_IO.Fixed_IO for such types.
+--  ordinary fixed point types whose Small is the ratio of two Int values, and
+--  also for conversion operations required in Text_IO.Fixed_IO for such types.
 
 generic
 
index 18b4eeab27e574f90d9f70a50317d5cdeaf88530..504ca9738f75ce5ff6b8f2c66b0de7ad4cdc6c60 100644 (file)
@@ -6064,6 +6064,17 @@ package body Sem_Attr is
          Check_Real_Type;
          Set_Etype (N, Universal_Real);
 
+      ---------------------------------------
+      -- Small_Denominator/Small_Numerator --
+      ---------------------------------------
+
+      when Attribute_Small_Denominator
+         | Attribute_Small_Numerator
+      =>
+         Check_E0;
+         Check_Fixed_Point_Type;
+         Set_Etype (N, Universal_Integer);
+
       ------------------
       -- Storage_Pool --
       ------------------
@@ -9905,6 +9916,20 @@ package body Sem_Attr is
             Fold_Ureal (N, Small_Value (P_Type), True);
          end if;
 
+      -----------------------
+      -- Small_Denominator --
+      -----------------------
+
+      when Attribute_Small_Denominator =>
+         Fold_Uint (N, Norm_Den (Small_Value (P_Type)), True);
+
+      ---------------------
+      -- Small_Numerator --
+      ---------------------
+
+      when Attribute_Small_Numerator =>
+         Fold_Uint (N, Norm_Num (Small_Value (P_Type)), True);
+
       -----------------
       -- Stream_Size --
       -----------------
index 9ad2f55e41afb19460654453f2d3e540359e6c8a..647fb62f589bf6db0a088009cf0e2e36cee1ab23 100644 (file)
@@ -1024,6 +1024,8 @@ package Snames is
    Name_Signed_Zeros                   : constant Name_Id := N + $;
    Name_Size                           : constant Name_Id := N + $;
    Name_Small                          : constant Name_Id := N + $; -- Ada 83
+   Name_Small_Denominator              : constant Name_Id := N + $; -- GNAT
+   Name_Small_Numerator                : constant Name_Id := N + $; -- GNAT
    Name_Storage_Size                   : constant Name_Id := N + $;
    Name_Storage_Unit                   : constant Name_Id := N + $; -- GNAT
    Name_Stream_Size                    : constant Name_Id := N + $; -- Ada 05
@@ -1551,6 +1553,8 @@ package Snames is
       Attribute_Signed_Zeros,
       Attribute_Size,
       Attribute_Small,
+      Attribute_Small_Denominator,
+      Attribute_Small_Numerator,
       Attribute_Storage_Size,
       Attribute_Storage_Unit,
       Attribute_Stream_Size,