aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog27
-rw-r--r--gcc/DATESTAMP2
-rw-r--r--gcc/ada/Makefile.rtl1
-rw-r--r--gcc/ada/aspects.ads13
-rw-r--r--gcc/ada/atree.adb7
-rw-r--r--gcc/ada/checks.adb10
-rw-r--r--gcc/ada/doc/gnat_rm/implementation_defined_aspects.rst8
-rw-r--r--gcc/ada/doc/gnat_rm/implementation_defined_characteristics.rst2
-rw-r--r--gcc/ada/errid.adb3
-rw-r--r--gcc/ada/errid.ads9
-rw-r--r--gcc/ada/erroutc-pretty_emitter.adb2
-rw-r--r--gcc/ada/erroutc-pretty_emitter.ads2
-rw-r--r--gcc/ada/erroutc-sarif_emitter.adb2
-rw-r--r--gcc/ada/erroutc-sarif_emitter.ads3
-rw-r--r--gcc/ada/errsw.adb5
-rw-r--r--gcc/ada/errsw.ads3
-rw-r--r--gcc/ada/eval_fat.adb2
-rw-r--r--gcc/ada/exp_aggr.adb25
-rw-r--r--gcc/ada/exp_attr.adb2
-rw-r--r--gcc/ada/exp_ch3.adb28
-rw-r--r--gcc/ada/exp_ch4.adb40
-rw-r--r--gcc/ada/exp_ch5.adb4
-rw-r--r--gcc/ada/exp_ch6.adb18
-rw-r--r--gcc/ada/exp_ch7.adb28
-rw-r--r--gcc/ada/exp_imgv.adb9
-rw-r--r--gcc/ada/exp_tss.adb10
-rw-r--r--gcc/ada/exp_unst.adb2
-rw-r--r--gcc/ada/exp_util.adb22
-rw-r--r--gcc/ada/gcc-interface/decl.cc37
-rw-r--r--gcc/ada/gcc-interface/trans.cc79
-rw-r--r--gcc/ada/gen_il-gen-gen_nodes.adb7
-rw-r--r--gcc/ada/gnat_rm.texi1196
-rw-r--r--gcc/ada/gnat_ugn.texi2
-rw-r--r--gcc/ada/json_utils.adb2
-rw-r--r--gcc/ada/json_utils.ads3
-rw-r--r--gcc/ada/krunch.adb2
-rw-r--r--gcc/ada/layout.adb4
-rw-r--r--gcc/ada/lib-xref-spark_specific.adb7
-rw-r--r--gcc/ada/lib.adb4
-rw-r--r--gcc/ada/lib.ads2
-rw-r--r--gcc/ada/libgnarl/s-tassta.adb18
-rw-r--r--gcc/ada/libgnarl/s-tsgsba.adb40
-rw-r--r--gcc/ada/libgnarl/s-tsgsba__cheri.adb49
-rw-r--r--gcc/ada/libgnat/a-strsup.adb4
-rw-r--r--gcc/ada/libgnat/a-stwisu.adb4
-rw-r--r--gcc/ada/libgnat/a-stzsup.adb4
-rw-r--r--gcc/ada/libgnat/a-tifiio.adb6
-rw-r--r--gcc/ada/libgnat/a-tifiio__128.adb9
-rw-r--r--gcc/ada/libgnat/a-wtfiio.adb6
-rw-r--r--gcc/ada/libgnat/a-wtfiio__128.adb9
-rw-r--r--gcc/ada/libgnat/a-ztfiio.adb6
-rw-r--r--gcc/ada/libgnat/a-ztfiio__128.adb9
-rw-r--r--gcc/ada/libgnat/i-cstrin.ads11
-rw-r--r--gcc/ada/libgnat/s-excdeb.adb2
-rw-r--r--gcc/ada/libgnat/s-stausa.adb41
-rw-r--r--gcc/ada/libgnat/s-stausa.ads8
-rw-r--r--gcc/ada/libgnat/s-trasym__dwarf.adb2
-rw-r--r--gcc/ada/libgnat/s-valued.adb4
-rw-r--r--gcc/ada/libgnat/s-valuef.adb16
-rw-r--r--gcc/ada/par-endh.adb6
-rw-r--r--gcc/ada/par-tchk.adb1
-rw-r--r--gcc/ada/repinfo.adb14
-rw-r--r--gcc/ada/sem.adb3
-rw-r--r--gcc/ada/sem_attr.adb6
-rw-r--r--gcc/ada/sem_ch10.adb6
-rw-r--r--gcc/ada/sem_ch12.adb76
-rw-r--r--gcc/ada/sem_ch13.adb271
-rw-r--r--gcc/ada/sem_ch13.ads3
-rw-r--r--gcc/ada/sem_ch3.adb23
-rw-r--r--gcc/ada/sem_ch6.adb1
-rw-r--r--gcc/ada/sem_disp.adb3
-rw-r--r--gcc/ada/sem_elab.adb10
-rw-r--r--gcc/ada/sem_elim.adb2
-rw-r--r--gcc/ada/sem_eval.adb1
-rw-r--r--gcc/ada/sem_util.adb153
-rw-r--r--gcc/ada/sem_util.ads6
-rw-r--r--gcc/ada/sfn_scan.adb2
-rw-r--r--gcc/ada/snames.ads-tmpl1
-rw-r--r--gcc/ada/tbuild.adb6
-rw-r--r--gcc/ada/treepr.adb13
-rw-r--r--gcc/ada/types.ads5
-rw-r--r--gcc/auto-profile.cc841
-rw-r--r--gcc/auto-profile.h7
-rw-r--r--gcc/common.opt4
-rw-r--r--gcc/config/aarch64/aarch64-sve.md4
-rw-r--r--gcc/config/aarch64/predicates.md2
-rw-r--r--gcc/config/i386/driver-i386.cc2
-rw-r--r--gcc/config/i386/i386.cc58
-rw-r--r--gcc/config/i386/i386.md26
-rw-r--r--gcc/config/riscv/riscv-v.cc2
-rw-r--r--gcc/coverage.cc6
-rw-r--r--gcc/cp/constexpr.cc10
-rw-r--r--gcc/doc/invoke.texi7
-rw-r--r--gcc/doc/md.texi4
-rw-r--r--gcc/fortran/resolve.cc29
-rw-r--r--gcc/ipa-cp.cc33
-rw-r--r--gcc/ipa-fnsummary.cc12
-rw-r--r--gcc/opts.cc13
-rw-r--r--gcc/passes.cc8
-rw-r--r--gcc/profile.cc111
-rw-r--r--gcc/profile.h2
-rw-r--r--gcc/testsuite/ChangeLog18
-rw-r--r--gcc/testsuite/g++.dg/cpp23/range-for10.C23
-rw-r--r--gcc/testsuite/gcc.target/i386/pr120908.c16
-rw-r--r--gcc/testsuite/gcc.target/i386/pr120936-1.c18
-rw-r--r--gcc/testsuite/gcc.target/i386/pr120936-10.c23
-rw-r--r--gcc/testsuite/gcc.target/i386/pr120936-11.c19
-rw-r--r--gcc/testsuite/gcc.target/i386/pr120936-12.c23
-rw-r--r--gcc/testsuite/gcc.target/i386/pr120936-2.c18
-rw-r--r--gcc/testsuite/gcc.target/i386/pr120936-3.c18
-rw-r--r--gcc/testsuite/gcc.target/i386/pr120936-4.c18
-rw-r--r--gcc/testsuite/gcc.target/i386/pr120936-5.c18
-rw-r--r--gcc/testsuite/gcc.target/i386/pr120936-6.c18
-rw-r--r--gcc/testsuite/gcc.target/i386/pr120936-7.c18
-rw-r--r--gcc/testsuite/gcc.target/i386/pr120936-8.c18
-rw-r--r--gcc/testsuite/gcc.target/i386/pr120936-9.c19
-rw-r--r--gcc/testsuite/gcc.target/i386/pr93492-3.c2
-rw-r--r--gcc/testsuite/gcc.target/i386/pr93492-5.c2
-rw-r--r--gcc/testsuite/gcc.target/riscv/mcpu-xt-c908.c2
-rw-r--r--gcc/testsuite/gcc.target/riscv/mcpu-xt-c908v.c2
-rw-r--r--gcc/testsuite/gcc.target/riscv/mcpu-xt-c910.c2
-rw-r--r--gcc/testsuite/gcc.target/riscv/mcpu-xt-c910v2.c2
-rw-r--r--gcc/testsuite/gcc.target/riscv/mcpu-xt-c920.c2
-rw-r--r--gcc/testsuite/gcc.target/riscv/mcpu-xt-c920v2.c2
-rw-r--r--gcc/testsuite/gcc.target/riscv/pr118241.c2
-rw-r--r--gcc/testsuite/gcc.target/riscv/pr120223.c2
-rw-r--r--gcc/testsuite/gcc.target/riscv/rvv/autovec/pr120356.c26
-rw-r--r--gcc/testsuite/gcc.target/riscv/rvv/base/pr119164.c2
-rw-r--r--gcc/testsuite/gfortran.dg/coarray/coindexed_6.f9013
-rw-r--r--gcc/tree-profile.cc7
-rw-r--r--gcc/tree-vect-loop.cc1
-rw-r--r--gcc/tree-vect-stmts.cc6
132 files changed, 2844 insertions, 1191 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 9004d1c..94cb5ae 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,30 @@
+2025-07-02 H.J. Lu <hjl.tools@gmail.com>
+
+ PR target/120908
+ * config/i386/i386.cc (legitimize_tls_address): Pass RDI to
+ gen_tls_global_dynamic_64.
+ * config/i386/i386.md (*tls_global_dynamic_64_<mode>): Add RDI
+ clobber and use it to generate LEA.
+ (@tls_global_dynamic_64_<mode>): Add a clobber.
+
+2025-07-02 Alexey Merzlyakov <alexey.merzlyakov@samsung.com>
+
+ PR target/120356
+ * config/riscv/riscv-v.cc
+ (expand_const_vector_interleaved_stepped_npatterns):
+ Fix ASHIFT to LSHIFTRT insn.
+
+2025-07-02 Richard Biener <rguenther@suse.de>
+
+ PR tree-optimization/120927
+ * tree-vect-loop.cc (vect_analyze_loop): Stop querying
+ further epilogues after one with partial vectors.
+
+2025-07-02 Haochen Jiang <haochen.jiang@intel.com>
+
+ * config/i386/driver-i386.cc (host_detect_local_cpu): Change
+ to AMX-FP8 for Diamond Rapids.
+
2025-07-01 Qing Zhao <qing.zhao@oracle.com>
* tree-object-size.cc (access_with_size_object_size): Update comments
diff --git a/gcc/DATESTAMP b/gcc/DATESTAMP
index 46e9463..6952979 100644
--- a/gcc/DATESTAMP
+++ b/gcc/DATESTAMP
@@ -1 +1 @@
-20250702
+20250703
diff --git a/gcc/ada/Makefile.rtl b/gcc/ada/Makefile.rtl
index 8f925fc..50e683a 100644
--- a/gcc/ada/Makefile.rtl
+++ b/gcc/ada/Makefile.rtl
@@ -1854,6 +1854,7 @@ ifeq ($(strip $(filter-out %aarch64 freebsd%,$(target_cpu) $(target_os))),)
LIBGNAT_TARGET_PAIRS += \
s-intman.adb<libgnarl/s-intman__cheribsd.adb \
s-osinte.ads<libgnarl/s-osinte__cheribsd.ads \
+ s-tsgsba.adb<libgnarl/s-tsgsba__cheri.adb \
s-secsta.adb<libgnat/s-secsta__cheri.adb
EXTRA_GNATRTL_NONTASKING_OBJS += i-cheri.o i-cheri-exceptions.o
diff --git a/gcc/ada/aspects.ads b/gcc/ada/aspects.ads
index 5e61450..d8861bf 100644
--- a/gcc/ada/aspects.ads
+++ b/gcc/ada/aspects.ads
@@ -127,6 +127,7 @@ package Aspects is
Aspect_Part_Of, -- GNAT
Aspect_Post,
Aspect_Postcondition,
+ Aspect_Potentially_Invalid, -- GNAT
Aspect_Pre,
Aspect_Precondition,
Aspect_Predicate, -- GNAT
@@ -327,6 +328,7 @@ package Aspects is
Aspect_Obsolescent => True,
Aspect_Part_Of => True,
Aspect_Persistent_BSS => True,
+ Aspect_Potentially_Invalid => True,
Aspect_Predicate => True,
Aspect_Pure_Function => True,
Aspect_Refined_Depends => True,
@@ -407,8 +409,11 @@ package Aspects is
subtype Boolean_Aspects is
Aspect_Id range Aspect_Always_Terminates .. Aspect_Id'Last;
- subtype Pre_Post_Aspects is
- Aspect_Id range Aspect_Post .. Aspect_Precondition;
+ subtype Pre_Post_Aspects is Aspect_Id
+ with Static_Predicate => Pre_Post_Aspects in Aspect_Post
+ | Aspect_Postcondition
+ | Aspect_Pre
+ | Aspect_Precondition;
-- The following type is used for indicating allowed expression forms
@@ -477,6 +482,7 @@ package Aspects is
Aspect_Part_Of => Expression,
Aspect_Post => Expression,
Aspect_Postcondition => Expression,
+ Aspect_Potentially_Invalid => Optional_Expression,
Aspect_Pre => Expression,
Aspect_Precondition => Expression,
Aspect_Predicate => Expression,
@@ -583,6 +589,7 @@ package Aspects is
Aspect_Part_Of => False,
Aspect_Post => False,
Aspect_Postcondition => False,
+ Aspect_Potentially_Invalid => False,
Aspect_Pre => False,
Aspect_Precondition => False,
Aspect_Predicate => False,
@@ -784,6 +791,7 @@ package Aspects is
Aspect_Persistent_BSS => Name_Persistent_BSS,
Aspect_Post => Name_Post,
Aspect_Postcondition => Name_Postcondition,
+ Aspect_Potentially_Invalid => Name_Potentially_Invalid,
Aspect_Pre => Name_Pre,
Aspect_Precondition => Name_Precondition,
Aspect_Predicate => Name_Predicate,
@@ -1095,6 +1103,7 @@ package Aspects is
Aspect_No_Tagged_Streams => Never_Delay,
Aspect_Obsolescent => Never_Delay,
Aspect_Part_Of => Never_Delay,
+ Aspect_Potentially_Invalid => Never_Delay,
Aspect_Refined_Depends => Never_Delay,
Aspect_Refined_Global => Never_Delay,
Aspect_Refined_Post => Never_Delay,
diff --git a/gcc/ada/atree.adb b/gcc/ada/atree.adb
index 17538de..20ca189 100644
--- a/gcc/ada/atree.adb
+++ b/gcc/ada/atree.adb
@@ -1296,8 +1296,7 @@ package body Atree is
Node_Offsets.Table (Node_Offsets.First .. Node_Offsets.Last);
begin
- -- Empty_Or_Error use as described in types.ads
- if Destination <= Empty_Or_Error or No (Source) then
+ if Destination in Empty | Error or else No (Source) then
pragma Assert (Serious_Errors_Detected > 0);
return;
end if;
@@ -1458,7 +1457,7 @@ package body Atree is
-- Start of processing for Copy_Separate_Tree
begin
- if Source <= Empty_Or_Error then
+ if Source in Empty | Error then
return Source;
elsif Is_Entity (Source) then
@@ -1841,7 +1840,7 @@ package body Atree is
pragma Debug (Validate_Node (Source));
S_Size : constant Slot_Count := Size_In_Slots_To_Alloc (Source);
begin
- if Source <= Empty_Or_Error then
+ if Source in Empty | Error then
return Source;
end if;
diff --git a/gcc/ada/checks.adb b/gcc/ada/checks.adb
index 6a98292..0b3ae02 100644
--- a/gcc/ada/checks.adb
+++ b/gcc/ada/checks.adb
@@ -750,7 +750,7 @@ package body Checks is
-- mode then just skip the check (it is not required in any case).
when RE_Not_Available =>
- return;
+ null;
end Apply_Address_Clause_Check;
-------------------------------------
@@ -1078,7 +1078,7 @@ package body Checks is
exception
when RE_Not_Available =>
- return;
+ null;
end;
end Apply_Arithmetic_Overflow_Strict;
@@ -6437,8 +6437,6 @@ package body Checks is
if Debug_Flag_CC then
w (" exception occurred, overflow flag set");
end if;
-
- return;
end Enable_Overflow_Check;
------------------------
@@ -6686,8 +6684,6 @@ package body Checks is
if Debug_Flag_CC then
w (" exception occurred, range flag set");
end if;
-
- return;
end Enable_Range_Check;
------------------
@@ -7091,8 +7087,6 @@ package body Checks is
end loop;
-- If we fall through entry was not found
-
- return;
end Find_Check;
---------------------------------
diff --git a/gcc/ada/doc/gnat_rm/implementation_defined_aspects.rst b/gcc/ada/doc/gnat_rm/implementation_defined_aspects.rst
index a80da47..a369568 100644
--- a/gcc/ada/doc/gnat_rm/implementation_defined_aspects.rst
+++ b/gcc/ada/doc/gnat_rm/implementation_defined_aspects.rst
@@ -538,6 +538,14 @@ Aspect Persistent_BSS
This boolean aspect is equivalent to :ref:`pragma Persistent_BSS<Pragma-Persistent_BSS>`.
+Aspect Potentially_Invalid
+==========================
+.. index:: Potentially_Invalid
+
+For the syntax and semantics of this aspect, see the SPARK 2014 Reference
+Manual, section 13.9.1.
+
+
Aspect Predicate
================
.. index:: Predicate
diff --git a/gcc/ada/doc/gnat_rm/implementation_defined_characteristics.rst b/gcc/ada/doc/gnat_rm/implementation_defined_characteristics.rst
index 563f62a..f7746c8 100644
--- a/gcc/ada/doc/gnat_rm/implementation_defined_characteristics.rst
+++ b/gcc/ada/doc/gnat_rm/implementation_defined_characteristics.rst
@@ -463,7 +463,7 @@ Implementation-defined assertion_aspect_marks include Assert_And_Cut,
Assume, Contract_Cases, Debug, Ghost, Initial_Condition, Loop_Invariant,
Loop_Variant, Postcondition, Precondition, Predicate, Refined_Post,
Statement_Assertions, and Subprogram_Variant. Implementation-defined
-policy_identifiers include Ignore and Suppressible.
+policy_identifiers include Disable and Suppressible.
*
"The default assertion policy. See 11.4.2(10)."
diff --git a/gcc/ada/errid.adb b/gcc/ada/errid.adb
index a661fcf..46d319e 100644
--- a/gcc/ada/errid.adb
+++ b/gcc/ada/errid.adb
@@ -2,7 +2,7 @@
-- --
-- GNAT COMPILER COMPONENTS --
-- --
--- D I A G N O S T I C S . R E P O S I T O R Y --
+-- E R R I D --
-- --
-- B o d y --
-- --
@@ -22,6 +22,7 @@
-- Extensive contributions were provided by Ada Core Technologies Inc. --
-- --
------------------------------------------------------------------------------
+
with JSON_Utils; use JSON_Utils;
with Output; use Output;
diff --git a/gcc/ada/errid.ads b/gcc/ada/errid.ads
index 21ef79c..4d56d73 100644
--- a/gcc/ada/errid.ads
+++ b/gcc/ada/errid.ads
@@ -2,11 +2,11 @@
-- --
-- GNAT COMPILER COMPONENTS --
-- --
--- D I A G N O S T I C S . R E P O S I T O R Y --
+-- E R R I D --
-- --
-- S p e c --
-- --
--- Copyright (C) 19925, Free Software Foundation, Inc. --
+-- Copyright (C) 1992-2025, Free Software Foundation, Inc. --
-- --
-- GNAT is free software; you can redistribute it and/or modify it under --
-- terms of the GNU General Public License as published by the Free Soft- --
@@ -22,6 +22,7 @@
-- Extensive contributions were provided by Ada Core Technologies Inc. --
-- --
------------------------------------------------------------------------------
+
with Types; use Types;
with Errsw; use Errsw;
@@ -76,8 +77,8 @@ package Errid is
-- - Optionally additional information
-- TODO: the mandatory fields for the documentation file could be changed
- Diagnostic_Entries : Diagnostics_Registry_Type :=
- (No_Diagnostic_Id => (others => <>),
+ Diagnostic_Entries : constant Diagnostics_Registry_Type :=
+ (No_Diagnostic_Id => <>,
GNAT0001 =>
(Status => Active,
Human_Id => new String'("Default_Iterator_Not_Primitive_Error"),
diff --git a/gcc/ada/erroutc-pretty_emitter.adb b/gcc/ada/erroutc-pretty_emitter.adb
index d9bf560..72cc03f 100644
--- a/gcc/ada/erroutc-pretty_emitter.adb
+++ b/gcc/ada/erroutc-pretty_emitter.adb
@@ -2,7 +2,7 @@
-- --
-- GNAT COMPILER COMPONENTS --
-- --
--- D I A G N O S T I C S . P R E T T Y _ E M I T T E R --
+-- E R R O U T C . P R E T T Y _ E M I T T E R --
-- --
-- B o d y --
-- --
diff --git a/gcc/ada/erroutc-pretty_emitter.ads b/gcc/ada/erroutc-pretty_emitter.ads
index 3ff0109..a4521a2 100644
--- a/gcc/ada/erroutc-pretty_emitter.ads
+++ b/gcc/ada/erroutc-pretty_emitter.ads
@@ -2,7 +2,7 @@
-- --
-- GNAT COMPILER COMPONENTS --
-- --
--- D I A G N O S T I C S . P R E T T Y _ E M I T T E R --
+-- E R R O U T C . P R E T T Y _ E M I T T E R --
-- --
-- S p e c --
-- --
diff --git a/gcc/ada/erroutc-sarif_emitter.adb b/gcc/ada/erroutc-sarif_emitter.adb
index 90f7a7c..1d4df0c 100644
--- a/gcc/ada/erroutc-sarif_emitter.adb
+++ b/gcc/ada/erroutc-sarif_emitter.adb
@@ -2,7 +2,7 @@
-- --
-- GNAT COMPILER COMPONENTS --
-- --
--- D I A G N O S T I C S . S A R I F _ E M I T T E R --
+-- E R R O U T C . S A R I F _ E M I T T E R --
-- --
-- B o d y --
-- --
diff --git a/gcc/ada/erroutc-sarif_emitter.ads b/gcc/ada/erroutc-sarif_emitter.ads
index 9272b54..e395371 100644
--- a/gcc/ada/erroutc-sarif_emitter.ads
+++ b/gcc/ada/erroutc-sarif_emitter.ads
@@ -2,7 +2,7 @@
-- --
-- GNAT COMPILER COMPONENTS --
-- --
--- D I A G N O S T I C S . S A R I F _ E M I T T E R --
+-- E R R O U T C . S A R I F _ E M I T T E R --
-- --
-- S p e c --
-- --
@@ -24,6 +24,5 @@
------------------------------------------------------------------------------
package Erroutc.SARIF_Emitter is
-
procedure Print_SARIF_Report;
end Erroutc.SARIF_Emitter;
diff --git a/gcc/ada/errsw.adb b/gcc/ada/errsw.adb
index f4c4128..1edc8cd 100644
--- a/gcc/ada/errsw.adb
+++ b/gcc/ada/errsw.adb
@@ -2,7 +2,7 @@
-- --
-- GNAT COMPILER COMPONENTS --
-- --
--- D I A G N O S T I C S . D I A G N O S T I C S _ R E P O S I T O R Y --
+-- E R R S W --
-- --
-- B o d y --
-- --
@@ -22,6 +22,7 @@
-- Extensive contributions were provided by Ada Core Technologies Inc. --
-- --
------------------------------------------------------------------------------
+
with JSON_Utils; use JSON_Utils;
with Output; use Output;
@@ -30,7 +31,7 @@ package body Errsw is
Switches : constant array (Switch_Id)
of Switch_Type :=
(No_Switch_Id =>
- (others => <>),
+ <>,
gnatwb =>
(Human_Id => new String'("Warn_On_Bad_Fixed_Value"),
Status => Active,
diff --git a/gcc/ada/errsw.ads b/gcc/ada/errsw.ads
index b6d0130..93af182 100644
--- a/gcc/ada/errsw.ads
+++ b/gcc/ada/errsw.ads
@@ -2,7 +2,7 @@
-- --
-- GNAT COMPILER COMPONENTS --
-- --
--- D I A G N O S T I C S . D I A G N O S T I C S _ R E P O S I T O R Y --
+-- E R R S W --
-- --
-- S p e c --
-- --
@@ -22,6 +22,7 @@
-- Extensive contributions were provided by Ada Core Technologies Inc. --
-- --
------------------------------------------------------------------------------
+
with Types; use Types;
package Errsw is
diff --git a/gcc/ada/eval_fat.adb b/gcc/ada/eval_fat.adb
index 09a5b3f..5a2e43e 100644
--- a/gcc/ada/eval_fat.adb
+++ b/gcc/ada/eval_fat.adb
@@ -146,8 +146,6 @@ package body Eval_Fat is
if UR_Is_Negative (X) then
Fraction := -Fraction;
end if;
-
- return;
end Decompose;
-------------------
diff --git a/gcc/ada/exp_aggr.adb b/gcc/ada/exp_aggr.adb
index e3734a2..9ff69ec 100644
--- a/gcc/ada/exp_aggr.adb
+++ b/gcc/ada/exp_aggr.adb
@@ -2570,12 +2570,21 @@ package body Exp_Aggr is
Ref := Convert_To (Init_Typ, New_Copy_Tree (Target));
Set_Assignment_OK (Ref);
- Append_To (L,
- Make_Procedure_Call_Statement (Loc,
- Name =>
- New_Occurrence_Of
- (Find_Controlled_Prim_Op (Init_Typ, Name_Initialize), Loc),
- Parameter_Associations => New_List (New_Copy_Tree (Ref))));
+ declare
+ Intlz : constant Entity_Id :=
+ Find_Controlled_Prim_Op (Init_Typ, Name_Initialize);
+ begin
+ if Present (Intlz) then
+ Append_To
+ (L,
+ Make_Procedure_Call_Statement
+ (Loc,
+ Name =>
+ New_Occurrence_Of (Intlz, Loc),
+ Parameter_Associations =>
+ New_List (New_Copy_Tree (Ref))));
+ end if;
+ end;
end if;
end Generate_Finalization_Actions;
@@ -6633,7 +6642,7 @@ package body Exp_Aggr is
exception
when RE_Not_Available =>
- return;
+ null;
end Expand_N_Aggregate;
-------------------------------
@@ -7957,7 +7966,7 @@ package body Exp_Aggr is
exception
when RE_Not_Available =>
- return;
+ null;
end Expand_N_Extension_Aggregate;
-----------------------------
diff --git a/gcc/ada/exp_attr.adb b/gcc/ada/exp_attr.adb
index 0f09ba5..4f9f16c 100644
--- a/gcc/ada/exp_attr.adb
+++ b/gcc/ada/exp_attr.adb
@@ -8776,7 +8776,7 @@ package body Exp_Attr is
exception
when RE_Not_Available =>
- return;
+ null;
end Expand_N_Attribute_Reference;
--------------------------------
diff --git a/gcc/ada/exp_ch3.adb b/gcc/ada/exp_ch3.adb
index 7c18f81..5a47a5a 100644
--- a/gcc/ada/exp_ch3.adb
+++ b/gcc/ada/exp_ch3.adb
@@ -342,9 +342,9 @@ package body Exp_Ch3 is
-- typSO provides result of 'Output attribute
-- typPI provides result of 'Put_Image attribute
--
- -- The following entries are additionally present for non-limited tagged
- -- types, and implement additional dispatching operations for predefined
- -- operations:
+ -- The following entries implement additional dispatching operations for
+ -- predefined operations. Deep finalization is present on all tagged types;
+ -- the others only on nonlimited tagged types:
--
-- _equality implements "=" operator
-- _assign implements assignment operation
@@ -401,7 +401,7 @@ package body Exp_Ch3 is
(Tag_Typ : Entity_Id;
Renamed_Eq : Entity_Id) return List_Id;
-- Create the bodies of the predefined primitives that are described in
- -- Predefined_Primitive_Specs. When not empty, Renamed_Eq must denote
+ -- Make_Predefined_Primitive_Specs. When not empty, Renamed_Eq must denote
-- the defining unit name of the type's predefined equality as returned
-- by Make_Predefined_Primitive_Specs.
@@ -5956,7 +5956,7 @@ package body Exp_Ch3 is
exception
when RE_Not_Available =>
- return;
+ null;
end Expand_Freeze_Enumeration_Type;
-------------------------------
@@ -6908,8 +6908,8 @@ package body Exp_Ch3 is
procedure Count_Default_Sized_Task_Stacks
(Typ : Entity_Id;
- Pri_Stacks : out Int;
- Sec_Stacks : out Int);
+ Pri_Stacks : out Nat;
+ Sec_Stacks : out Nat);
-- Count the number of default-sized primary and secondary task stacks
-- required for task objects contained within type Typ. If the number of
-- task objects contained within the type is not known at compile time
@@ -7186,8 +7186,8 @@ package body Exp_Ch3 is
procedure Count_Default_Sized_Task_Stacks
(Typ : Entity_Id;
- Pri_Stacks : out Int;
- Sec_Stacks : out Int)
+ Pri_Stacks : out Nat;
+ Sec_Stacks : out Nat)
is
Component : Entity_Id;
@@ -7259,8 +7259,8 @@ package body Exp_Ch3 is
while Present (Component) loop
declare
- P : Int;
- S : Int;
+ P : Nat;
+ S : Nat;
begin
Count_Default_Sized_Task_Stacks (Etype (Component), P, S);
@@ -7678,7 +7678,7 @@ package body Exp_Ch3 is
and then not (Is_Array_Type (Typ) and then Has_Init_Expression (N))
then
declare
- PS_Count, SS_Count : Int;
+ PS_Count, SS_Count : Nat;
begin
Count_Default_Sized_Task_Stacks (Typ, PS_Count, SS_Count);
Increment_Primary_Stack_Count (PS_Count);
@@ -9239,7 +9239,7 @@ package body Exp_Ch3 is
exception
when RE_Not_Available =>
- return;
+ null;
end Expand_N_Object_Declaration;
---------------------------------
@@ -9501,7 +9501,7 @@ package body Exp_Ch3 is
exception
when RE_Not_Available =>
- return;
+ null;
end Expand_Tagged_Root;
------------------------------
diff --git a/gcc/ada/exp_ch4.adb b/gcc/ada/exp_ch4.adb
index b427002..76386fc 100644
--- a/gcc/ada/exp_ch4.adb
+++ b/gcc/ada/exp_ch4.adb
@@ -432,7 +432,7 @@ package body Exp_Ch4 is
exception
when RE_Not_Available =>
- return;
+ null;
end Build_Boolean_Array_Proc_Call;
---------------------------------
@@ -1236,7 +1236,7 @@ package body Exp_Ch4 is
exception
when RE_Not_Available =>
- return;
+ null;
end Expand_Allocator_Expression;
-----------------------------
@@ -5067,7 +5067,7 @@ package body Exp_Ch4 is
exception
when RE_Not_Available =>
- return;
+ null;
end Expand_N_Allocator;
-----------------------
@@ -7758,7 +7758,7 @@ package body Exp_Ch4 is
exception
when RE_Not_Available =>
- return;
+ null;
end Expand_N_Null;
---------------------
@@ -9143,7 +9143,7 @@ package body Exp_Ch4 is
exception
when RE_Not_Available =>
- return;
+ null;
end Expand_N_Op_Expon;
--------------------
@@ -11285,11 +11285,12 @@ package body Exp_Ch4 is
-----------------------------------
procedure Handle_Changed_Representation is
- Temp : Entity_Id;
+ Cons : List_Id;
Decl : Node_Id;
- Odef : Node_Id;
N_Ix : Node_Id;
- Cons : List_Id;
+ Odef : Node_Id;
+ Stmt : Node_Id;
+ Temp : Entity_Id;
begin
-- Nothing else to do if no change of representation
@@ -11432,19 +11433,24 @@ package body Exp_Ch4 is
Defining_Identifier => Temp,
Object_Definition => Odef);
- Set_No_Initialization (Decl, True);
+ -- The temporary need not be initialized
+
+ Set_No_Initialization (Decl);
+
+ Stmt :=
+ Make_Assignment_Statement (Loc,
+ Name => New_Occurrence_Of (Temp, Loc),
+ Expression => Relocate_Node (N));
+
+ -- And, therefore, cannot be finalized
+
+ Set_No_Finalize_Actions (Stmt);
-- Insert required actions. It is essential to suppress checks
-- since we have suppressed default initialization, which means
-- that the variable we create may have no discriminants.
- Insert_Actions (N,
- New_List (
- Decl,
- Make_Assignment_Statement (Loc,
- Name => New_Occurrence_Of (Temp, Loc),
- Expression => Relocate_Node (N))),
- Suppress => All_Checks);
+ Insert_Actions (N, New_List (Decl, Stmt), Suppress => All_Checks);
Rewrite (N, New_Occurrence_Of (Temp, Loc));
return;
@@ -13567,7 +13573,7 @@ package body Exp_Ch4 is
exception
when RE_Not_Available =>
- return;
+ null;
end Insert_Dereference_Action;
--------------------------------
diff --git a/gcc/ada/exp_ch5.adb b/gcc/ada/exp_ch5.adb
index f46fb47..66a4fc0 100644
--- a/gcc/ada/exp_ch5.adb
+++ b/gcc/ada/exp_ch5.adb
@@ -1154,7 +1154,7 @@ package body Exp_Ch5 is
exception
when RE_Not_Available =>
- return;
+ null;
end Expand_Assign_Array;
------------------------------
@@ -3455,7 +3455,7 @@ package body Exp_Ch5 is
exception
when RE_Not_Available =>
- return;
+ null;
end Expand_N_Assignment_Statement;
------------------------------
diff --git a/gcc/ada/exp_ch6.adb b/gcc/ada/exp_ch6.adb
index 6216192..c24c8c6 100644
--- a/gcc/ada/exp_ch6.adb
+++ b/gcc/ada/exp_ch6.adb
@@ -287,10 +287,11 @@ package body Exp_Ch6 is
-- This expansion is necessary in all the cases where the constant object
-- denoted by the call needs finalization in the current subprogram, which
- -- excludes return statements, and is not identified with another object
- -- that will be finalized, which excludes (statically) declared objects,
- -- dynamically allocated objects, components of aggregates, and targets of
- -- assignments that are done directly (without intermediate temporaries).
+ -- excludes simple return statements, and is not identified with another
+ -- object that will be finalized, which excludes (statically) declared
+ -- objects, dynamically allocated objects, components of aggregates, and
+ -- targets of assignments that are done directly (without intermediate
+ -- temporaries).
procedure Expand_Non_Function_Return (N : Node_Id);
-- Expand a simple return statement found in a procedure body, entry body,
@@ -5387,8 +5388,13 @@ package body Exp_Ch6 is
-- Note that object declarations are also distributed into conditional
-- expressions, but we may be invoked before this distribution is done.
+ -- However that's not the case for the declarations of return objects,
+ -- see the twin Is_Optimizable_Declaration predicates that are present
+ -- in Expand_N_Case_Expression and Expand_N_If_Expression of Exp_Ch4.
- elsif Nkind (Uncond_Par) = N_Object_Declaration then
+ elsif Nkind (Uncond_Par) = N_Object_Declaration
+ and then not Is_Return_Object (Defining_Identifier (Uncond_Par))
+ then
return;
end if;
@@ -5764,7 +5770,7 @@ package body Exp_Ch6 is
exception
when RE_Not_Available =>
- return;
+ null;
end Expand_N_Simple_Return_Statement;
------------------------------
diff --git a/gcc/ada/exp_ch7.adb b/gcc/ada/exp_ch7.adb
index 4d2b834..e4daf4b 100644
--- a/gcc/ada/exp_ch7.adb
+++ b/gcc/ada/exp_ch7.adb
@@ -436,7 +436,7 @@ package body Exp_Ch7 is
procedure Build_Record_Deep_Procs (Typ : Entity_Id);
-- Build the deep Initialize/Adjust/Finalize for a record Typ with
- -- Has_Component_Component set and store them using the TSS mechanism.
+ -- Has_Controlled_Component set and store them using the TSS mechanism.
--------------------------------
-- Transient Scope Management --
@@ -5460,7 +5460,7 @@ package body Exp_Ch7 is
-- Finalization calls are inserted after the target
- if Present (Act_After) then
+ if Is_Non_Empty_List (Act_After) then
Last_Obj := Last (Act_After);
Insert_List_After (Target, Act_After);
else
@@ -7830,13 +7830,23 @@ package body Exp_Ch7 is
when Initialize_Case =>
if Is_Controlled (Typ) then
- return New_List (
- Make_Procedure_Call_Statement (Loc,
- Name =>
- New_Occurrence_Of
- (Find_Controlled_Prim_Op (Typ, Name_Initialize), Loc),
- Parameter_Associations => New_List (
- Make_Identifier (Loc, Name_V))));
+ declare
+ Intlz : constant Entity_Id :=
+ Find_Controlled_Prim_Op (Typ, Name_Initialize);
+ begin
+ if Present (Intlz) then
+ return
+ New_List
+ (Make_Procedure_Call_Statement
+ (Loc,
+ Name =>
+ New_Occurrence_Of (Intlz, Loc),
+ Parameter_Associations =>
+ New_List (Make_Identifier (Loc, Name_V))));
+ else
+ return Empty_List;
+ end if;
+ end;
else
return Empty_List;
end if;
diff --git a/gcc/ada/exp_imgv.adb b/gcc/ada/exp_imgv.adb
index c7cf06b..3fef6fa 100644
--- a/gcc/ada/exp_imgv.adb
+++ b/gcc/ada/exp_imgv.adb
@@ -1631,7 +1631,6 @@ package body Exp_Imgv is
Name => New_Occurrence_Of (RTE (Vid), Loc),
Parameter_Associations => Args)));
- Set_Etype (N, Btyp);
Analyze_And_Resolve (N, Btyp);
return;
@@ -1640,23 +1639,22 @@ package body Exp_Imgv is
Num : constant Uint := Norm_Num (Small_Value (Rtyp));
Den : constant Uint := Norm_Den (Small_Value (Rtyp));
Max : constant Uint := UI_Max (Num, Den);
- Min : constant Uint := UI_Min (Num, Den);
Siz : constant Uint := Esize (Rtyp);
begin
if Siz <= 32
and then Max <= Uint_2 ** 31
- and then (Min = Uint_1 or else Max <= Uint_2 ** 27)
+ and then (Num = Uint_1 or else Max <= Uint_2 ** 27)
then
Vid := RE_Value_Fixed32;
elsif Siz <= 64
and then Max <= Uint_2 ** 63
- and then (Min = Uint_1 or else Max <= Uint_2 ** 59)
+ and then (Num = Uint_1 or else Max <= Uint_2 ** 59)
then
Vid := RE_Value_Fixed64;
elsif System_Max_Integer_Size = 128
and then Max <= Uint_2 ** 127
- and then (Min = Uint_1 or else Max <= Uint_2 ** 123)
+ and then (Num = Uint_1 or else Max <= Uint_2 ** 123)
then
Vid := RE_Value_Fixed128;
else
@@ -1676,7 +1674,6 @@ package body Exp_Imgv is
Name => New_Occurrence_Of (RTE (Vid), Loc),
Parameter_Associations => Args)));
- Set_Etype (N, Btyp);
Analyze_And_Resolve (N, Btyp);
return;
end if;
diff --git a/gcc/ada/exp_tss.adb b/gcc/ada/exp_tss.adb
index 89bcd29..89af166 100644
--- a/gcc/ada/exp_tss.adb
+++ b/gcc/ada/exp_tss.adb
@@ -504,13 +504,9 @@ package body Exp_Tss is
Subp : Entity_Id;
begin
- if No (FN) then
- return Empty;
-
- elsif No (TSS_Elist (FN)) then
- return Empty;
-
- else
+ if Present (FN)
+ and then Present (TSS_Elist (FN))
+ then
Elmt := First_Elmt (TSS_Elist (FN));
while Present (Elmt) loop
if Is_TSS (Node (Elmt), Nam) then
diff --git a/gcc/ada/exp_unst.adb b/gcc/ada/exp_unst.adb
index 4dc7569..58f6689 100644
--- a/gcc/ada/exp_unst.adb
+++ b/gcc/ada/exp_unst.adb
@@ -2305,8 +2305,6 @@ package body Exp_Unst is
end if;
end Adjust_One_Call;
end loop Adjust_Calls;
-
- return;
end Unnest_Subprogram;
------------------------
diff --git a/gcc/ada/exp_util.adb b/gcc/ada/exp_util.adb
index 9077891..4f98779 100644
--- a/gcc/ada/exp_util.adb
+++ b/gcc/ada/exp_util.adb
@@ -8167,21 +8167,21 @@ package body Exp_Util is
-- never climb up as far as the N_Expression_With_Actions itself.
when N_Expression_With_Actions =>
- if N = Expression (P) then
- if Is_Empty_List (Actions (P)) then
- Append_List_To (Actions (P), Ins_Actions);
- Analyze_List (Actions (P));
- else
- Insert_List_After_And_Analyze
- (Last (Actions (P)), Ins_Actions);
- end if;
-
- return;
+ if Is_List_Member (N) and then List_Containing (N) = Actions (P)
+ then
+ raise Program_Error;
+ end if;
+ if Is_Empty_List (Actions (P)) then
+ Append_List_To (Actions (P), Ins_Actions);
+ Analyze_List (Actions (P));
else
- raise Program_Error;
+ Insert_List_After_And_Analyze
+ (Last (Actions (P)), Ins_Actions);
end if;
+ return;
+
-- Case of appearing in the condition of a while expression or
-- elsif. We insert the actions into the Condition_Actions field.
-- They will be moved further out when the while loop or elsif
diff --git a/gcc/ada/gcc-interface/decl.cc b/gcc/ada/gcc-interface/decl.cc
index 972607a..903ec84 100644
--- a/gcc/ada/gcc-interface/decl.cc
+++ b/gcc/ada/gcc-interface/decl.cc
@@ -4502,7 +4502,7 @@ gnat_to_gnu_entity (Entity_Id gnat_entity, tree gnu_expr, bool definition)
if (Known_Esize (gnat_entity))
gnu_size
= validate_size (Esize (gnat_entity), gnu_type, gnat_entity,
- VAR_DECL, false, false, size_s, type_s);
+ VAR_DECL, false, false, NULL, NULL);
/* ??? The test on Has_Size_Clause must be removed when "unknown" is
no longer represented as Uint_0 (i.e. Use_New_Unknown_Rep). */
@@ -5444,7 +5444,7 @@ gnat_to_gnu_component_type (Entity_Id gnat_array, bool definition,
const bool is_bit_packed = Is_Bit_Packed_Array (gnat_array);
tree gnu_type = gnat_to_gnu_type (gnat_type);
tree gnu_comp_size;
- bool has_packed_components;
+ bool has_packed_component;
unsigned int max_align;
/* If an alignment is specified, use it as a cap on the component type
@@ -5465,16 +5465,22 @@ gnat_to_gnu_component_type (Entity_Id gnat_array, bool definition,
&& !TYPE_FAT_POINTER_P (gnu_type)
&& tree_fits_uhwi_p (TYPE_SIZE (gnu_type)))
{
- gnu_type = make_packable_type (gnu_type, false, max_align);
- has_packed_components = true;
+ tree gnu_packable_type = make_packable_type (gnu_type, false, max_align);
+ if (gnu_packable_type != gnu_type)
+ {
+ gnu_type = gnu_packable_type;
+ has_packed_component = true;
+ }
+ else
+ has_packed_component = false;
}
else
- has_packed_components = is_bit_packed;
+ has_packed_component = is_bit_packed;
/* Get and validate any specified Component_Size. */
gnu_comp_size
= validate_size (Component_Size (gnat_array), gnu_type, gnat_array,
- has_packed_components ? TYPE_DECL : VAR_DECL, true,
+ has_packed_component ? TYPE_DECL : VAR_DECL, true,
Has_Component_Size_Clause (gnat_array), NULL, NULL);
/* If the component type is a RECORD_TYPE that has a self-referential size,
@@ -6016,7 +6022,8 @@ gnat_to_gnu_profile_type (Entity_Id gnat_type)
return gnu_type;
}
-/* Return true if TYPE contains only integral data, recursively if need be. */
+/* Return true if TYPE contains only integral data, recursively if need be.
+ (integral data is to be understood as not floating-point data here). */
static bool
type_contains_only_integral_data (tree type)
@@ -6036,7 +6043,7 @@ type_contains_only_integral_data (tree type)
return type_contains_only_integral_data (TREE_TYPE (type));
default:
- return INTEGRAL_TYPE_P (type);
+ return INTEGRAL_TYPE_P (type) || POINTER_TYPE_P (type);
}
gcc_unreachable ();
@@ -9690,6 +9697,20 @@ validate_size (Uint uint_size, tree gnu_type, Entity_Id gnat_object,
return NULL_TREE;
}
+ /* The size of stand-alone objects is always a multiple of the alignment,
+ but that's already enforced for elementary types by the front-end. */
+ if (kind == VAR_DECL
+ && !component_p
+ && RECORD_OR_UNION_TYPE_P (gnu_type)
+ && !TYPE_FAT_POINTER_P (gnu_type)
+ && !integer_zerop (size_binop (TRUNC_MOD_EXPR, size,
+ bitsize_int (TYPE_ALIGN (gnu_type)))))
+ {
+ post_error_ne_num ("size for& must be multiple of alignment ^",
+ gnat_error_node, gnat_object, TYPE_ALIGN (gnu_type));
+ return NULL_TREE;
+ }
+
return size;
}
diff --git a/gcc/ada/gcc-interface/trans.cc b/gcc/ada/gcc-interface/trans.cc
index 23fc814..e02804b 100644
--- a/gcc/ada/gcc-interface/trans.cc
+++ b/gcc/ada/gcc-interface/trans.cc
@@ -257,7 +257,7 @@ static tree emit_check (tree, tree, int, Node_Id);
static tree build_unary_op_trapv (enum tree_code, tree, tree, Node_Id);
static tree build_binary_op_trapv (enum tree_code, tree, tree, tree, Node_Id);
static tree convert_with_check (Entity_Id, tree, bool, bool, Node_Id);
-static bool addressable_p (tree, tree);
+static bool addressable_p (tree, tree, bool);
static bool aliasable_p (tree, tree);
static tree assoc_to_constructor (Entity_Id, Node_Id, tree);
static tree pos_to_constructor (Node_Id, tree);
@@ -4876,6 +4876,8 @@ Call_to_gnu (Node_Id gnat_node, tree *gnu_result_type_p, tree gnu_target,
tree gnu_formal = present_gnu_tree (gnat_formal)
? get_gnu_tree (gnat_formal) : NULL_TREE;
tree gnu_actual_type = gnat_to_gnu_type (Etype (gnat_actual));
+ const bool is_init_proc
+ = Is_Entity_Name (gnat_subprog) && Is_Init_Proc (Entity (gnat_subprog));
const bool in_param = (Ekind (gnat_formal) == E_In_Parameter);
const bool is_true_formal_parm
= gnu_formal && TREE_CODE (gnu_formal) == PARM_DECL;
@@ -4925,7 +4927,7 @@ Call_to_gnu (Node_Id gnat_node, tree *gnu_result_type_p, tree gnu_target,
copy to avoid breaking strict aliasing rules. */
if (is_by_ref_formal_parm
&& (gnu_name_type = gnat_to_gnu_type (Etype (gnat_name)))
- && (!addressable_p (gnu_name, gnu_name_type)
+ && (!addressable_p (gnu_name, gnu_name_type, is_init_proc)
|| (node_is_type_conversion (gnat_actual)
&& (aliasing = !aliasable_p (gnu_name, gnu_actual_type)))))
{
@@ -5051,9 +5053,7 @@ Call_to_gnu (Node_Id gnat_node, tree *gnu_result_type_p, tree gnu_target,
/* Do not initialize it for the _Init parameter of an initialization
procedure since no data is meant to be passed in. */
- if (Ekind (gnat_formal) == E_Out_Parameter
- && Is_Entity_Name (gnat_subprog)
- && Is_Init_Proc (Entity (gnat_subprog)))
+ if (Ekind (gnat_formal) == E_Out_Parameter && is_init_proc)
gnu_name = gnu_temp = create_temporary ("A", TREE_TYPE (gnu_name));
/* Initialize it on the fly like for an implicit temporary in the
@@ -7590,6 +7590,10 @@ gnat_to_gnu (Node_Id gnat_node)
case N_Allocator:
{
+ const Entity_Id gnat_desig_type
+ = Designated_Type (Underlying_Type (Etype (gnat_node)));
+ const Entity_Id gnat_pool = Storage_Pool (gnat_node);
+
tree gnu_type, gnu_init;
bool ignore_init_type;
@@ -7608,9 +7612,6 @@ gnat_to_gnu (Node_Id gnat_node)
else if (Nkind (gnat_temp) == N_Qualified_Expression)
{
- const Entity_Id gnat_desig_type
- = Designated_Type (Underlying_Type (Etype (gnat_node)));
-
ignore_init_type = Has_Constrained_Partial_View (gnat_desig_type);
gnu_init = gnat_to_gnu (Expression (gnat_temp));
@@ -7637,11 +7638,24 @@ gnat_to_gnu (Node_Id gnat_node)
else
gcc_unreachable ();
- gnu_result_type = get_unpadded_type (Etype (gnat_node));
+ /* If this is an array allocated with its bounds, use the thin pointer
+ as the result type to trigger the machinery in build_allocator, but
+ make sure not to do it for allocations on the return and secondary
+ stacks (see build_call_alloc_dealloc_proc for more details). */
+ if (Is_Constr_Array_Subt_With_Bounds (gnat_desig_type)
+ && Is_Record_Type (Underlying_Type (Etype (gnat_pool)))
+ && !type_annotate_only)
+ {
+ tree gnu_array = gnat_to_gnu_type (Base_Type (gnat_desig_type));
+ gnu_result_type
+ = build_pointer_type (TYPE_OBJECT_RECORD_TYPE (gnu_array));
+ }
+ else
+ gnu_result_type = get_unpadded_type (Etype (gnat_node));
+
return build_allocator (gnu_type, gnu_init, gnu_result_type,
Procedure_To_Call (gnat_node),
- Storage_Pool (gnat_node), gnat_node,
- ignore_init_type);
+ gnat_pool, gnat_node, ignore_init_type);
}
break;
@@ -8577,6 +8591,18 @@ gnat_to_gnu (Node_Id gnat_node)
(void) gnat_to_gnu_entity (gnat_desig_type, NULL_TREE, false);
gnu_ptr = gnat_to_gnu (gnat_temp);
+
+ /* If this is an array allocated with its bounds, first convert to
+ the thin pointer to trigger the special machinery below. */
+ if (Is_Constr_Array_Subt_With_Bounds (gnat_desig_type))
+ {
+ tree gnu_array = gnat_to_gnu_type (Base_Type (gnat_desig_type));
+ gnu_ptr
+ = convert (build_pointer_type
+ (TYPE_OBJECT_RECORD_TYPE (gnu_array)),
+ gnu_ptr);
+ }
+
gnu_ptr_type = TREE_TYPE (gnu_ptr);
/* If this is a thin pointer, we must first dereference it to create
@@ -10353,7 +10379,8 @@ convert_with_check (Entity_Id gnat_type, tree gnu_expr, bool overflow_p,
unless it is an expression involving computation or if it involves a
reference to a bitfield or to an object not sufficiently aligned for
its type. If GNU_TYPE is non-null, return true only if GNU_EXPR can
- be directly addressed as an object of this type.
+ be directly addressed as an object of this type. COMPG is true when
+ the predicate is invoked for compiler-generated code.
*** Notes on addressability issues in the Ada compiler ***
@@ -10410,7 +10437,7 @@ convert_with_check (Entity_Id gnat_type, tree gnu_expr, bool overflow_p,
generated to connect everything together. */
static bool
-addressable_p (tree gnu_expr, tree gnu_type)
+addressable_p (tree gnu_expr, tree gnu_type, bool compg)
{
/* For an integral type, the size of the actual type of the object may not
be greater than that of the expected type, otherwise an indirect access
@@ -10471,13 +10498,13 @@ addressable_p (tree gnu_expr, tree gnu_type)
case COMPOUND_EXPR:
/* The address of a compound expression is that of its 2nd operand. */
- return addressable_p (TREE_OPERAND (gnu_expr, 1), gnu_type);
+ return addressable_p (TREE_OPERAND (gnu_expr, 1), gnu_type, compg);
case COND_EXPR:
/* We accept &COND_EXPR as soon as both operands are addressable and
expect the outcome to be the address of the selected operand. */
- return (addressable_p (TREE_OPERAND (gnu_expr, 1), NULL_TREE)
- && addressable_p (TREE_OPERAND (gnu_expr, 2), NULL_TREE));
+ return (addressable_p (TREE_OPERAND (gnu_expr, 1), NULL_TREE, compg)
+ && addressable_p (TREE_OPERAND (gnu_expr, 2), NULL_TREE, compg));
case COMPONENT_REF:
return (((!DECL_BIT_FIELD (TREE_OPERAND (gnu_expr, 1))
@@ -10491,23 +10518,26 @@ addressable_p (tree gnu_expr, tree gnu_type)
&& (DECL_ALIGN (TREE_OPERAND (gnu_expr, 1))
>= default_field_alignment (TREE_OPERAND (gnu_expr, 1),
TREE_TYPE (gnu_expr))
- /* We do not enforce this on strict-alignment platforms for
- internal fields in order to keep supporting misalignment
- of tagged types in legacy code. */
+ /* But this was historically not enforced for targets that
+ do not require strict alignment, so we keep not doing
+ it for 1) internal fields in order to keep supporting
+ misalignment of tagged types and 2) compiler-generated
+ code in order to avoid creating useless temporaries. */
|| (!STRICT_ALIGNMENT
- && DECL_INTERNAL_P (TREE_OPERAND (gnu_expr, 1)))))
+ && (DECL_INTERNAL_P (TREE_OPERAND (gnu_expr, 1))
+ || compg))))
/* The field of a padding record is always addressable. */
|| TYPE_IS_PADDING_P (TREE_TYPE (TREE_OPERAND (gnu_expr, 0))))
- && addressable_p (TREE_OPERAND (gnu_expr, 0), NULL_TREE));
+ && addressable_p (TREE_OPERAND (gnu_expr, 0), NULL_TREE, compg));
case ARRAY_REF: case ARRAY_RANGE_REF:
case REALPART_EXPR: case IMAGPART_EXPR:
case NOP_EXPR:
- return addressable_p (TREE_OPERAND (gnu_expr, 0), NULL_TREE);
+ return addressable_p (TREE_OPERAND (gnu_expr, 0), NULL_TREE, compg);
case CONVERT_EXPR:
return (AGGREGATE_TYPE_P (TREE_TYPE (gnu_expr))
- && addressable_p (TREE_OPERAND (gnu_expr, 0), NULL_TREE));
+ && addressable_p (TREE_OPERAND (gnu_expr, 0), NULL_TREE, compg));
case VIEW_CONVERT_EXPR:
{
@@ -10525,7 +10555,8 @@ addressable_p (tree gnu_expr, tree gnu_type)
|| TYPE_ALIGN (inner_type) >= BIGGEST_ALIGNMENT
|| TYPE_ALIGN_OK (type)
|| TYPE_ALIGN_OK (inner_type))))
- && addressable_p (TREE_OPERAND (gnu_expr, 0), NULL_TREE));
+ && addressable_p (TREE_OPERAND (gnu_expr, 0), NULL_TREE,
+ compg));
}
default:
diff --git a/gcc/ada/gen_il-gen-gen_nodes.adb b/gcc/ada/gen_il-gen-gen_nodes.adb
index debc66b..f4e7917 100644
--- a/gcc/ada/gen_il-gen-gen_nodes.adb
+++ b/gcc/ada/gen_il-gen-gen_nodes.adb
@@ -469,12 +469,7 @@ begin -- Gen_IL.Gen.Gen_Nodes
(Sy (Subtype_Mark, Node_Id, Default_Empty),
Sy (Expression, Node_Id, Default_Empty),
Sm (Kill_Range_Check, Flag),
- Sm (No_Truncation, Flag)),
- Nmake_Assert => "True or else Nkind (Expression) /= N_Unchecked_Type_Conversion");
--- Nmake_Assert => "Nkind (Expression) /= N_Unchecked_Type_Conversion");
- -- Assert that we don't have unchecked conversions of unchecked
- -- conversions; if Expression might be an unchecked conversion,
- -- then Tbuild.Unchecked_Convert_To should be used.
+ Sm (No_Truncation, Flag)));
Cc (N_Subtype_Indication, N_Has_Etype,
(Sy (Subtype_Mark, Node_Id, Default_Empty),
diff --git a/gcc/ada/gnat_rm.texi b/gcc/ada/gnat_rm.texi
index f45ea7c..79fb225 100644
--- a/gcc/ada/gnat_rm.texi
+++ b/gcc/ada/gnat_rm.texi
@@ -348,6 +348,7 @@ Implementation Defined Aspects
* Aspect Obsolescent::
* Aspect Part_Of::
* Aspect Persistent_BSS::
+* Aspect Potentially_Invalid::
* Aspect Predicate::
* Aspect Program_Exit::
* Aspect Pure_Function::
@@ -9536,6 +9537,7 @@ or attribute definition clause.
* Aspect Obsolescent::
* Aspect Part_Of::
* Aspect Persistent_BSS::
+* Aspect Potentially_Invalid::
* Aspect Predicate::
* Aspect Program_Exit::
* Aspect Pure_Function::
@@ -10183,7 +10185,7 @@ delayed until the freeze point.
This aspect is equivalent to @ref{bc,,pragma Part_Of}.
-@node Aspect Persistent_BSS,Aspect Predicate,Aspect Part_Of,Implementation Defined Aspects
+@node Aspect Persistent_BSS,Aspect Potentially_Invalid,Aspect Part_Of,Implementation Defined Aspects
@anchor{gnat_rm/implementation_defined_aspects aspect-persistent-bss}@anchor{15a}
@section Aspect Persistent_BSS
@@ -10192,8 +10194,18 @@ This aspect is equivalent to @ref{bc,,pragma Part_Of}.
This boolean aspect is equivalent to @ref{c0,,pragma Persistent_BSS}.
-@node Aspect Predicate,Aspect Program_Exit,Aspect Persistent_BSS,Implementation Defined Aspects
-@anchor{gnat_rm/implementation_defined_aspects aspect-predicate}@anchor{15b}
+@node Aspect Potentially_Invalid,Aspect Predicate,Aspect Persistent_BSS,Implementation Defined Aspects
+@anchor{gnat_rm/implementation_defined_aspects aspect-potentially-invalid}@anchor{15b}
+@section Aspect Potentially_Invalid
+
+
+@geindex Potentially_Invalid
+
+For the syntax and semantics of this aspect, see the SPARK 2014 Reference
+Manual, section 13.9.1.
+
+@node Aspect Predicate,Aspect Program_Exit,Aspect Potentially_Invalid,Implementation Defined Aspects
+@anchor{gnat_rm/implementation_defined_aspects aspect-predicate}@anchor{15c}
@section Aspect Predicate
@@ -10207,7 +10219,7 @@ expression. It is also separately controllable using pragma
@code{Assertion_Policy}.
@node Aspect Program_Exit,Aspect Pure_Function,Aspect Predicate,Implementation Defined Aspects
-@anchor{gnat_rm/implementation_defined_aspects aspect-program-exit}@anchor{15c}
+@anchor{gnat_rm/implementation_defined_aspects aspect-program-exit}@anchor{15d}
@section Aspect Program_Exit
@@ -10216,7 +10228,7 @@ expression. It is also separately controllable using pragma
This boolean aspect is equivalent to @ref{d0,,pragma Program_Exit}.
@node Aspect Pure_Function,Aspect Refined_Depends,Aspect Program_Exit,Implementation Defined Aspects
-@anchor{gnat_rm/implementation_defined_aspects aspect-pure-function}@anchor{15d}
+@anchor{gnat_rm/implementation_defined_aspects aspect-pure-function}@anchor{15e}
@section Aspect Pure_Function
@@ -10225,7 +10237,7 @@ This boolean aspect is equivalent to @ref{d0,,pragma Program_Exit}.
This boolean aspect is equivalent to @ref{d5,,pragma Pure_Function}.
@node Aspect Refined_Depends,Aspect Refined_Global,Aspect Pure_Function,Implementation Defined Aspects
-@anchor{gnat_rm/implementation_defined_aspects aspect-refined-depends}@anchor{15e}
+@anchor{gnat_rm/implementation_defined_aspects aspect-refined-depends}@anchor{15f}
@section Aspect Refined_Depends
@@ -10234,7 +10246,7 @@ This boolean aspect is equivalent to @ref{d5,,pragma Pure_Function}.
This aspect is equivalent to @ref{d9,,pragma Refined_Depends}.
@node Aspect Refined_Global,Aspect Refined_Post,Aspect Refined_Depends,Implementation Defined Aspects
-@anchor{gnat_rm/implementation_defined_aspects aspect-refined-global}@anchor{15f}
+@anchor{gnat_rm/implementation_defined_aspects aspect-refined-global}@anchor{160}
@section Aspect Refined_Global
@@ -10243,7 +10255,7 @@ This aspect is equivalent to @ref{d9,,pragma Refined_Depends}.
This aspect is equivalent to @ref{db,,pragma Refined_Global}.
@node Aspect Refined_Post,Aspect Refined_State,Aspect Refined_Global,Implementation Defined Aspects
-@anchor{gnat_rm/implementation_defined_aspects aspect-refined-post}@anchor{160}
+@anchor{gnat_rm/implementation_defined_aspects aspect-refined-post}@anchor{161}
@section Aspect Refined_Post
@@ -10252,7 +10264,7 @@ This aspect is equivalent to @ref{db,,pragma Refined_Global}.
This aspect is equivalent to @ref{dd,,pragma Refined_Post}.
@node Aspect Refined_State,Aspect Relaxed_Initialization,Aspect Refined_Post,Implementation Defined Aspects
-@anchor{gnat_rm/implementation_defined_aspects aspect-refined-state}@anchor{161}
+@anchor{gnat_rm/implementation_defined_aspects aspect-refined-state}@anchor{162}
@section Aspect Refined_State
@@ -10261,7 +10273,7 @@ This aspect is equivalent to @ref{dd,,pragma Refined_Post}.
This aspect is equivalent to @ref{df,,pragma Refined_State}.
@node Aspect Relaxed_Initialization,Aspect Remote_Access_Type,Aspect Refined_State,Implementation Defined Aspects
-@anchor{gnat_rm/implementation_defined_aspects aspect-relaxed-initialization}@anchor{162}
+@anchor{gnat_rm/implementation_defined_aspects aspect-relaxed-initialization}@anchor{163}
@section Aspect Relaxed_Initialization
@@ -10271,7 +10283,7 @@ For the syntax and semantics of this aspect, see the SPARK 2014 Reference
Manual, section 6.10.
@node Aspect Remote_Access_Type,Aspect Scalar_Storage_Order,Aspect Relaxed_Initialization,Implementation Defined Aspects
-@anchor{gnat_rm/implementation_defined_aspects aspect-remote-access-type}@anchor{163}
+@anchor{gnat_rm/implementation_defined_aspects aspect-remote-access-type}@anchor{164}
@section Aspect Remote_Access_Type
@@ -10280,16 +10292,16 @@ Manual, section 6.10.
This aspect is equivalent to @ref{e2,,pragma Remote_Access_Type}.
@node Aspect Scalar_Storage_Order,Aspect Secondary_Stack_Size,Aspect Remote_Access_Type,Implementation Defined Aspects
-@anchor{gnat_rm/implementation_defined_aspects aspect-scalar-storage-order}@anchor{164}
+@anchor{gnat_rm/implementation_defined_aspects aspect-scalar-storage-order}@anchor{165}
@section Aspect Scalar_Storage_Order
@geindex Scalar_Storage_Order
-This aspect is equivalent to a @ref{165,,attribute Scalar_Storage_Order}.
+This aspect is equivalent to a @ref{166,,attribute Scalar_Storage_Order}.
@node Aspect Secondary_Stack_Size,Aspect Shared,Aspect Scalar_Storage_Order,Implementation Defined Aspects
-@anchor{gnat_rm/implementation_defined_aspects aspect-secondary-stack-size}@anchor{166}
+@anchor{gnat_rm/implementation_defined_aspects aspect-secondary-stack-size}@anchor{167}
@section Aspect Secondary_Stack_Size
@@ -10298,7 +10310,7 @@ This aspect is equivalent to a @ref{165,,attribute Scalar_Storage_Order}.
This aspect is equivalent to @ref{e8,,pragma Secondary_Stack_Size}.
@node Aspect Shared,Aspect Side_Effects,Aspect Secondary_Stack_Size,Implementation Defined Aspects
-@anchor{gnat_rm/implementation_defined_aspects aspect-shared}@anchor{167}
+@anchor{gnat_rm/implementation_defined_aspects aspect-shared}@anchor{168}
@section Aspect Shared
@@ -10308,7 +10320,7 @@ This boolean aspect is equivalent to @ref{eb,,pragma Shared}
and is thus a synonym for aspect @code{Atomic}.
@node Aspect Side_Effects,Aspect Simple_Storage_Pool,Aspect Shared,Implementation Defined Aspects
-@anchor{gnat_rm/implementation_defined_aspects aspect-side-effects}@anchor{168}
+@anchor{gnat_rm/implementation_defined_aspects aspect-side-effects}@anchor{169}
@section Aspect Side_Effects
@@ -10317,7 +10329,7 @@ and is thus a synonym for aspect @code{Atomic}.
This aspect is equivalent to @ref{ef,,pragma Side_Effects}.
@node Aspect Simple_Storage_Pool,Aspect Simple_Storage_Pool_Type,Aspect Side_Effects,Implementation Defined Aspects
-@anchor{gnat_rm/implementation_defined_aspects aspect-simple-storage-pool}@anchor{169}
+@anchor{gnat_rm/implementation_defined_aspects aspect-simple-storage-pool}@anchor{16a}
@section Aspect Simple_Storage_Pool
@@ -10326,7 +10338,7 @@ This aspect is equivalent to @ref{ef,,pragma Side_Effects}.
This aspect is equivalent to @ref{f2,,attribute Simple_Storage_Pool}.
@node Aspect Simple_Storage_Pool_Type,Aspect SPARK_Mode,Aspect Simple_Storage_Pool,Implementation Defined Aspects
-@anchor{gnat_rm/implementation_defined_aspects aspect-simple-storage-pool-type}@anchor{16a}
+@anchor{gnat_rm/implementation_defined_aspects aspect-simple-storage-pool-type}@anchor{16b}
@section Aspect Simple_Storage_Pool_Type
@@ -10335,7 +10347,7 @@ This aspect is equivalent to @ref{f2,,attribute Simple_Storage_Pool}.
This boolean aspect is equivalent to @ref{f1,,pragma Simple_Storage_Pool_Type}.
@node Aspect SPARK_Mode,Aspect Subprogram_Variant,Aspect Simple_Storage_Pool_Type,Implementation Defined Aspects
-@anchor{gnat_rm/implementation_defined_aspects aspect-spark-mode}@anchor{16b}
+@anchor{gnat_rm/implementation_defined_aspects aspect-spark-mode}@anchor{16c}
@section Aspect SPARK_Mode
@@ -10346,7 +10358,7 @@ may be specified for either or both of the specification and body
of a subprogram or package.
@node Aspect Subprogram_Variant,Aspect Suppress_Debug_Info,Aspect SPARK_Mode,Implementation Defined Aspects
-@anchor{gnat_rm/implementation_defined_aspects aspect-subprogram-variant}@anchor{16c}
+@anchor{gnat_rm/implementation_defined_aspects aspect-subprogram-variant}@anchor{16d}
@section Aspect Subprogram_Variant
@@ -10356,7 +10368,7 @@ For the syntax and semantics of this aspect, see the SPARK 2014 Reference
Manual, section 6.1.8.
@node Aspect Suppress_Debug_Info,Aspect Suppress_Initialization,Aspect Subprogram_Variant,Implementation Defined Aspects
-@anchor{gnat_rm/implementation_defined_aspects aspect-suppress-debug-info}@anchor{16d}
+@anchor{gnat_rm/implementation_defined_aspects aspect-suppress-debug-info}@anchor{16e}
@section Aspect Suppress_Debug_Info
@@ -10365,7 +10377,7 @@ Manual, section 6.1.8.
This boolean aspect is equivalent to @ref{102,,pragma Suppress_Debug_Info}.
@node Aspect Suppress_Initialization,Aspect Test_Case,Aspect Suppress_Debug_Info,Implementation Defined Aspects
-@anchor{gnat_rm/implementation_defined_aspects aspect-suppress-initialization}@anchor{16e}
+@anchor{gnat_rm/implementation_defined_aspects aspect-suppress-initialization}@anchor{16f}
@section Aspect Suppress_Initialization
@@ -10374,7 +10386,7 @@ This boolean aspect is equivalent to @ref{102,,pragma Suppress_Debug_Info}.
This boolean aspect is equivalent to @ref{105,,pragma Suppress_Initialization}.
@node Aspect Test_Case,Aspect Thread_Local_Storage,Aspect Suppress_Initialization,Implementation Defined Aspects
-@anchor{gnat_rm/implementation_defined_aspects aspect-test-case}@anchor{16f}
+@anchor{gnat_rm/implementation_defined_aspects aspect-test-case}@anchor{170}
@section Aspect Test_Case
@@ -10383,7 +10395,7 @@ This boolean aspect is equivalent to @ref{105,,pragma Suppress_Initialization}.
This aspect is equivalent to @ref{109,,pragma Test_Case}.
@node Aspect Thread_Local_Storage,Aspect Universal_Aliasing,Aspect Test_Case,Implementation Defined Aspects
-@anchor{gnat_rm/implementation_defined_aspects aspect-thread-local-storage}@anchor{170}
+@anchor{gnat_rm/implementation_defined_aspects aspect-thread-local-storage}@anchor{171}
@section Aspect Thread_Local_Storage
@@ -10392,7 +10404,7 @@ This aspect is equivalent to @ref{109,,pragma Test_Case}.
This boolean aspect is equivalent to @ref{10b,,pragma Thread_Local_Storage}.
@node Aspect Universal_Aliasing,Aspect Unmodified,Aspect Thread_Local_Storage,Implementation Defined Aspects
-@anchor{gnat_rm/implementation_defined_aspects aspect-universal-aliasing}@anchor{171}
+@anchor{gnat_rm/implementation_defined_aspects aspect-universal-aliasing}@anchor{172}
@section Aspect Universal_Aliasing
@@ -10401,7 +10413,7 @@ This boolean aspect is equivalent to @ref{10b,,pragma Thread_Local_Storage}.
This boolean aspect is equivalent to @ref{116,,pragma Universal_Aliasing}.
@node Aspect Unmodified,Aspect Unreferenced,Aspect Universal_Aliasing,Implementation Defined Aspects
-@anchor{gnat_rm/implementation_defined_aspects aspect-unmodified}@anchor{172}
+@anchor{gnat_rm/implementation_defined_aspects aspect-unmodified}@anchor{173}
@section Aspect Unmodified
@@ -10410,7 +10422,7 @@ This boolean aspect is equivalent to @ref{116,,pragma Universal_Aliasing}.
This boolean aspect is equivalent to @ref{118,,pragma Unmodified}.
@node Aspect Unreferenced,Aspect Unreferenced_Objects,Aspect Unmodified,Implementation Defined Aspects
-@anchor{gnat_rm/implementation_defined_aspects aspect-unreferenced}@anchor{173}
+@anchor{gnat_rm/implementation_defined_aspects aspect-unreferenced}@anchor{174}
@section Aspect Unreferenced
@@ -10423,7 +10435,7 @@ parameters, which is in particular the only form possible for expression
functions.
@node Aspect Unreferenced_Objects,Aspect User_Aspect,Aspect Unreferenced,Implementation Defined Aspects
-@anchor{gnat_rm/implementation_defined_aspects aspect-unreferenced-objects}@anchor{174}
+@anchor{gnat_rm/implementation_defined_aspects aspect-unreferenced-objects}@anchor{175}
@section Aspect Unreferenced_Objects
@@ -10432,7 +10444,7 @@ functions.
This boolean aspect is equivalent to @ref{11c,,pragma Unreferenced_Objects}.
@node Aspect User_Aspect,Aspect Value_Size,Aspect Unreferenced_Objects,Implementation Defined Aspects
-@anchor{gnat_rm/implementation_defined_aspects aspect-user-aspect}@anchor{175}
+@anchor{gnat_rm/implementation_defined_aspects aspect-user-aspect}@anchor{176}
@section Aspect User_Aspect
@@ -10445,16 +10457,16 @@ replicating the set of aspect specifications associated with the named
pragma-defined aspect.
@node Aspect Value_Size,Aspect Volatile_Full_Access,Aspect User_Aspect,Implementation Defined Aspects
-@anchor{gnat_rm/implementation_defined_aspects aspect-value-size}@anchor{176}
+@anchor{gnat_rm/implementation_defined_aspects aspect-value-size}@anchor{177}
@section Aspect Value_Size
@geindex Value_Size
-This aspect is equivalent to @ref{177,,attribute Value_Size}.
+This aspect is equivalent to @ref{178,,attribute Value_Size}.
@node Aspect Volatile_Full_Access,Aspect Volatile_Function,Aspect Value_Size,Implementation Defined Aspects
-@anchor{gnat_rm/implementation_defined_aspects aspect-volatile-full-access}@anchor{178}
+@anchor{gnat_rm/implementation_defined_aspects aspect-volatile-full-access}@anchor{179}
@section Aspect Volatile_Full_Access
@@ -10463,7 +10475,7 @@ This aspect is equivalent to @ref{177,,attribute Value_Size}.
This boolean aspect is equivalent to @ref{126,,pragma Volatile_Full_Access}.
@node Aspect Volatile_Function,Aspect Warnings,Aspect Volatile_Full_Access,Implementation Defined Aspects
-@anchor{gnat_rm/implementation_defined_aspects aspect-volatile-function}@anchor{179}
+@anchor{gnat_rm/implementation_defined_aspects aspect-volatile-function}@anchor{17a}
@section Aspect Volatile_Function
@@ -10472,7 +10484,7 @@ This boolean aspect is equivalent to @ref{126,,pragma Volatile_Full_Access}.
This boolean aspect is equivalent to @ref{128,,pragma Volatile_Function}.
@node Aspect Warnings,,Aspect Volatile_Function,Implementation Defined Aspects
-@anchor{gnat_rm/implementation_defined_aspects aspect-warnings}@anchor{17a}
+@anchor{gnat_rm/implementation_defined_aspects aspect-warnings}@anchor{17b}
@section Aspect Warnings
@@ -10483,7 +10495,7 @@ where the first argument is @code{ON} or @code{OFF} and the second argument
is the entity.
@node Implementation Defined Attributes,Standard and Implementation Defined Restrictions,Implementation Defined Aspects,Top
-@anchor{gnat_rm/implementation_defined_attributes doc}@anchor{17b}@anchor{gnat_rm/implementation_defined_attributes id1}@anchor{17c}@anchor{gnat_rm/implementation_defined_attributes implementation-defined-attributes}@anchor{8}
+@anchor{gnat_rm/implementation_defined_attributes doc}@anchor{17c}@anchor{gnat_rm/implementation_defined_attributes id1}@anchor{17d}@anchor{gnat_rm/implementation_defined_attributes implementation-defined-attributes}@anchor{8}
@chapter Implementation Defined Attributes
@@ -10589,7 +10601,7 @@ consideration, you should minimize the use of these attributes.
@end menu
@node Attribute Abort_Signal,Attribute Address_Size,,Implementation Defined Attributes
-@anchor{gnat_rm/implementation_defined_attributes attribute-abort-signal}@anchor{17d}
+@anchor{gnat_rm/implementation_defined_attributes attribute-abort-signal}@anchor{17e}
@section Attribute Abort_Signal
@@ -10603,7 +10615,7 @@ completely outside the normal semantics of Ada, for a user program to
intercept the abort exception).
@node Attribute Address_Size,Attribute Asm_Input,Attribute Abort_Signal,Implementation Defined Attributes
-@anchor{gnat_rm/implementation_defined_attributes attribute-address-size}@anchor{17e}
+@anchor{gnat_rm/implementation_defined_attributes attribute-address-size}@anchor{17f}
@section Attribute Address_Size
@@ -10619,7 +10631,7 @@ reference to System.Address’Size is nonstatic because Address
is a private type.
@node Attribute Asm_Input,Attribute Asm_Output,Attribute Address_Size,Implementation Defined Attributes
-@anchor{gnat_rm/implementation_defined_attributes attribute-asm-input}@anchor{17f}
+@anchor{gnat_rm/implementation_defined_attributes attribute-asm-input}@anchor{180}
@section Attribute Asm_Input
@@ -10633,10 +10645,10 @@ to be a static expression, and is the constraint for the parameter,
value to be used as the input argument. The possible values for the
constant are the same as those used in the RTL, and are dependent on
the configuration file used to built the GCC back end.
-@ref{180,,Machine Code Insertions}
+@ref{181,,Machine Code Insertions}
@node Attribute Asm_Output,Attribute Atomic_Always_Lock_Free,Attribute Asm_Input,Implementation Defined Attributes
-@anchor{gnat_rm/implementation_defined_attributes attribute-asm-output}@anchor{181}
+@anchor{gnat_rm/implementation_defined_attributes attribute-asm-output}@anchor{182}
@section Attribute Asm_Output
@@ -10652,10 +10664,10 @@ result. The possible values for constraint are the same as those used in
the RTL, and are dependent on the configuration file used to build the
GCC back end. If there are no output operands, then this argument may
either be omitted, or explicitly given as @code{No_Output_Operands}.
-@ref{180,,Machine Code Insertions}
+@ref{181,,Machine Code Insertions}
@node Attribute Atomic_Always_Lock_Free,Attribute Bit,Attribute Asm_Output,Implementation Defined Attributes
-@anchor{gnat_rm/implementation_defined_attributes attribute-atomic-always-lock-free}@anchor{182}
+@anchor{gnat_rm/implementation_defined_attributes attribute-atomic-always-lock-free}@anchor{183}
@section Attribute Atomic_Always_Lock_Free
@@ -10666,7 +10678,7 @@ result indicates whether atomic operations are supported by the target
for the given type.
@node Attribute Bit,Attribute Bit_Position,Attribute Atomic_Always_Lock_Free,Implementation Defined Attributes
-@anchor{gnat_rm/implementation_defined_attributes attribute-bit}@anchor{183}
+@anchor{gnat_rm/implementation_defined_attributes attribute-bit}@anchor{184}
@section Attribute Bit
@@ -10697,7 +10709,7 @@ This attribute is designed to be compatible with the DEC Ada 83 definition
and implementation of the @code{Bit} attribute.
@node Attribute Bit_Position,Attribute Code_Address,Attribute Bit,Implementation Defined Attributes
-@anchor{gnat_rm/implementation_defined_attributes attribute-bit-position}@anchor{184}
+@anchor{gnat_rm/implementation_defined_attributes attribute-bit-position}@anchor{185}
@section Attribute Bit_Position
@@ -10712,7 +10724,7 @@ type `universal_integer'. The value depends only on the field
the containing record @code{R}.
@node Attribute Code_Address,Attribute Compiler_Version,Attribute Bit_Position,Implementation Defined Attributes
-@anchor{gnat_rm/implementation_defined_attributes attribute-code-address}@anchor{185}
+@anchor{gnat_rm/implementation_defined_attributes attribute-code-address}@anchor{186}
@section Attribute Code_Address
@@ -10755,7 +10767,7 @@ the same value as is returned by the corresponding @code{'Address}
attribute.
@node Attribute Compiler_Version,Attribute Constrained,Attribute Code_Address,Implementation Defined Attributes
-@anchor{gnat_rm/implementation_defined_attributes attribute-compiler-version}@anchor{186}
+@anchor{gnat_rm/implementation_defined_attributes attribute-compiler-version}@anchor{187}
@section Attribute Compiler_Version
@@ -10766,7 +10778,7 @@ prefix) yields a static string identifying the version of the compiler
being used to compile the unit containing the attribute reference.
@node Attribute Constrained,Attribute Default_Bit_Order,Attribute Compiler_Version,Implementation Defined Attributes
-@anchor{gnat_rm/implementation_defined_attributes attribute-constrained}@anchor{187}
+@anchor{gnat_rm/implementation_defined_attributes attribute-constrained}@anchor{188}
@section Attribute Constrained
@@ -10781,7 +10793,7 @@ record type without discriminants is always @code{True}. This usage is
compatible with older Ada compilers, including notably DEC Ada.
@node Attribute Default_Bit_Order,Attribute Default_Scalar_Storage_Order,Attribute Constrained,Implementation Defined Attributes
-@anchor{gnat_rm/implementation_defined_attributes attribute-default-bit-order}@anchor{188}
+@anchor{gnat_rm/implementation_defined_attributes attribute-default-bit-order}@anchor{189}
@section Attribute Default_Bit_Order
@@ -10798,7 +10810,7 @@ as a @code{Pos} value (0 for @code{High_Order_First}, 1 for
@code{Default_Bit_Order} in package @code{System}.
@node Attribute Default_Scalar_Storage_Order,Attribute Deref,Attribute Default_Bit_Order,Implementation Defined Attributes
-@anchor{gnat_rm/implementation_defined_attributes attribute-default-scalar-storage-order}@anchor{189}
+@anchor{gnat_rm/implementation_defined_attributes attribute-default-scalar-storage-order}@anchor{18a}
@section Attribute Default_Scalar_Storage_Order
@@ -10815,7 +10827,7 @@ equal to @code{Default_Bit_Order} if unspecified) as a
@code{System.Bit_Order} value. This is a static attribute.
@node Attribute Deref,Attribute Descriptor_Size,Attribute Default_Scalar_Storage_Order,Implementation Defined Attributes
-@anchor{gnat_rm/implementation_defined_attributes attribute-deref}@anchor{18a}
+@anchor{gnat_rm/implementation_defined_attributes attribute-deref}@anchor{18b}
@section Attribute Deref
@@ -10828,7 +10840,7 @@ a named access-to-@cite{typ} type, except that it yields a variable, so it can b
used on the left side of an assignment.
@node Attribute Descriptor_Size,Attribute Elaborated,Attribute Deref,Implementation Defined Attributes
-@anchor{gnat_rm/implementation_defined_attributes attribute-descriptor-size}@anchor{18b}
+@anchor{gnat_rm/implementation_defined_attributes attribute-descriptor-size}@anchor{18c}
@section Attribute Descriptor_Size
@@ -10857,7 +10869,7 @@ since @code{Positive} has an alignment of 4, the size of the descriptor is
which yields a size of 32 bits, i.e. including 16 bits of padding.
@node Attribute Elaborated,Attribute Elab_Body,Attribute Descriptor_Size,Implementation Defined Attributes
-@anchor{gnat_rm/implementation_defined_attributes attribute-elaborated}@anchor{18c}
+@anchor{gnat_rm/implementation_defined_attributes attribute-elaborated}@anchor{18d}
@section Attribute Elaborated
@@ -10872,7 +10884,7 @@ units has been completed. An exception is for units which need no
elaboration, the value is always False for such units.
@node Attribute Elab_Body,Attribute Elab_Spec,Attribute Elaborated,Implementation Defined Attributes
-@anchor{gnat_rm/implementation_defined_attributes attribute-elab-body}@anchor{18d}
+@anchor{gnat_rm/implementation_defined_attributes attribute-elab-body}@anchor{18e}
@section Attribute Elab_Body
@@ -10888,7 +10900,7 @@ e.g., if it is necessary to do selective re-elaboration to fix some
error.
@node Attribute Elab_Spec,Attribute Elab_Subp_Body,Attribute Elab_Body,Implementation Defined Attributes
-@anchor{gnat_rm/implementation_defined_attributes attribute-elab-spec}@anchor{18e}
+@anchor{gnat_rm/implementation_defined_attributes attribute-elab-spec}@anchor{18f}
@section Attribute Elab_Spec
@@ -10904,7 +10916,7 @@ Ada code, e.g., if it is necessary to do selective re-elaboration to fix
some error.
@node Attribute Elab_Subp_Body,Attribute Emax,Attribute Elab_Spec,Implementation Defined Attributes
-@anchor{gnat_rm/implementation_defined_attributes attribute-elab-subp-body}@anchor{18f}
+@anchor{gnat_rm/implementation_defined_attributes attribute-elab-subp-body}@anchor{190}
@section Attribute Elab_Subp_Body
@@ -10918,7 +10930,7 @@ elaboration procedure by the binder in CodePeer mode only and is unrecognized
otherwise.
@node Attribute Emax,Attribute Enabled,Attribute Elab_Subp_Body,Implementation Defined Attributes
-@anchor{gnat_rm/implementation_defined_attributes attribute-emax}@anchor{190}
+@anchor{gnat_rm/implementation_defined_attributes attribute-emax}@anchor{191}
@section Attribute Emax
@@ -10931,7 +10943,7 @@ the Ada 83 reference manual for an exact description of the semantics of
this attribute.
@node Attribute Enabled,Attribute Enum_Rep,Attribute Emax,Implementation Defined Attributes
-@anchor{gnat_rm/implementation_defined_attributes attribute-enabled}@anchor{191}
+@anchor{gnat_rm/implementation_defined_attributes attribute-enabled}@anchor{192}
@section Attribute Enabled
@@ -10955,7 +10967,7 @@ a @code{pragma Suppress} or @code{pragma Unsuppress} before instantiating
the package or subprogram, controlling whether the check will be present.
@node Attribute Enum_Rep,Attribute Enum_Val,Attribute Enabled,Implementation Defined Attributes
-@anchor{gnat_rm/implementation_defined_attributes attribute-enum-rep}@anchor{192}
+@anchor{gnat_rm/implementation_defined_attributes attribute-enum-rep}@anchor{193}
@section Attribute Enum_Rep
@@ -10995,7 +11007,7 @@ integer calculation is done at run time, then the call to @code{Enum_Rep}
may raise @code{Constraint_Error}.
@node Attribute Enum_Val,Attribute Epsilon,Attribute Enum_Rep,Implementation Defined Attributes
-@anchor{gnat_rm/implementation_defined_attributes attribute-enum-val}@anchor{193}
+@anchor{gnat_rm/implementation_defined_attributes attribute-enum-val}@anchor{194}
@section Attribute Enum_Val
@@ -11021,7 +11033,7 @@ absence of an enumeration representation clause. This is a static
attribute (i.e., the result is static if the argument is static).
@node Attribute Epsilon,Attribute Fast_Math,Attribute Enum_Val,Implementation Defined Attributes
-@anchor{gnat_rm/implementation_defined_attributes attribute-epsilon}@anchor{194}
+@anchor{gnat_rm/implementation_defined_attributes attribute-epsilon}@anchor{195}
@section Attribute Epsilon
@@ -11034,7 +11046,7 @@ the Ada 83 reference manual for an exact description of the semantics of
this attribute.
@node Attribute Fast_Math,Attribute Finalization_Size,Attribute Epsilon,Implementation Defined Attributes
-@anchor{gnat_rm/implementation_defined_attributes attribute-fast-math}@anchor{195}
+@anchor{gnat_rm/implementation_defined_attributes attribute-fast-math}@anchor{196}
@section Attribute Fast_Math
@@ -11045,7 +11057,7 @@ prefix) yields a static Boolean value that is True if pragma
@code{Fast_Math} is active, and False otherwise.
@node Attribute Finalization_Size,Attribute Fixed_Value,Attribute Fast_Math,Implementation Defined Attributes
-@anchor{gnat_rm/implementation_defined_attributes attribute-finalization-size}@anchor{196}
+@anchor{gnat_rm/implementation_defined_attributes attribute-finalization-size}@anchor{197}
@section Attribute Finalization_Size
@@ -11063,7 +11075,7 @@ class-wide type whose tag denotes a type with no controlled parts.
Note that only heap-allocated objects contain finalization data.
@node Attribute Fixed_Value,Attribute From_Any,Attribute Finalization_Size,Implementation Defined Attributes
-@anchor{gnat_rm/implementation_defined_attributes attribute-fixed-value}@anchor{197}
+@anchor{gnat_rm/implementation_defined_attributes attribute-fixed-value}@anchor{198}
@section Attribute Fixed_Value
@@ -11090,7 +11102,7 @@ This attribute is primarily intended for use in implementation of the
input-output functions for fixed-point values.
@node Attribute From_Any,Attribute Has_Access_Values,Attribute Fixed_Value,Implementation Defined Attributes
-@anchor{gnat_rm/implementation_defined_attributes attribute-from-any}@anchor{198}
+@anchor{gnat_rm/implementation_defined_attributes attribute-from-any}@anchor{199}
@section Attribute From_Any
@@ -11100,7 +11112,7 @@ This internal attribute is used for the generation of remote subprogram
stubs in the context of the Distributed Systems Annex.
@node Attribute Has_Access_Values,Attribute Has_Discriminants,Attribute From_Any,Implementation Defined Attributes
-@anchor{gnat_rm/implementation_defined_attributes attribute-has-access-values}@anchor{199}
+@anchor{gnat_rm/implementation_defined_attributes attribute-has-access-values}@anchor{19a}
@section Attribute Has_Access_Values
@@ -11118,7 +11130,7 @@ definitions. If the attribute is applied to a generic private type, it
indicates whether or not the corresponding actual type has access values.
@node Attribute Has_Discriminants,Attribute Has_Tagged_Values,Attribute Has_Access_Values,Implementation Defined Attributes
-@anchor{gnat_rm/implementation_defined_attributes attribute-has-discriminants}@anchor{19a}
+@anchor{gnat_rm/implementation_defined_attributes attribute-has-discriminants}@anchor{19b}
@section Attribute Has_Discriminants
@@ -11134,7 +11146,7 @@ definitions. If the attribute is applied to a generic private type, it
indicates whether or not the corresponding actual type has discriminants.
@node Attribute Has_Tagged_Values,Attribute Img,Attribute Has_Discriminants,Implementation Defined Attributes
-@anchor{gnat_rm/implementation_defined_attributes attribute-has-tagged-values}@anchor{19b}
+@anchor{gnat_rm/implementation_defined_attributes attribute-has-tagged-values}@anchor{19c}
@section Attribute Has_Tagged_Values
@@ -11151,7 +11163,7 @@ definitions. If the attribute is applied to a generic private type, it
indicates whether or not the corresponding actual type has access values.
@node Attribute Img,Attribute Initialized,Attribute Has_Tagged_Values,Implementation Defined Attributes
-@anchor{gnat_rm/implementation_defined_attributes attribute-img}@anchor{19c}
+@anchor{gnat_rm/implementation_defined_attributes attribute-img}@anchor{19d}
@section Attribute Img
@@ -11181,7 +11193,7 @@ that returns the appropriate string when called. This means that
in an instantiation as a function parameter.
@node Attribute Initialized,Attribute Integer_Value,Attribute Img,Implementation Defined Attributes
-@anchor{gnat_rm/implementation_defined_attributes attribute-initialized}@anchor{19d}
+@anchor{gnat_rm/implementation_defined_attributes attribute-initialized}@anchor{19e}
@section Attribute Initialized
@@ -11191,7 +11203,7 @@ For the syntax and semantics of this attribute, see the SPARK 2014 Reference
Manual, section 6.10.
@node Attribute Integer_Value,Attribute Invalid_Value,Attribute Initialized,Implementation Defined Attributes
-@anchor{gnat_rm/implementation_defined_attributes attribute-integer-value}@anchor{19e}
+@anchor{gnat_rm/implementation_defined_attributes attribute-integer-value}@anchor{19f}
@section Attribute Integer_Value
@@ -11219,7 +11231,7 @@ This attribute is primarily intended for use in implementation of the
standard input-output functions for fixed-point values.
@node Attribute Invalid_Value,Attribute Large,Attribute Integer_Value,Implementation Defined Attributes
-@anchor{gnat_rm/implementation_defined_attributes attribute-invalid-value}@anchor{19f}
+@anchor{gnat_rm/implementation_defined_attributes attribute-invalid-value}@anchor{1a0}
@section Attribute Invalid_Value
@@ -11233,7 +11245,7 @@ including the ability to modify the value with the binder -Sxx flag and
relevant environment variables at run time.
@node Attribute Large,Attribute Library_Level,Attribute Invalid_Value,Implementation Defined Attributes
-@anchor{gnat_rm/implementation_defined_attributes attribute-large}@anchor{1a0}
+@anchor{gnat_rm/implementation_defined_attributes attribute-large}@anchor{1a1}
@section Attribute Large
@@ -11246,7 +11258,7 @@ the Ada 83 reference manual for an exact description of the semantics of
this attribute.
@node Attribute Library_Level,Attribute Loop_Entry,Attribute Large,Implementation Defined Attributes
-@anchor{gnat_rm/implementation_defined_attributes attribute-library-level}@anchor{1a1}
+@anchor{gnat_rm/implementation_defined_attributes attribute-library-level}@anchor{1a2}
@section Attribute Library_Level
@@ -11272,7 +11284,7 @@ end Gen;
@end example
@node Attribute Loop_Entry,Attribute Machine_Size,Attribute Library_Level,Implementation Defined Attributes
-@anchor{gnat_rm/implementation_defined_attributes attribute-loop-entry}@anchor{1a2}
+@anchor{gnat_rm/implementation_defined_attributes attribute-loop-entry}@anchor{1a3}
@section Attribute Loop_Entry
@@ -11305,7 +11317,7 @@ entry. This copy is not performed if the loop is not entered, or if the
corresponding pragmas are ignored or disabled.
@node Attribute Machine_Size,Attribute Mantissa,Attribute Loop_Entry,Implementation Defined Attributes
-@anchor{gnat_rm/implementation_defined_attributes attribute-machine-size}@anchor{1a3}
+@anchor{gnat_rm/implementation_defined_attributes attribute-machine-size}@anchor{1a4}
@section Attribute Machine_Size
@@ -11315,7 +11327,7 @@ This attribute is identical to the @code{Object_Size} attribute. It is
provided for compatibility with the DEC Ada 83 attribute of this name.
@node Attribute Mantissa,Attribute Maximum_Alignment,Attribute Machine_Size,Implementation Defined Attributes
-@anchor{gnat_rm/implementation_defined_attributes attribute-mantissa}@anchor{1a4}
+@anchor{gnat_rm/implementation_defined_attributes attribute-mantissa}@anchor{1a5}
@section Attribute Mantissa
@@ -11328,7 +11340,7 @@ the Ada 83 reference manual for an exact description of the semantics of
this attribute.
@node Attribute Maximum_Alignment,Attribute Max_Integer_Size,Attribute Mantissa,Implementation Defined Attributes
-@anchor{gnat_rm/implementation_defined_attributes attribute-maximum-alignment}@anchor{1a5}@anchor{gnat_rm/implementation_defined_attributes id2}@anchor{1a6}
+@anchor{gnat_rm/implementation_defined_attributes attribute-maximum-alignment}@anchor{1a6}@anchor{gnat_rm/implementation_defined_attributes id2}@anchor{1a7}
@section Attribute Maximum_Alignment
@@ -11344,7 +11356,7 @@ for an object, guaranteeing that it is properly aligned in all
cases.
@node Attribute Max_Integer_Size,Attribute Mechanism_Code,Attribute Maximum_Alignment,Implementation Defined Attributes
-@anchor{gnat_rm/implementation_defined_attributes attribute-max-integer-size}@anchor{1a7}
+@anchor{gnat_rm/implementation_defined_attributes attribute-max-integer-size}@anchor{1a8}
@section Attribute Max_Integer_Size
@@ -11355,7 +11367,7 @@ prefix) provides the size of the largest supported integer type for
the target. The result is a static constant.
@node Attribute Mechanism_Code,Attribute Null_Parameter,Attribute Max_Integer_Size,Implementation Defined Attributes
-@anchor{gnat_rm/implementation_defined_attributes attribute-mechanism-code}@anchor{1a8}
+@anchor{gnat_rm/implementation_defined_attributes attribute-mechanism-code}@anchor{1a9}
@section Attribute Mechanism_Code
@@ -11386,7 +11398,7 @@ by reference
@end table
@node Attribute Null_Parameter,Attribute Object_Size,Attribute Mechanism_Code,Implementation Defined Attributes
-@anchor{gnat_rm/implementation_defined_attributes attribute-null-parameter}@anchor{1a9}
+@anchor{gnat_rm/implementation_defined_attributes attribute-null-parameter}@anchor{1aa}
@section Attribute Null_Parameter
@@ -11411,7 +11423,7 @@ There is no way of indicating this without the @code{Null_Parameter}
attribute.
@node Attribute Object_Size,Attribute Old,Attribute Null_Parameter,Implementation Defined Attributes
-@anchor{gnat_rm/implementation_defined_attributes attribute-object-size}@anchor{157}@anchor{gnat_rm/implementation_defined_attributes id3}@anchor{1aa}
+@anchor{gnat_rm/implementation_defined_attributes attribute-object-size}@anchor{157}@anchor{gnat_rm/implementation_defined_attributes id3}@anchor{1ab}
@section Attribute Object_Size
@@ -11481,7 +11493,7 @@ Similar additional checks are performed in other contexts requiring
statically matching subtypes.
@node Attribute Old,Attribute Passed_By_Reference,Attribute Object_Size,Implementation Defined Attributes
-@anchor{gnat_rm/implementation_defined_attributes attribute-old}@anchor{1ab}
+@anchor{gnat_rm/implementation_defined_attributes attribute-old}@anchor{1ac}
@section Attribute Old
@@ -11496,7 +11508,7 @@ definition are allowed under control of
implementation defined pragma @code{Unevaluated_Use_Of_Old}.
@node Attribute Passed_By_Reference,Attribute Pool_Address,Attribute Old,Implementation Defined Attributes
-@anchor{gnat_rm/implementation_defined_attributes attribute-passed-by-reference}@anchor{1ac}
+@anchor{gnat_rm/implementation_defined_attributes attribute-passed-by-reference}@anchor{1ad}
@section Attribute Passed_By_Reference
@@ -11512,7 +11524,7 @@ passed by copy in calls. For scalar types, the result is always @code{False}
and is static. For non-scalar types, the result is nonstatic.
@node Attribute Pool_Address,Attribute Range_Length,Attribute Passed_By_Reference,Implementation Defined Attributes
-@anchor{gnat_rm/implementation_defined_attributes attribute-pool-address}@anchor{1ad}
+@anchor{gnat_rm/implementation_defined_attributes attribute-pool-address}@anchor{1ae}
@section Attribute Pool_Address
@@ -11534,7 +11546,7 @@ For an object created by @code{new}, @code{Ptr.all'Pool_Address} is
what is passed to @code{Allocate} and returned from @code{Deallocate}.
@node Attribute Range_Length,Attribute Restriction_Set,Attribute Pool_Address,Implementation Defined Attributes
-@anchor{gnat_rm/implementation_defined_attributes attribute-range-length}@anchor{1ae}
+@anchor{gnat_rm/implementation_defined_attributes attribute-range-length}@anchor{1af}
@section Attribute Range_Length
@@ -11547,7 +11559,7 @@ applied to the index subtype of a one dimensional array always gives the
same result as @code{Length} applied to the array itself.
@node Attribute Restriction_Set,Attribute Result,Attribute Range_Length,Implementation Defined Attributes
-@anchor{gnat_rm/implementation_defined_attributes attribute-restriction-set}@anchor{1af}
+@anchor{gnat_rm/implementation_defined_attributes attribute-restriction-set}@anchor{1b0}
@section Attribute Restriction_Set
@@ -11617,7 +11629,7 @@ Restrictions pragma, they are not analyzed semantically,
so they do not have a type.
@node Attribute Result,Attribute Round,Attribute Restriction_Set,Implementation Defined Attributes
-@anchor{gnat_rm/implementation_defined_attributes attribute-result}@anchor{1b0}
+@anchor{gnat_rm/implementation_defined_attributes attribute-result}@anchor{1b1}
@section Attribute Result
@@ -11630,7 +11642,7 @@ For a further discussion of the use of this attribute and examples of its use,
see the description of pragma Postcondition.
@node Attribute Round,Attribute Safe_Emax,Attribute Result,Implementation Defined Attributes
-@anchor{gnat_rm/implementation_defined_attributes attribute-round}@anchor{1b1}
+@anchor{gnat_rm/implementation_defined_attributes attribute-round}@anchor{1b2}
@section Attribute Round
@@ -11641,7 +11653,7 @@ also permits the use of the @code{'Round} attribute for ordinary
fixed point types.
@node Attribute Safe_Emax,Attribute Safe_Large,Attribute Round,Implementation Defined Attributes
-@anchor{gnat_rm/implementation_defined_attributes attribute-safe-emax}@anchor{1b2}
+@anchor{gnat_rm/implementation_defined_attributes attribute-safe-emax}@anchor{1b3}
@section Attribute Safe_Emax
@@ -11654,7 +11666,7 @@ the Ada 83 reference manual for an exact description of the semantics of
this attribute.
@node Attribute Safe_Large,Attribute Safe_Small,Attribute Safe_Emax,Implementation Defined Attributes
-@anchor{gnat_rm/implementation_defined_attributes attribute-safe-large}@anchor{1b3}
+@anchor{gnat_rm/implementation_defined_attributes attribute-safe-large}@anchor{1b4}
@section Attribute Safe_Large
@@ -11667,7 +11679,7 @@ the Ada 83 reference manual for an exact description of the semantics of
this attribute.
@node Attribute Safe_Small,Attribute Scalar_Storage_Order,Attribute Safe_Large,Implementation Defined Attributes
-@anchor{gnat_rm/implementation_defined_attributes attribute-safe-small}@anchor{1b4}
+@anchor{gnat_rm/implementation_defined_attributes attribute-safe-small}@anchor{1b5}
@section Attribute Safe_Small
@@ -11680,7 +11692,7 @@ the Ada 83 reference manual for an exact description of the semantics of
this attribute.
@node Attribute Scalar_Storage_Order,Attribute Simple_Storage_Pool,Attribute Safe_Small,Implementation Defined Attributes
-@anchor{gnat_rm/implementation_defined_attributes attribute-scalar-storage-order}@anchor{165}@anchor{gnat_rm/implementation_defined_attributes id4}@anchor{1b5}
+@anchor{gnat_rm/implementation_defined_attributes attribute-scalar-storage-order}@anchor{166}@anchor{gnat_rm/implementation_defined_attributes id4}@anchor{1b6}
@section Attribute Scalar_Storage_Order
@@ -11843,7 +11855,7 @@ Note that debuggers may be unable to display the correct value of scalar
components of a type for which the opposite storage order is specified.
@node Attribute Simple_Storage_Pool,Attribute Small,Attribute Scalar_Storage_Order,Implementation Defined Attributes
-@anchor{gnat_rm/implementation_defined_attributes attribute-simple-storage-pool}@anchor{f2}@anchor{gnat_rm/implementation_defined_attributes id5}@anchor{1b6}
+@anchor{gnat_rm/implementation_defined_attributes attribute-simple-storage-pool}@anchor{f2}@anchor{gnat_rm/implementation_defined_attributes id5}@anchor{1b7}
@section Attribute Simple_Storage_Pool
@@ -11906,7 +11918,7 @@ as defined in section 13.11.2 of the Ada Reference Manual, except that the
term `simple storage pool' is substituted for `storage pool'.
@node Attribute Small,Attribute Small_Denominator,Attribute Simple_Storage_Pool,Implementation Defined Attributes
-@anchor{gnat_rm/implementation_defined_attributes attribute-small}@anchor{1b7}
+@anchor{gnat_rm/implementation_defined_attributes attribute-small}@anchor{1b8}
@section Attribute Small
@@ -11922,7 +11934,7 @@ the Ada 83 reference manual for an exact description of the semantics of
this attribute when applied to floating-point types.
@node Attribute Small_Denominator,Attribute Small_Numerator,Attribute Small,Implementation Defined Attributes
-@anchor{gnat_rm/implementation_defined_attributes attribute-small-denominator}@anchor{1b8}
+@anchor{gnat_rm/implementation_defined_attributes attribute-small-denominator}@anchor{1b9}
@section Attribute Small_Denominator
@@ -11935,7 +11947,7 @@ 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{1b9}
+@anchor{gnat_rm/implementation_defined_attributes attribute-small-numerator}@anchor{1ba}
@section Attribute Small_Numerator
@@ -11948,7 +11960,7 @@ 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{1ba}
+@anchor{gnat_rm/implementation_defined_attributes attribute-storage-unit}@anchor{1bb}
@section Attribute Storage_Unit
@@ -11958,7 +11970,7 @@ with coprime factors (i.e. as an irreducible fraction).
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{1bb}
+@anchor{gnat_rm/implementation_defined_attributes attribute-stub-type}@anchor{1bc}
@section Attribute Stub_Type
@@ -11982,7 +11994,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{1bc}
+@anchor{gnat_rm/implementation_defined_attributes attribute-system-allocator-alignment}@anchor{1bd}
@section Attribute System_Allocator_Alignment
@@ -11999,7 +12011,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{1bd}
+@anchor{gnat_rm/implementation_defined_attributes attribute-target-name}@anchor{1be}
@section Attribute Target_Name
@@ -12012,7 +12024,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{1be}
+@anchor{gnat_rm/implementation_defined_attributes attribute-to-address}@anchor{1bf}
@section Attribute To_Address
@@ -12035,7 +12047,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{1bf}
+@anchor{gnat_rm/implementation_defined_attributes attribute-to-any}@anchor{1c0}
@section Attribute To_Any
@@ -12045,7 +12057,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{1c0}
+@anchor{gnat_rm/implementation_defined_attributes attribute-type-class}@anchor{1c1}
@section Attribute Type_Class
@@ -12075,7 +12087,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{1c1}
+@anchor{gnat_rm/implementation_defined_attributes attribute-type-key}@anchor{1c2}
@section Attribute Type_Key
@@ -12087,7 +12099,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{1c2}
+@anchor{gnat_rm/implementation_defined_attributes attribute-typecode}@anchor{1c3}
@section Attribute TypeCode
@@ -12097,7 +12109,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{1c3}
+@anchor{gnat_rm/implementation_defined_attributes attribute-unconstrained-array}@anchor{1c4}
@section Attribute Unconstrained_Array
@@ -12111,7 +12123,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{1c4}
+@anchor{gnat_rm/implementation_defined_attributes attribute-universal-literal-string}@anchor{1c5}
@section Attribute Universal_Literal_String
@@ -12139,7 +12151,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{1c5}
+@anchor{gnat_rm/implementation_defined_attributes attribute-unrestricted-access}@anchor{1c6}
@section Attribute Unrestricted_Access
@@ -12326,7 +12338,7 @@ In general this is a risky approach. It may appear to “work” but such uses o
of GNAT to another, so are best avoided if possible.
@node Attribute Update,Attribute Valid_Value,Attribute Unrestricted_Access,Implementation Defined Attributes
-@anchor{gnat_rm/implementation_defined_attributes attribute-update}@anchor{1c6}
+@anchor{gnat_rm/implementation_defined_attributes attribute-update}@anchor{1c7}
@section Attribute Update
@@ -12407,7 +12419,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_Value,Attribute Valid_Scalars,Attribute Update,Implementation Defined Attributes
-@anchor{gnat_rm/implementation_defined_attributes attribute-valid-value}@anchor{1c7}
+@anchor{gnat_rm/implementation_defined_attributes attribute-valid-value}@anchor{1c8}
@section Attribute Valid_Value
@@ -12419,7 +12431,7 @@ a function that takes a String, and returns Boolean. @code{T'Valid_Value (S)}
returns True if and only if @code{T'Value (S)} would not raise Constraint_Error.
@node Attribute Valid_Scalars,Attribute VADS_Size,Attribute Valid_Value,Implementation Defined Attributes
-@anchor{gnat_rm/implementation_defined_attributes attribute-valid-scalars}@anchor{1c8}
+@anchor{gnat_rm/implementation_defined_attributes attribute-valid-scalars}@anchor{1c9}
@section Attribute Valid_Scalars
@@ -12453,7 +12465,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{1c9}
+@anchor{gnat_rm/implementation_defined_attributes attribute-vads-size}@anchor{1ca}
@section Attribute VADS_Size
@@ -12473,7 +12485,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 attribute-value-size}@anchor{177}@anchor{gnat_rm/implementation_defined_attributes id6}@anchor{1ca}
+@anchor{gnat_rm/implementation_defined_attributes attribute-value-size}@anchor{178}@anchor{gnat_rm/implementation_defined_attributes id6}@anchor{1cb}
@section Attribute Value_Size
@@ -12487,7 +12499,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{1cb}
+@anchor{gnat_rm/implementation_defined_attributes attribute-wchar-t-size}@anchor{1cc}
@section Attribute Wchar_T_Size
@@ -12499,7 +12511,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{1cc}
+@anchor{gnat_rm/implementation_defined_attributes attribute-word-size}@anchor{1cd}
@section Attribute Word_Size
@@ -12510,7 +12522,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 doc}@anchor{1cd}@anchor{gnat_rm/standard_and_implementation_defined_restrictions id1}@anchor{1ce}@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{1ce}@anchor{gnat_rm/standard_and_implementation_defined_restrictions id1}@anchor{1cf}@anchor{gnat_rm/standard_and_implementation_defined_restrictions standard-and-implementation-defined-restrictions}@anchor{9}
@chapter Standard and Implementation Defined Restrictions
@@ -12539,7 +12551,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 id2}@anchor{1cf}@anchor{gnat_rm/standard_and_implementation_defined_restrictions partition-wide-restrictions}@anchor{1d0}
+@anchor{gnat_rm/standard_and_implementation_defined_restrictions id2}@anchor{1d0}@anchor{gnat_rm/standard_and_implementation_defined_restrictions partition-wide-restrictions}@anchor{1d1}
@section Partition-Wide Restrictions
@@ -12632,7 +12644,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{1d1}
+@anchor{gnat_rm/standard_and_implementation_defined_restrictions immediate-reclamation}@anchor{1d2}
@subsection Immediate_Reclamation
@@ -12644,7 +12656,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{1d2}
+@anchor{gnat_rm/standard_and_implementation_defined_restrictions max-asynchronous-select-nesting}@anchor{1d3}
@subsection Max_Asynchronous_Select_Nesting
@@ -12656,7 +12668,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{1d3}
+@anchor{gnat_rm/standard_and_implementation_defined_restrictions max-entry-queue-length}@anchor{1d4}
@subsection Max_Entry_Queue_Length
@@ -12677,7 +12689,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{1d4}
+@anchor{gnat_rm/standard_and_implementation_defined_restrictions max-protected-entries}@anchor{1d5}
@subsection Max_Protected_Entries
@@ -12688,7 +12700,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{1d5}
+@anchor{gnat_rm/standard_and_implementation_defined_restrictions max-select-alternatives}@anchor{1d6}
@subsection Max_Select_Alternatives
@@ -12697,7 +12709,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{1d6}
+@anchor{gnat_rm/standard_and_implementation_defined_restrictions max-storage-at-blocking}@anchor{1d7}
@subsection Max_Storage_At_Blocking
@@ -12708,7 +12720,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{1d7}
+@anchor{gnat_rm/standard_and_implementation_defined_restrictions max-task-entries}@anchor{1d8}
@subsection Max_Task_Entries
@@ -12721,7 +12733,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{1d8}
+@anchor{gnat_rm/standard_and_implementation_defined_restrictions max-tasks}@anchor{1d9}
@subsection Max_Tasks
@@ -12734,7 +12746,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{1d9}
+@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-abort-statements}@anchor{1da}
@subsection No_Abort_Statements
@@ -12744,7 +12756,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{1da}
+@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-access-parameter-allocators}@anchor{1db}
@subsection No_Access_Parameter_Allocators
@@ -12755,7 +12767,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{1db}
+@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-access-subprograms}@anchor{1dc}
@subsection No_Access_Subprograms
@@ -12765,7 +12777,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{1dc}
+@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-allocators}@anchor{1dd}
@subsection No_Allocators
@@ -12775,7 +12787,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{1dd}
+@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-anonymous-allocators}@anchor{1de}
@subsection No_Anonymous_Allocators
@@ -12785,7 +12797,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{1de}
+@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-asynchronous-control}@anchor{1df}
@subsection No_Asynchronous_Control
@@ -12795,7 +12807,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{1df}
+@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-calendar}@anchor{1e0}
@subsection No_Calendar
@@ -12805,7 +12817,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{1e0}
+@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-coextensions}@anchor{1e1}
@subsection No_Coextensions
@@ -12815,7 +12827,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{1e1}
+@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-default-initialization}@anchor{1e2}
@subsection No_Default_Initialization
@@ -12832,7 +12844,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{1e2}
+@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-delay}@anchor{1e3}
@subsection No_Delay
@@ -12842,7 +12854,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{1e3}
+@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-dependence}@anchor{1e4}
@subsection No_Dependence
@@ -12885,7 +12897,7 @@ to support specific constructs of the language. Here are some examples:
@end itemize
@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{1e4}
+@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-direct-boolean-operators}@anchor{1e5}
@subsection No_Direct_Boolean_Operators
@@ -12898,7 +12910,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{1e5}
+@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-dispatch}@anchor{1e6}
@subsection No_Dispatch
@@ -12908,7 +12920,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{1e6}
+@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-dispatching-calls}@anchor{1e7}
@subsection No_Dispatching_Calls
@@ -12969,7 +12981,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{1e7}
+@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-dynamic-attachment}@anchor{1e8}
@subsection No_Dynamic_Attachment
@@ -12988,7 +13000,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{1e8}
+@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-dynamic-priorities}@anchor{1e9}
@subsection No_Dynamic_Priorities
@@ -12997,7 +13009,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{1e9}
+@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-entry-calls-in-elaboration-code}@anchor{1ea}
@subsection No_Entry_Calls_In_Elaboration_Code
@@ -13009,7 +13021,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{1ea}
+@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-enumeration-maps}@anchor{1eb}
@subsection No_Enumeration_Maps
@@ -13020,7 +13032,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{1eb}
+@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-exception-handlers}@anchor{1ec}
@subsection No_Exception_Handlers
@@ -13045,7 +13057,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{1ec}
+@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-exception-propagation}@anchor{1ed}
@subsection No_Exception_Propagation
@@ -13062,7 +13074,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{1ed}
+@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-exception-registration}@anchor{1ee}
@subsection No_Exception_Registration
@@ -13076,7 +13088,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{1ee}
+@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-exceptions}@anchor{1ef}
@subsection No_Exceptions
@@ -13087,7 +13099,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{1ef}
+@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-finalization}@anchor{1f0}
@subsection No_Finalization
@@ -13128,7 +13140,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{1f0}
+@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-fixed-point}@anchor{1f1}
@subsection No_Fixed_Point
@@ -13138,7 +13150,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{1f1}
+@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-floating-point}@anchor{1f2}
@subsection No_Floating_Point
@@ -13148,7 +13160,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{1f2}
+@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-implicit-conditionals}@anchor{1f3}
@subsection No_Implicit_Conditionals
@@ -13164,7 +13176,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{1f3}
+@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-implicit-dynamic-code}@anchor{1f4}
@subsection No_Implicit_Dynamic_Code
@@ -13194,7 +13206,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{1f4}
+@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-implicit-heap-allocations}@anchor{1f5}
@subsection No_Implicit_Heap_Allocations
@@ -13203,7 +13215,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{1f5}
+@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-implicit-protected-object-allocations}@anchor{1f6}
@subsection No_Implicit_Protected_Object_Allocations
@@ -13213,7 +13225,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{1f6}
+@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-implicit-task-allocations}@anchor{1f7}
@subsection No_Implicit_Task_Allocations
@@ -13222,7 +13234,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{1f7}
+@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-initialize-scalars}@anchor{1f8}
@subsection No_Initialize_Scalars
@@ -13234,7 +13246,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{1f8}
+@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-io}@anchor{1f9}
@subsection No_IO
@@ -13245,7 +13257,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{1f9}
+@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-local-allocators}@anchor{1fa}
@subsection No_Local_Allocators
@@ -13256,7 +13268,7 @@ occurrences of an allocator in subprograms, generic subprograms, tasks,
and entry bodies.
@node No_Local_Protected_Objects,No_Local_Tagged_Types,No_Local_Allocators,Partition-Wide Restrictions
-@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-local-protected-objects}@anchor{1fa}
+@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-local-protected-objects}@anchor{1fb}
@subsection No_Local_Protected_Objects
@@ -13266,7 +13278,7 @@ and entry bodies.
only declared at the library level.
@node No_Local_Tagged_Types,No_Local_Timing_Events,No_Local_Protected_Objects,Partition-Wide Restrictions
-@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-local-tagged-types}@anchor{1fb}
+@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-local-tagged-types}@anchor{1fc}
@subsection No_Local_Tagged_Types
@@ -13276,7 +13288,7 @@ only declared at the library level.
declared at the library level.
@node No_Local_Timing_Events,No_Long_Long_Integers,No_Local_Tagged_Types,Partition-Wide Restrictions
-@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-local-timing-events}@anchor{1fc}
+@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-local-timing-events}@anchor{1fd}
@subsection No_Local_Timing_Events
@@ -13286,7 +13298,7 @@ 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{1fd}
+@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-long-long-integers}@anchor{1fe}
@subsection No_Long_Long_Integers
@@ -13298,7 +13310,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{1fe}
+@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-multiple-elaboration}@anchor{1ff}
@subsection No_Multiple_Elaboration
@@ -13314,7 +13326,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{1ff}
+@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-nested-finalization}@anchor{200}
@subsection No_Nested_Finalization
@@ -13323,7 +13335,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{200}
+@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-protected-type-allocators}@anchor{201}
@subsection No_Protected_Type_Allocators
@@ -13333,7 +13345,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{201}
+@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-protected-types}@anchor{202}
@subsection No_Protected_Types
@@ -13343,7 +13355,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{202}
+@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-recursion}@anchor{203}
@subsection No_Recursion
@@ -13353,7 +13365,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{203}
+@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-reentrancy}@anchor{204}
@subsection No_Reentrancy
@@ -13363,7 +13375,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{204}
+@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-relative-delay}@anchor{205}
@subsection No_Relative_Delay
@@ -13374,7 +13386,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{205}
+@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-requeue-statements}@anchor{206}
@subsection No_Requeue_Statements
@@ -13392,7 +13404,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{206}
+@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-secondary-stack}@anchor{207}
@subsection No_Secondary_Stack
@@ -13405,7 +13417,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{207}
+@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-select-statements}@anchor{208}
@subsection No_Select_Statements
@@ -13415,7 +13427,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{208}
+@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-specific-termination-handlers}@anchor{209}
@subsection No_Specific_Termination_Handlers
@@ -13425,7 +13437,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{209}
+@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-specification-of-aspect}@anchor{20a}
@subsection No_Specification_of_Aspect
@@ -13436,7 +13448,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{20a}
+@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-standard-allocators-after-elaboration}@anchor{20b}
@subsection No_Standard_Allocators_After_Elaboration
@@ -13448,7 +13460,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{20b}
+@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-standard-storage-pools}@anchor{20c}
@subsection No_Standard_Storage_Pools
@@ -13460,7 +13472,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{20c}
+@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-stream-optimizations}@anchor{20d}
@subsection No_Stream_Optimizations
@@ -13473,7 +13485,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_Tagged_Type_Registration,No_Stream_Optimizations,Partition-Wide Restrictions
-@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-streams}@anchor{20d}
+@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-streams}@anchor{20e}
@subsection No_Streams
@@ -13500,7 +13512,7 @@ configuration pragmas to avoid exposing entity names at binary level for the
entire partition.
@node No_Tagged_Type_Registration,No_Task_Allocators,No_Streams,Partition-Wide Restrictions
-@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-tagged-type-registration}@anchor{20e}
+@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-tagged-type-registration}@anchor{20f}
@subsection No_Tagged_Type_Registration
@@ -13515,7 +13527,7 @@ are declared. This restriction may be necessary in order to also apply
the No_Elaboration_Code restriction.
@node No_Task_Allocators,No_Task_At_Interrupt_Priority,No_Tagged_Type_Registration,Partition-Wide Restrictions
-@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-task-allocators}@anchor{20f}
+@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-task-allocators}@anchor{210}
@subsection No_Task_Allocators
@@ -13525,7 +13537,7 @@ the No_Elaboration_Code restriction.
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{210}
+@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-task-at-interrupt-priority}@anchor{211}
@subsection No_Task_At_Interrupt_Priority
@@ -13537,7 +13549,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{211}
+@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-task-attributes-package}@anchor{212}
@subsection No_Task_Attributes_Package
@@ -13554,7 +13566,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{212}
+@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-task-hierarchy}@anchor{213}
@subsection No_Task_Hierarchy
@@ -13564,7 +13576,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{213}
+@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-task-termination}@anchor{214}
@subsection No_Task_Termination
@@ -13573,7 +13585,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{214}
+@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-tasking}@anchor{215}
@subsection No_Tasking
@@ -13586,7 +13598,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{215}
+@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-terminate-alternatives}@anchor{216}
@subsection No_Terminate_Alternatives
@@ -13595,7 +13607,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{216}
+@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-unchecked-access}@anchor{217}
@subsection No_Unchecked_Access
@@ -13605,7 +13617,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{217}
+@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-unchecked-conversion}@anchor{218}
@subsection No_Unchecked_Conversion
@@ -13615,7 +13627,7 @@ occurrences of the Unchecked_Access attribute.
dependences on the predefined generic function Unchecked_Conversion.
@node No_Unchecked_Deallocation,No_Use_Of_Attribute,No_Unchecked_Conversion,Partition-Wide Restrictions
-@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-unchecked-deallocation}@anchor{218}
+@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-unchecked-deallocation}@anchor{219}
@subsection No_Unchecked_Deallocation
@@ -13625,7 +13637,7 @@ dependences on the predefined generic function Unchecked_Conversion.
dependences on the predefined generic procedure Unchecked_Deallocation.
@node No_Use_Of_Attribute,No_Use_Of_Entity,No_Unchecked_Deallocation,Partition-Wide Restrictions
-@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-use-of-attribute}@anchor{219}
+@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-use-of-attribute}@anchor{21a}
@subsection No_Use_Of_Attribute
@@ -13635,7 +13647,7 @@ dependences on the predefined generic procedure Unchecked_Deallocation.
earlier versions of Ada.
@node No_Use_Of_Entity,No_Use_Of_Pragma,No_Use_Of_Attribute,Partition-Wide Restrictions
-@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-use-of-entity}@anchor{21a}
+@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-use-of-entity}@anchor{21b}
@subsection No_Use_Of_Entity
@@ -13655,7 +13667,7 @@ No_Use_Of_Entity => Ada.Text_IO.Put_Line
@end example
@node No_Use_Of_Pragma,Pure_Barriers,No_Use_Of_Entity,Partition-Wide Restrictions
-@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-use-of-pragma}@anchor{21b}
+@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-use-of-pragma}@anchor{21c}
@subsection No_Use_Of_Pragma
@@ -13665,7 +13677,7 @@ No_Use_Of_Entity => Ada.Text_IO.Put_Line
earlier versions of Ada.
@node Pure_Barriers,Simple_Barriers,No_Use_Of_Pragma,Partition-Wide Restrictions
-@anchor{gnat_rm/standard_and_implementation_defined_restrictions pure-barriers}@anchor{21c}
+@anchor{gnat_rm/standard_and_implementation_defined_restrictions pure-barriers}@anchor{21d}
@subsection Pure_Barriers
@@ -13716,7 +13728,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{21d}
+@anchor{gnat_rm/standard_and_implementation_defined_restrictions simple-barriers}@anchor{21e}
@subsection Simple_Barriers
@@ -13735,7 +13747,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{21e}
+@anchor{gnat_rm/standard_and_implementation_defined_restrictions static-priorities}@anchor{21f}
@subsection Static_Priorities
@@ -13746,7 +13758,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{21f}
+@anchor{gnat_rm/standard_and_implementation_defined_restrictions static-storage-size}@anchor{220}
@subsection Static_Storage_Size
@@ -13756,7 +13768,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 id3}@anchor{220}@anchor{gnat_rm/standard_and_implementation_defined_restrictions program-unit-level-restrictions}@anchor{221}
+@anchor{gnat_rm/standard_and_implementation_defined_restrictions id3}@anchor{221}@anchor{gnat_rm/standard_and_implementation_defined_restrictions program-unit-level-restrictions}@anchor{222}
@section Program Unit Level Restrictions
@@ -13787,7 +13799,7 @@ other compilation units in the partition.
@end menu
@node No_Elaboration_Code,No_Dynamic_Accessibility_Checks,,Program Unit Level Restrictions
-@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-elaboration-code}@anchor{222}
+@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-elaboration-code}@anchor{223}
@subsection No_Elaboration_Code
@@ -13843,7 +13855,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_Accessibility_Checks,No_Dynamic_Sized_Objects,No_Elaboration_Code,Program Unit Level Restrictions
-@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-dynamic-accessibility-checks}@anchor{223}
+@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-dynamic-accessibility-checks}@anchor{224}
@subsection No_Dynamic_Accessibility_Checks
@@ -13892,7 +13904,7 @@ In all other cases, the level of T is as defined by the existing rules of Ada.
@end itemize
@node No_Dynamic_Sized_Objects,No_Entry_Queue,No_Dynamic_Accessibility_Checks,Program Unit Level Restrictions
-@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-dynamic-sized-objects}@anchor{224}
+@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-dynamic-sized-objects}@anchor{225}
@subsection No_Dynamic_Sized_Objects
@@ -13910,7 +13922,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{225}
+@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-entry-queue}@anchor{226}
@subsection No_Entry_Queue
@@ -13923,7 +13935,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{226}
+@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-implementation-aspect-specifications}@anchor{227}
@subsection No_Implementation_Aspect_Specifications
@@ -13934,7 +13946,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{227}
+@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-implementation-attributes}@anchor{228}
@subsection No_Implementation_Attributes
@@ -13946,7 +13958,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{228}
+@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-implementation-identifiers}@anchor{229}
@subsection No_Implementation_Identifiers
@@ -13957,7 +13969,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{229}
+@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-implementation-pragmas}@anchor{22a}
@subsection No_Implementation_Pragmas
@@ -13968,7 +13980,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{22a}
+@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-implementation-restrictions}@anchor{22b}
@subsection No_Implementation_Restrictions
@@ -13980,7 +13992,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{22b}
+@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-implementation-units}@anchor{22c}
@subsection No_Implementation_Units
@@ -13991,7 +14003,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{22c}
+@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-implicit-aliasing}@anchor{22d}
@subsection No_Implicit_Aliasing
@@ -14006,7 +14018,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{22d}
+@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-implicit-loops}@anchor{22e}
@subsection No_Implicit_Loops
@@ -14023,7 +14035,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{22e}
+@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-obsolescent-features}@anchor{22f}
@subsection No_Obsolescent_Features
@@ -14033,7 +14045,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{22f}
+@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-wide-characters}@anchor{230}
@subsection No_Wide_Characters
@@ -14047,7 +14059,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{230}
+@anchor{gnat_rm/standard_and_implementation_defined_restrictions static-dispatch-tables}@anchor{231}
@subsection Static_Dispatch_Tables
@@ -14057,7 +14069,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{231}
+@anchor{gnat_rm/standard_and_implementation_defined_restrictions spark-05}@anchor{232}
@subsection SPARK_05
@@ -14080,7 +14092,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{232}@anchor{gnat_rm/implementation_advice id1}@anchor{233}@anchor{gnat_rm/implementation_advice implementation-advice}@anchor{a}
+@anchor{gnat_rm/implementation_advice doc}@anchor{233}@anchor{gnat_rm/implementation_advice id1}@anchor{234}@anchor{gnat_rm/implementation_advice implementation-advice}@anchor{a}
@chapter Implementation Advice
@@ -14178,7 +14190,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{234}
+@anchor{gnat_rm/implementation_advice rm-1-1-3-20-error-detection}@anchor{235}
@section RM 1.1.3(20): Error Detection
@@ -14195,7 +14207,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{235}
+@anchor{gnat_rm/implementation_advice rm-1-1-3-31-child-units}@anchor{236}
@section RM 1.1.3(31): Child Units
@@ -14211,7 +14223,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{236}
+@anchor{gnat_rm/implementation_advice rm-1-1-5-12-bounded-errors}@anchor{237}
@section RM 1.1.5(12): Bounded Errors
@@ -14228,7 +14240,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{237}@anchor{gnat_rm/implementation_advice rm-2-8-16-pragmas}@anchor{238}
+@anchor{gnat_rm/implementation_advice id2}@anchor{238}@anchor{gnat_rm/implementation_advice rm-2-8-16-pragmas}@anchor{239}
@section RM 2.8(16): Pragmas
@@ -14341,7 +14353,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{239}
+@anchor{gnat_rm/implementation_advice rm-2-8-17-19-pragmas}@anchor{23a}
@section RM 2.8(17-19): Pragmas
@@ -14362,14 +14374,14 @@ replacing @code{library_items}.”
@end itemize
@end quotation
-See @ref{238,,RM 2.8(16); Pragmas}.
+See @ref{239,,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{23a}
+@anchor{gnat_rm/implementation_advice rm-3-5-2-5-alternative-character-sets}@anchor{23b}
@section RM 3.5.2(5): Alternative Character Sets
@@ -14397,7 +14409,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{23b}
+@anchor{gnat_rm/implementation_advice rm-3-5-4-28-integer-types}@anchor{23c}
@section RM 3.5.4(28): Integer Types
@@ -14416,7 +14428,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{23c}
+@anchor{gnat_rm/implementation_advice rm-3-5-4-29-integer-types}@anchor{23d}
@section RM 3.5.4(29): Integer Types
@@ -14432,7 +14444,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{23d}
+@anchor{gnat_rm/implementation_advice rm-3-5-5-8-enumeration-values}@anchor{23e}
@section RM 3.5.5(8): Enumeration Values
@@ -14452,7 +14464,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{23e}
+@anchor{gnat_rm/implementation_advice rm-3-5-7-17-float-types}@anchor{23f}
@section RM 3.5.7(17): Float Types
@@ -14482,7 +14494,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{23f}
+@anchor{gnat_rm/implementation_advice rm-3-6-2-11-multidimensional-arrays}@anchor{240}
@section RM 3.6.2(11): Multidimensional Arrays
@@ -14500,7 +14512,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{240}
+@anchor{gnat_rm/implementation_advice rm-9-6-30-31-duration-small}@anchor{241}
@section RM 9.6(30-31): Duration’Small
@@ -14521,7 +14533,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{241}
+@anchor{gnat_rm/implementation_advice rm-10-2-1-12-consistent-representation}@anchor{242}
@section RM 10.2.1(12): Consistent Representation
@@ -14543,7 +14555,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{242}
+@anchor{gnat_rm/implementation_advice rm-11-4-1-19-exception-information}@anchor{243}
@section RM 11.4.1(19): Exception Information
@@ -14574,7 +14586,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{243}
+@anchor{gnat_rm/implementation_advice rm-11-5-28-suppression-of-checks}@anchor{244}
@section RM 11.5(28): Suppression of Checks
@@ -14589,7 +14601,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{244}
+@anchor{gnat_rm/implementation_advice rm-13-1-21-24-representation-clauses}@anchor{245}
@section RM 13.1 (21-24): Representation Clauses
@@ -14641,7 +14653,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{245}
+@anchor{gnat_rm/implementation_advice rm-13-2-6-8-packed-types}@anchor{246}
@section RM 13.2(6-8): Packed Types
@@ -14672,7 +14684,7 @@ subcomponent of the packed type.
@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{246}
+@anchor{gnat_rm/implementation_advice rm-13-3-14-19-address-clauses}@anchor{247}
@section RM 13.3(14-19): Address Clauses
@@ -14725,7 +14737,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{247}
+@anchor{gnat_rm/implementation_advice rm-13-3-29-35-alignment-clauses}@anchor{248}
@section RM 13.3(29-35): Alignment Clauses
@@ -14782,7 +14794,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{248}
+@anchor{gnat_rm/implementation_advice rm-13-3-42-43-size-clauses}@anchor{249}
@section RM 13.3(42-43): Size Clauses
@@ -14800,7 +14812,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{249}
+@anchor{gnat_rm/implementation_advice rm-13-3-50-56-size-clauses}@anchor{24a}
@section RM 13.3(50-56): Size Clauses
@@ -14851,7 +14863,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{24a}
+@anchor{gnat_rm/implementation_advice rm-13-3-71-73-component-size-clauses}@anchor{24b}
@section RM 13.3(71-73): Component Size Clauses
@@ -14885,7 +14897,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{24b}
+@anchor{gnat_rm/implementation_advice rm-13-4-9-10-enumeration-representation-clauses}@anchor{24c}
@section RM 13.4(9-10): Enumeration Representation Clauses
@@ -14907,7 +14919,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{24c}
+@anchor{gnat_rm/implementation_advice rm-13-5-1-17-22-record-representation-clauses}@anchor{24d}
@section RM 13.5.1(17-22): Record Representation Clauses
@@ -14967,7 +14979,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{24d}
+@anchor{gnat_rm/implementation_advice rm-13-5-2-5-storage-place-attributes}@anchor{24e}
@section RM 13.5.2(5): Storage Place Attributes
@@ -14987,7 +14999,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{24e}
+@anchor{gnat_rm/implementation_advice rm-13-5-3-7-8-bit-ordering}@anchor{24f}
@section RM 13.5.3(7-8): Bit Ordering
@@ -15005,7 +15017,7 @@ Followed.
@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{24f}
+@anchor{gnat_rm/implementation_advice rm-13-7-37-address-as-private}@anchor{250}
@section RM 13.7(37): Address as Private
@@ -15023,7 +15035,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{250}
+@anchor{gnat_rm/implementation_advice rm-13-7-1-16-address-operations}@anchor{251}
@section RM 13.7.1(16): Address Operations
@@ -15041,7 +15053,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{251}
+@anchor{gnat_rm/implementation_advice rm-13-9-14-17-unchecked-conversion}@anchor{252}
@section RM 13.9(14-17): Unchecked Conversion
@@ -15085,7 +15097,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{252}
+@anchor{gnat_rm/implementation_advice rm-13-11-23-25-implicit-heap-usage}@anchor{253}
@section RM 13.11(23-25): Implicit Heap Usage
@@ -15136,7 +15148,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{253}
+@anchor{gnat_rm/implementation_advice rm-13-11-2-17-unchecked-deallocation}@anchor{254}
@section RM 13.11.2(17): Unchecked Deallocation
@@ -15151,7 +15163,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{254}
+@anchor{gnat_rm/implementation_advice rm-13-13-2-1-6-stream-oriented-attributes}@anchor{255}
@section RM 13.13.2(1.6): Stream Oriented Attributes
@@ -15182,7 +15194,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{255}
+@anchor{gnat_rm/implementation_advice rm-a-1-52-names-of-predefined-numeric-types}@anchor{256}
@section RM A.1(52): Names of Predefined Numeric Types
@@ -15200,7 +15212,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{256}
+@anchor{gnat_rm/implementation_advice rm-a-3-2-49-ada-characters-handling}@anchor{257}
@section RM A.3.2(49): @code{Ada.Characters.Handling}
@@ -15217,7 +15229,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{257}
+@anchor{gnat_rm/implementation_advice rm-a-4-4-106-bounded-length-string-handling}@anchor{258}
@section RM A.4.4(106): Bounded-Length String Handling
@@ -15232,7 +15244,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{258}
+@anchor{gnat_rm/implementation_advice rm-a-5-2-46-47-random-number-generation}@anchor{259}
@section RM A.5.2(46-47): Random Number Generation
@@ -15261,7 +15273,7 @@ condition here to hold true.
@geindex Get_Immediate
@node RM A 10 7 23 Get_Immediate,RM A 18 Containers,RM A 5 2 46-47 Random Number Generation,Implementation Advice
-@anchor{gnat_rm/implementation_advice rm-a-10-7-23-get-immediate}@anchor{259}
+@anchor{gnat_rm/implementation_advice rm-a-10-7-23-get-immediate}@anchor{25a}
@section RM A.10.7(23): @code{Get_Immediate}
@@ -15285,7 +15297,7 @@ this functionality.
@geindex Containers
@node RM A 18 Containers,RM B 1 39-41 Pragma Export,RM A 10 7 23 Get_Immediate,Implementation Advice
-@anchor{gnat_rm/implementation_advice rm-a-18-containers}@anchor{25a}
+@anchor{gnat_rm/implementation_advice rm-a-18-containers}@anchor{25b}
@section RM A.18: @code{Containers}
@@ -15306,7 +15318,7 @@ follow the implementation advice.
@geindex Export
@node RM B 1 39-41 Pragma Export,RM B 2 12-13 Package Interfaces,RM A 18 Containers,Implementation Advice
-@anchor{gnat_rm/implementation_advice rm-b-1-39-41-pragma-export}@anchor{25b}
+@anchor{gnat_rm/implementation_advice rm-b-1-39-41-pragma-export}@anchor{25c}
@section RM B.1(39-41): Pragma @code{Export}
@@ -15354,7 +15366,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{25c}
+@anchor{gnat_rm/implementation_advice rm-b-2-12-13-package-interfaces}@anchor{25d}
@section RM B.2(12-13): Package @code{Interfaces}
@@ -15384,7 +15396,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{25d}
+@anchor{gnat_rm/implementation_advice rm-b-3-63-71-interfacing-with-c}@anchor{25e}
@section RM B.3(63-71): Interfacing with C
@@ -15472,7 +15484,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{25e}
+@anchor{gnat_rm/implementation_advice rm-b-4-95-98-interfacing-with-cobol}@anchor{25f}
@section RM B.4(95-98): Interfacing with COBOL
@@ -15513,7 +15525,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{25f}
+@anchor{gnat_rm/implementation_advice rm-b-5-22-26-interfacing-with-fortran}@anchor{260}
@section RM B.5(22-26): Interfacing with Fortran
@@ -15564,7 +15576,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{260}
+@anchor{gnat_rm/implementation_advice rm-c-1-3-5-access-to-machine-operations}@anchor{261}
@section RM C.1(3-5): Access to Machine Operations
@@ -15599,7 +15611,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{261}
+@anchor{gnat_rm/implementation_advice rm-c-1-10-16-access-to-machine-operations}@anchor{262}
@section RM C.1(10-16): Access to Machine Operations
@@ -15660,7 +15672,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{262}
+@anchor{gnat_rm/implementation_advice rm-c-3-28-interrupt-support}@anchor{263}
@section RM C.3(28): Interrupt Support
@@ -15678,7 +15690,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{263}
+@anchor{gnat_rm/implementation_advice rm-c-3-1-20-21-protected-procedure-handlers}@anchor{264}
@section RM C.3.1(20-21): Protected Procedure Handlers
@@ -15704,7 +15716,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{264}
+@anchor{gnat_rm/implementation_advice rm-c-3-2-25-package-interrupts}@anchor{265}
@section RM C.3.2(25): Package @code{Interrupts}
@@ -15722,7 +15734,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{265}
+@anchor{gnat_rm/implementation_advice rm-c-4-14-pre-elaboration-requirements}@anchor{266}
@section RM C.4(14): Pre-elaboration Requirements
@@ -15738,7 +15750,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{266}
+@anchor{gnat_rm/implementation_advice rm-c-5-8-pragma-discard-names}@anchor{267}
@section RM C.5(8): Pragma @code{Discard_Names}
@@ -15756,7 +15768,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{267}
+@anchor{gnat_rm/implementation_advice rm-c-7-2-30-the-package-task-attributes}@anchor{268}
@section RM C.7.2(30): The Package Task_Attributes
@@ -15777,7 +15789,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{268}
+@anchor{gnat_rm/implementation_advice rm-d-3-17-locking-policies}@anchor{269}
@section RM D.3(17): Locking Policies
@@ -15794,7 +15806,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{269}
+@anchor{gnat_rm/implementation_advice rm-d-4-16-entry-queuing-policies}@anchor{26a}
@section RM D.4(16): Entry Queuing Policies
@@ -15809,7 +15821,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{26a}
+@anchor{gnat_rm/implementation_advice rm-d-6-9-10-preemptive-abort}@anchor{26b}
@section RM D.6(9-10): Preemptive Abort
@@ -15835,7 +15847,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{26b}
+@anchor{gnat_rm/implementation_advice rm-d-7-21-tasking-restrictions}@anchor{26c}
@section RM D.7(21): Tasking Restrictions
@@ -15854,7 +15866,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{26c}
+@anchor{gnat_rm/implementation_advice rm-d-8-47-49-monotonic-time}@anchor{26d}
@section RM D.8(47-49): Monotonic Time
@@ -15889,7 +15901,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{26d}
+@anchor{gnat_rm/implementation_advice rm-e-5-28-29-partition-communication-subsystem}@anchor{26e}
@section RM E.5(28-29): Partition Communication Subsystem
@@ -15913,7 +15925,7 @@ write the @code{Item} into the stream.”
@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{26e}
+@anchor{gnat_rm/implementation_advice rm-f-7-cobol-support}@anchor{26f}
@section RM F(7): COBOL Support
@@ -15933,7 +15945,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{26f}
+@anchor{gnat_rm/implementation_advice rm-f-1-2-decimal-radix-support}@anchor{270}
@section RM F.1(2): Decimal Radix Support
@@ -15949,7 +15961,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{270}
+@anchor{gnat_rm/implementation_advice rm-g-numerics}@anchor{271}
@section RM G: Numerics
@@ -15969,7 +15981,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{271}
+@anchor{gnat_rm/implementation_advice rm-g-1-1-56-58-complex-types}@anchor{272}
@section RM G.1.1(56-58): Complex Types
@@ -16031,7 +16043,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{272}
+@anchor{gnat_rm/implementation_advice rm-g-1-2-49-complex-elementary-functions}@anchor{273}
@section RM G.1.2(49): Complex Elementary Functions
@@ -16053,7 +16065,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{273}
+@anchor{gnat_rm/implementation_advice rm-g-2-4-19-accuracy-requirements}@anchor{274}
@section RM G.2.4(19): Accuracy Requirements
@@ -16077,7 +16089,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{274}
+@anchor{gnat_rm/implementation_advice rm-g-2-6-15-complex-arithmetic-accuracy}@anchor{275}
@section RM G.2.6(15): Complex Arithmetic Accuracy
@@ -16095,7 +16107,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{275}
+@anchor{gnat_rm/implementation_advice rm-h-6-15-2-pragma-partition-elaboration-policy}@anchor{276}
@section RM H.6(15/2): Pragma Partition_Elaboration_Policy
@@ -16110,7 +16122,7 @@ immediately terminated.”
Not followed.
@node Implementation Defined Characteristics,Intrinsic Subprograms,Implementation Advice,Top
-@anchor{gnat_rm/implementation_defined_characteristics doc}@anchor{276}@anchor{gnat_rm/implementation_defined_characteristics id1}@anchor{277}@anchor{gnat_rm/implementation_defined_characteristics implementation-defined-characteristics}@anchor{b}
+@anchor{gnat_rm/implementation_defined_characteristics doc}@anchor{277}@anchor{gnat_rm/implementation_defined_characteristics id1}@anchor{278}@anchor{gnat_rm/implementation_defined_characteristics implementation-defined-characteristics}@anchor{b}
@chapter Implementation Defined Characteristics
@@ -16882,7 +16894,7 @@ Implementation-defined assertion_aspect_marks include Assert_And_Cut,
Assume, Contract_Cases, Debug, Ghost, Initial_Condition, Loop_Invariant,
Loop_Variant, Postcondition, Precondition, Predicate, Refined_Post,
Statement_Assertions, and Subprogram_Variant. Implementation-defined
-policy_identifiers include Ignore and Suppressible.
+policy_identifiers include Disable and Suppressible.
@itemize *
@@ -17400,7 +17412,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{278,,GNAT.Regexp (g-regexp.ads)}.
+See @ref{279,,GNAT.Regexp (g-regexp.ads)}.
@itemize *
@@ -18498,7 +18510,7 @@ Information on those subjects is not yet available.
Execution is erroneous in that case.
@node Intrinsic Subprograms,Representation Clauses and Pragmas,Implementation Defined Characteristics,Top
-@anchor{gnat_rm/intrinsic_subprograms doc}@anchor{279}@anchor{gnat_rm/intrinsic_subprograms id1}@anchor{27a}@anchor{gnat_rm/intrinsic_subprograms intrinsic-subprograms}@anchor{c}
+@anchor{gnat_rm/intrinsic_subprograms doc}@anchor{27a}@anchor{gnat_rm/intrinsic_subprograms id1}@anchor{27b}@anchor{gnat_rm/intrinsic_subprograms intrinsic-subprograms}@anchor{c}
@chapter Intrinsic Subprograms
@@ -18536,7 +18548,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{27b}@anchor{gnat_rm/intrinsic_subprograms intrinsic-operators}@anchor{27c}
+@anchor{gnat_rm/intrinsic_subprograms id2}@anchor{27c}@anchor{gnat_rm/intrinsic_subprograms intrinsic-operators}@anchor{27d}
@section Intrinsic Operators
@@ -18567,7 +18579,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 compilation-iso-date}@anchor{27d}@anchor{gnat_rm/intrinsic_subprograms id3}@anchor{27e}
+@anchor{gnat_rm/intrinsic_subprograms compilation-iso-date}@anchor{27e}@anchor{gnat_rm/intrinsic_subprograms id3}@anchor{27f}
@section Compilation_ISO_Date
@@ -18581,7 +18593,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{27f}@anchor{gnat_rm/intrinsic_subprograms id4}@anchor{280}
+@anchor{gnat_rm/intrinsic_subprograms compilation-date}@anchor{280}@anchor{gnat_rm/intrinsic_subprograms id4}@anchor{281}
@section Compilation_Date
@@ -18591,7 +18603,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{281}@anchor{gnat_rm/intrinsic_subprograms id5}@anchor{282}
+@anchor{gnat_rm/intrinsic_subprograms compilation-time}@anchor{282}@anchor{gnat_rm/intrinsic_subprograms id5}@anchor{283}
@section Compilation_Time
@@ -18605,7 +18617,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 enclosing-entity}@anchor{283}@anchor{gnat_rm/intrinsic_subprograms id6}@anchor{284}
+@anchor{gnat_rm/intrinsic_subprograms enclosing-entity}@anchor{284}@anchor{gnat_rm/intrinsic_subprograms id6}@anchor{285}
@section Enclosing_Entity
@@ -18619,7 +18631,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 exception-information}@anchor{285}@anchor{gnat_rm/intrinsic_subprograms id7}@anchor{286}
+@anchor{gnat_rm/intrinsic_subprograms exception-information}@anchor{286}@anchor{gnat_rm/intrinsic_subprograms id7}@anchor{287}
@section Exception_Information
@@ -18633,7 +18645,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{287}@anchor{gnat_rm/intrinsic_subprograms id8}@anchor{288}
+@anchor{gnat_rm/intrinsic_subprograms exception-message}@anchor{288}@anchor{gnat_rm/intrinsic_subprograms id8}@anchor{289}
@section Exception_Message
@@ -18647,7 +18659,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{289}@anchor{gnat_rm/intrinsic_subprograms id9}@anchor{28a}
+@anchor{gnat_rm/intrinsic_subprograms exception-name}@anchor{28a}@anchor{gnat_rm/intrinsic_subprograms id9}@anchor{28b}
@section Exception_Name
@@ -18661,7 +18673,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 file}@anchor{28b}@anchor{gnat_rm/intrinsic_subprograms id10}@anchor{28c}
+@anchor{gnat_rm/intrinsic_subprograms file}@anchor{28c}@anchor{gnat_rm/intrinsic_subprograms id10}@anchor{28d}
@section File
@@ -18675,7 +18687,7 @@ application program should simply call the function
file.
@node Line,Shifts and Rotates,File,Intrinsic Subprograms
-@anchor{gnat_rm/intrinsic_subprograms id11}@anchor{28d}@anchor{gnat_rm/intrinsic_subprograms line}@anchor{28e}
+@anchor{gnat_rm/intrinsic_subprograms id11}@anchor{28e}@anchor{gnat_rm/intrinsic_subprograms line}@anchor{28f}
@section Line
@@ -18689,7 +18701,7 @@ application program should simply call the function
source line.
@node Shifts and Rotates,Source_Location,Line,Intrinsic Subprograms
-@anchor{gnat_rm/intrinsic_subprograms id12}@anchor{28f}@anchor{gnat_rm/intrinsic_subprograms shifts-and-rotates}@anchor{290}
+@anchor{gnat_rm/intrinsic_subprograms id12}@anchor{290}@anchor{gnat_rm/intrinsic_subprograms shifts-and-rotates}@anchor{291}
@section Shifts and Rotates
@@ -18732,7 +18744,7 @@ corresponding operator for modular type. In particular, shifting a negative
number may change its sign bit to positive.
@node Source_Location,,Shifts and Rotates,Intrinsic Subprograms
-@anchor{gnat_rm/intrinsic_subprograms id13}@anchor{291}@anchor{gnat_rm/intrinsic_subprograms source-location}@anchor{292}
+@anchor{gnat_rm/intrinsic_subprograms id13}@anchor{292}@anchor{gnat_rm/intrinsic_subprograms source-location}@anchor{293}
@section Source_Location
@@ -18746,7 +18758,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 doc}@anchor{293}@anchor{gnat_rm/representation_clauses_and_pragmas id1}@anchor{294}@anchor{gnat_rm/representation_clauses_and_pragmas representation-clauses-and-pragmas}@anchor{d}
+@anchor{gnat_rm/representation_clauses_and_pragmas doc}@anchor{294}@anchor{gnat_rm/representation_clauses_and_pragmas id1}@anchor{295}@anchor{gnat_rm/representation_clauses_and_pragmas representation-clauses-and-pragmas}@anchor{d}
@chapter Representation Clauses and Pragmas
@@ -18792,7 +18804,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 alignment-clauses}@anchor{295}@anchor{gnat_rm/representation_clauses_and_pragmas id2}@anchor{296}
+@anchor{gnat_rm/representation_clauses_and_pragmas alignment-clauses}@anchor{296}@anchor{gnat_rm/representation_clauses_and_pragmas id2}@anchor{297}
@section Alignment Clauses
@@ -18814,7 +18826,7 @@ For elementary types, the alignment is the minimum of the actual size of
objects of the type divided by @code{Storage_Unit},
and the maximum alignment supported by the target.
(This maximum alignment is given by the GNAT-specific attribute
-@code{Standard'Maximum_Alignment}; see @ref{1a5,,Attribute Maximum_Alignment}.)
+@code{Standard'Maximum_Alignment}; see @ref{1a6,,Attribute Maximum_Alignment}.)
@geindex Maximum_Alignment attribute
@@ -18923,7 +18935,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{297}@anchor{gnat_rm/representation_clauses_and_pragmas size-clauses}@anchor{298}
+@anchor{gnat_rm/representation_clauses_and_pragmas id3}@anchor{298}@anchor{gnat_rm/representation_clauses_and_pragmas size-clauses}@anchor{299}
@section Size Clauses
@@ -19000,7 +19012,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 id4}@anchor{299}@anchor{gnat_rm/representation_clauses_and_pragmas storage-size-clauses}@anchor{29a}
+@anchor{gnat_rm/representation_clauses_and_pragmas id4}@anchor{29a}@anchor{gnat_rm/representation_clauses_and_pragmas storage-size-clauses}@anchor{29b}
@section Storage_Size Clauses
@@ -19073,7 +19085,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{29b}@anchor{gnat_rm/representation_clauses_and_pragmas size-of-variant-record-objects}@anchor{29c}
+@anchor{gnat_rm/representation_clauses_and_pragmas id5}@anchor{29c}@anchor{gnat_rm/representation_clauses_and_pragmas size-of-variant-record-objects}@anchor{29d}
@section Size of Variant Record Objects
@@ -19183,7 +19195,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 biased-representation}@anchor{29d}@anchor{gnat_rm/representation_clauses_and_pragmas id6}@anchor{29e}
+@anchor{gnat_rm/representation_clauses_and_pragmas biased-representation}@anchor{29e}@anchor{gnat_rm/representation_clauses_and_pragmas id6}@anchor{29f}
@section Biased Representation
@@ -19221,7 +19233,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{29f}@anchor{gnat_rm/representation_clauses_and_pragmas value-size-and-object-size-clauses}@anchor{2a0}
+@anchor{gnat_rm/representation_clauses_and_pragmas id7}@anchor{2a0}@anchor{gnat_rm/representation_clauses_and_pragmas value-size-and-object-size-clauses}@anchor{2a1}
@section Value_Size and Object_Size Clauses
@@ -19537,7 +19549,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 component-size-clauses}@anchor{2a1}@anchor{gnat_rm/representation_clauses_and_pragmas id8}@anchor{2a2}
+@anchor{gnat_rm/representation_clauses_and_pragmas component-size-clauses}@anchor{2a2}@anchor{gnat_rm/representation_clauses_and_pragmas id8}@anchor{2a3}
@section Component_Size Clauses
@@ -19585,7 +19597,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{2a3}@anchor{gnat_rm/representation_clauses_and_pragmas id9}@anchor{2a4}
+@anchor{gnat_rm/representation_clauses_and_pragmas bit-order-clauses}@anchor{2a4}@anchor{gnat_rm/representation_clauses_and_pragmas id9}@anchor{2a5}
@section Bit_Order Clauses
@@ -19691,7 +19703,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 effect-of-bit-order-on-byte-ordering}@anchor{2a5}@anchor{gnat_rm/representation_clauses_and_pragmas id10}@anchor{2a6}
+@anchor{gnat_rm/representation_clauses_and_pragmas effect-of-bit-order-on-byte-ordering}@anchor{2a6}@anchor{gnat_rm/representation_clauses_and_pragmas id10}@anchor{2a7}
@section Effect of Bit_Order on Byte Ordering
@@ -19948,7 +19960,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 id11}@anchor{2a7}@anchor{gnat_rm/representation_clauses_and_pragmas pragma-pack-for-arrays}@anchor{2a8}
+@anchor{gnat_rm/representation_clauses_and_pragmas id11}@anchor{2a8}@anchor{gnat_rm/representation_clauses_and_pragmas pragma-pack-for-arrays}@anchor{2a9}
@section Pragma Pack for Arrays
@@ -20068,7 +20080,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 id12}@anchor{2a9}@anchor{gnat_rm/representation_clauses_and_pragmas pragma-pack-for-records}@anchor{2aa}
+@anchor{gnat_rm/representation_clauses_and_pragmas id12}@anchor{2aa}@anchor{gnat_rm/representation_clauses_and_pragmas pragma-pack-for-records}@anchor{2ab}
@section Pragma Pack for Records
@@ -20152,7 +20164,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{2ab}@anchor{gnat_rm/representation_clauses_and_pragmas record-representation-clauses}@anchor{2ac}
+@anchor{gnat_rm/representation_clauses_and_pragmas id13}@anchor{2ac}@anchor{gnat_rm/representation_clauses_and_pragmas record-representation-clauses}@anchor{2ad}
@section Record Representation Clauses
@@ -20231,7 +20243,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{2ad}@anchor{gnat_rm/representation_clauses_and_pragmas id14}@anchor{2ae}
+@anchor{gnat_rm/representation_clauses_and_pragmas handling-of-records-with-holes}@anchor{2ae}@anchor{gnat_rm/representation_clauses_and_pragmas id14}@anchor{2af}
@section Handling of Records with Holes
@@ -20307,7 +20319,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{2af}@anchor{gnat_rm/representation_clauses_and_pragmas id15}@anchor{2b0}
+@anchor{gnat_rm/representation_clauses_and_pragmas enumeration-clauses}@anchor{2b0}@anchor{gnat_rm/representation_clauses_and_pragmas id15}@anchor{2b1}
@section Enumeration Clauses
@@ -20350,7 +20362,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 address-clauses}@anchor{2b1}@anchor{gnat_rm/representation_clauses_and_pragmas id16}@anchor{2b2}
+@anchor{gnat_rm/representation_clauses_and_pragmas address-clauses}@anchor{2b2}@anchor{gnat_rm/representation_clauses_and_pragmas id16}@anchor{2b3}
@section Address Clauses
@@ -20690,7 +20702,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{2b3}@anchor{gnat_rm/representation_clauses_and_pragmas use-of-address-clauses-for-memory-mapped-i-o}@anchor{2b4}
+@anchor{gnat_rm/representation_clauses_and_pragmas id17}@anchor{2b4}@anchor{gnat_rm/representation_clauses_and_pragmas use-of-address-clauses-for-memory-mapped-i-o}@anchor{2b5}
@section Use of Address Clauses for Memory-Mapped I/O
@@ -20748,7 +20760,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 effect-of-convention-on-representation}@anchor{2b5}@anchor{gnat_rm/representation_clauses_and_pragmas id18}@anchor{2b6}
+@anchor{gnat_rm/representation_clauses_and_pragmas effect-of-convention-on-representation}@anchor{2b6}@anchor{gnat_rm/representation_clauses_and_pragmas id18}@anchor{2b7}
@section Effect of Convention on Representation
@@ -20826,7 +20838,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{2b7}@anchor{gnat_rm/representation_clauses_and_pragmas id19}@anchor{2b8}
+@anchor{gnat_rm/representation_clauses_and_pragmas conventions-and-anonymous-access-types}@anchor{2b8}@anchor{gnat_rm/representation_clauses_and_pragmas id19}@anchor{2b9}
@section Conventions and Anonymous Access Types
@@ -20902,7 +20914,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 determining-the-representations-chosen-by-gnat}@anchor{2b9}@anchor{gnat_rm/representation_clauses_and_pragmas id20}@anchor{2ba}
+@anchor{gnat_rm/representation_clauses_and_pragmas determining-the-representations-chosen-by-gnat}@anchor{2ba}@anchor{gnat_rm/representation_clauses_and_pragmas id20}@anchor{2bb}
@section Determining the Representations chosen by GNAT
@@ -21054,7 +21066,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 doc}@anchor{2bb}@anchor{gnat_rm/standard_library_routines id1}@anchor{2bc}@anchor{gnat_rm/standard_library_routines standard-library-routines}@anchor{e}
+@anchor{gnat_rm/standard_library_routines doc}@anchor{2bc}@anchor{gnat_rm/standard_library_routines id1}@anchor{2bd}@anchor{gnat_rm/standard_library_routines standard-library-routines}@anchor{e}
@chapter Standard Library Routines
@@ -21881,7 +21893,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 doc}@anchor{2bd}@anchor{gnat_rm/the_implementation_of_standard_i_o id1}@anchor{2be}@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{2be}@anchor{gnat_rm/the_implementation_of_standard_i_o id1}@anchor{2bf}@anchor{gnat_rm/the_implementation_of_standard_i_o the-implementation-of-standard-i-o}@anchor{f}
@chapter The Implementation of Standard I/O
@@ -21933,7 +21945,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 id2}@anchor{2bf}@anchor{gnat_rm/the_implementation_of_standard_i_o standard-i-o-packages}@anchor{2c0}
+@anchor{gnat_rm/the_implementation_of_standard_i_o id2}@anchor{2c0}@anchor{gnat_rm/the_implementation_of_standard_i_o standard-i-o-packages}@anchor{2c1}
@section Standard I/O Packages
@@ -22004,7 +22016,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{2c1}@anchor{gnat_rm/the_implementation_of_standard_i_o id3}@anchor{2c2}
+@anchor{gnat_rm/the_implementation_of_standard_i_o form-strings}@anchor{2c2}@anchor{gnat_rm/the_implementation_of_standard_i_o id3}@anchor{2c3}
@section FORM Strings
@@ -22030,7 +22042,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{2c3}@anchor{gnat_rm/the_implementation_of_standard_i_o id4}@anchor{2c4}
+@anchor{gnat_rm/the_implementation_of_standard_i_o direct-io}@anchor{2c4}@anchor{gnat_rm/the_implementation_of_standard_i_o id4}@anchor{2c5}
@section Direct_IO
@@ -22049,7 +22061,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 id5}@anchor{2c5}@anchor{gnat_rm/the_implementation_of_standard_i_o sequential-io}@anchor{2c6}
+@anchor{gnat_rm/the_implementation_of_standard_i_o id5}@anchor{2c6}@anchor{gnat_rm/the_implementation_of_standard_i_o sequential-io}@anchor{2c7}
@section Sequential_IO
@@ -22096,7 +22108,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{2c7}@anchor{gnat_rm/the_implementation_of_standard_i_o text-io}@anchor{2c8}
+@anchor{gnat_rm/the_implementation_of_standard_i_o id6}@anchor{2c8}@anchor{gnat_rm/the_implementation_of_standard_i_o text-io}@anchor{2c9}
@section Text_IO
@@ -22179,7 +22191,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{2c9}@anchor{gnat_rm/the_implementation_of_standard_i_o stream-pointer-positioning}@anchor{2ca}
+@anchor{gnat_rm/the_implementation_of_standard_i_o id7}@anchor{2ca}@anchor{gnat_rm/the_implementation_of_standard_i_o stream-pointer-positioning}@anchor{2cb}
@subsection Stream Pointer Positioning
@@ -22215,7 +22227,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 id8}@anchor{2cb}@anchor{gnat_rm/the_implementation_of_standard_i_o reading-and-writing-non-regular-files}@anchor{2cc}
+@anchor{gnat_rm/the_implementation_of_standard_i_o id8}@anchor{2cc}@anchor{gnat_rm/the_implementation_of_standard_i_o reading-and-writing-non-regular-files}@anchor{2cd}
@subsection Reading and Writing Non-Regular Files
@@ -22266,7 +22278,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{2cd}@anchor{gnat_rm/the_implementation_of_standard_i_o id9}@anchor{2ce}
+@anchor{gnat_rm/the_implementation_of_standard_i_o get-immediate}@anchor{2ce}@anchor{gnat_rm/the_implementation_of_standard_i_o id9}@anchor{2cf}
@subsection Get_Immediate
@@ -22284,7 +22296,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{2cf}@anchor{gnat_rm/the_implementation_of_standard_i_o treating-text-io-files-as-streams}@anchor{2d0}
+@anchor{gnat_rm/the_implementation_of_standard_i_o id10}@anchor{2d0}@anchor{gnat_rm/the_implementation_of_standard_i_o treating-text-io-files-as-streams}@anchor{2d1}
@subsection Treating Text_IO Files as Streams
@@ -22300,7 +22312,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{2d1}@anchor{gnat_rm/the_implementation_of_standard_i_o text-io-extensions}@anchor{2d2}
+@anchor{gnat_rm/the_implementation_of_standard_i_o id11}@anchor{2d2}@anchor{gnat_rm/the_implementation_of_standard_i_o text-io-extensions}@anchor{2d3}
@subsection Text_IO Extensions
@@ -22328,7 +22340,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 id12}@anchor{2d3}@anchor{gnat_rm/the_implementation_of_standard_i_o text-io-facilities-for-unbounded-strings}@anchor{2d4}
+@anchor{gnat_rm/the_implementation_of_standard_i_o id12}@anchor{2d4}@anchor{gnat_rm/the_implementation_of_standard_i_o text-io-facilities-for-unbounded-strings}@anchor{2d5}
@subsection Text_IO Facilities for Unbounded Strings
@@ -22376,7 +22388,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 id13}@anchor{2d5}@anchor{gnat_rm/the_implementation_of_standard_i_o wide-text-io}@anchor{2d6}
+@anchor{gnat_rm/the_implementation_of_standard_i_o id13}@anchor{2d6}@anchor{gnat_rm/the_implementation_of_standard_i_o wide-text-io}@anchor{2d7}
@section Wide_Text_IO
@@ -22623,12 +22635,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 id14}@anchor{2d7}@anchor{gnat_rm/the_implementation_of_standard_i_o stream-pointer-positioning-1}@anchor{2d8}
+@anchor{gnat_rm/the_implementation_of_standard_i_o id14}@anchor{2d8}@anchor{gnat_rm/the_implementation_of_standard_i_o stream-pointer-positioning-1}@anchor{2d9}
@subsection Stream Pointer Positioning
@code{Ada.Wide_Text_IO} is similar to @code{Ada.Text_IO} in its handling
-of stream pointer positioning (@ref{2c8,,Text_IO}). There is one additional
+of stream pointer positioning (@ref{2c9,,Text_IO}). There is one additional
case:
If @code{Ada.Wide_Text_IO.Look_Ahead} reads a character outside the
@@ -22647,7 +22659,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 id15}@anchor{2d9}@anchor{gnat_rm/the_implementation_of_standard_i_o reading-and-writing-non-regular-files-1}@anchor{2da}
+@anchor{gnat_rm/the_implementation_of_standard_i_o id15}@anchor{2da}@anchor{gnat_rm/the_implementation_of_standard_i_o reading-and-writing-non-regular-files-1}@anchor{2db}
@subsection Reading and Writing Non-Regular Files
@@ -22658,7 +22670,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{2db}@anchor{gnat_rm/the_implementation_of_standard_i_o wide-wide-text-io}@anchor{2dc}
+@anchor{gnat_rm/the_implementation_of_standard_i_o id16}@anchor{2dc}@anchor{gnat_rm/the_implementation_of_standard_i_o wide-wide-text-io}@anchor{2dd}
@section Wide_Wide_Text_IO
@@ -22827,12 +22839,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 id17}@anchor{2dd}@anchor{gnat_rm/the_implementation_of_standard_i_o stream-pointer-positioning-2}@anchor{2de}
+@anchor{gnat_rm/the_implementation_of_standard_i_o id17}@anchor{2de}@anchor{gnat_rm/the_implementation_of_standard_i_o stream-pointer-positioning-2}@anchor{2df}
@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{2c8,,Text_IO}). There is one additional
+of stream pointer positioning (@ref{2c9,,Text_IO}). There is one additional
case:
If @code{Ada.Wide_Wide_Text_IO.Look_Ahead} reads a character outside the
@@ -22851,7 +22863,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{2df}@anchor{gnat_rm/the_implementation_of_standard_i_o reading-and-writing-non-regular-files-2}@anchor{2e0}
+@anchor{gnat_rm/the_implementation_of_standard_i_o id18}@anchor{2e0}@anchor{gnat_rm/the_implementation_of_standard_i_o reading-and-writing-non-regular-files-2}@anchor{2e1}
@subsection Reading and Writing Non-Regular Files
@@ -22862,7 +22874,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{2e1}@anchor{gnat_rm/the_implementation_of_standard_i_o stream-io}@anchor{2e2}
+@anchor{gnat_rm/the_implementation_of_standard_i_o id19}@anchor{2e2}@anchor{gnat_rm/the_implementation_of_standard_i_o stream-io}@anchor{2e3}
@section Stream_IO
@@ -22884,7 +22896,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{2e3}@anchor{gnat_rm/the_implementation_of_standard_i_o text-translation}@anchor{2e4}
+@anchor{gnat_rm/the_implementation_of_standard_i_o id20}@anchor{2e4}@anchor{gnat_rm/the_implementation_of_standard_i_o text-translation}@anchor{2e5}
@section Text Translation
@@ -22918,7 +22930,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{2e5}@anchor{gnat_rm/the_implementation_of_standard_i_o shared-files}@anchor{2e6}
+@anchor{gnat_rm/the_implementation_of_standard_i_o id21}@anchor{2e6}@anchor{gnat_rm/the_implementation_of_standard_i_o shared-files}@anchor{2e7}
@section Shared Files
@@ -22981,7 +22993,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{2e7}@anchor{gnat_rm/the_implementation_of_standard_i_o id22}@anchor{2e8}
+@anchor{gnat_rm/the_implementation_of_standard_i_o filenames-encoding}@anchor{2e8}@anchor{gnat_rm/the_implementation_of_standard_i_o id22}@anchor{2e9}
@section Filenames encoding
@@ -23021,7 +23033,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{2e9}@anchor{gnat_rm/the_implementation_of_standard_i_o id23}@anchor{2ea}
+@anchor{gnat_rm/the_implementation_of_standard_i_o file-content-encoding}@anchor{2ea}@anchor{gnat_rm/the_implementation_of_standard_i_o id23}@anchor{2eb}
@section File content encoding
@@ -23054,7 +23066,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 id24}@anchor{2eb}@anchor{gnat_rm/the_implementation_of_standard_i_o open-modes}@anchor{2ec}
+@anchor{gnat_rm/the_implementation_of_standard_i_o id24}@anchor{2ec}@anchor{gnat_rm/the_implementation_of_standard_i_o open-modes}@anchor{2ed}
@section Open Modes
@@ -23157,7 +23169,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 id25}@anchor{2ed}@anchor{gnat_rm/the_implementation_of_standard_i_o operations-on-c-streams}@anchor{2ee}
+@anchor{gnat_rm/the_implementation_of_standard_i_o id25}@anchor{2ee}@anchor{gnat_rm/the_implementation_of_standard_i_o operations-on-c-streams}@anchor{2ef}
@section Operations on C Streams
@@ -23317,7 +23329,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 id26}@anchor{2ef}@anchor{gnat_rm/the_implementation_of_standard_i_o interfacing-to-c-streams}@anchor{2f0}
+@anchor{gnat_rm/the_implementation_of_standard_i_o id26}@anchor{2f0}@anchor{gnat_rm/the_implementation_of_standard_i_o interfacing-to-c-streams}@anchor{2f1}
@section Interfacing to C Streams
@@ -23410,7 +23422,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 doc}@anchor{2f1}@anchor{gnat_rm/the_gnat_library id1}@anchor{2f2}@anchor{gnat_rm/the_gnat_library the-gnat-library}@anchor{10}
+@anchor{gnat_rm/the_gnat_library doc}@anchor{2f2}@anchor{gnat_rm/the_gnat_library id1}@anchor{2f3}@anchor{gnat_rm/the_gnat_library the-gnat-library}@anchor{10}
@chapter The GNAT Library
@@ -23595,7 +23607,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 ada-characters-latin-9-a-chlat9-ads}@anchor{2f3}@anchor{gnat_rm/the_gnat_library id2}@anchor{2f4}
+@anchor{gnat_rm/the_gnat_library ada-characters-latin-9-a-chlat9-ads}@anchor{2f4}@anchor{gnat_rm/the_gnat_library id2}@anchor{2f5}
@section @code{Ada.Characters.Latin_9} (@code{a-chlat9.ads})
@@ -23612,7 +23624,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-cwila9 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{2f5}@anchor{gnat_rm/the_gnat_library id3}@anchor{2f6}
+@anchor{gnat_rm/the_gnat_library ada-characters-wide-latin-1-a-cwila1-ads}@anchor{2f6}@anchor{gnat_rm/the_gnat_library id3}@anchor{2f7}
@section @code{Ada.Characters.Wide_Latin_1} (@code{a-cwila1.ads})
@@ -23629,7 +23641,7 @@ is specifically authorized by the Ada Reference Manual
(RM A.3.3(27)).
@node Ada Characters Wide_Latin_9 a-cwila9 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 ada-characters-wide-latin-9-a-cwila9-ads}@anchor{2f7}@anchor{gnat_rm/the_gnat_library id4}@anchor{2f8}
+@anchor{gnat_rm/the_gnat_library ada-characters-wide-latin-9-a-cwila9-ads}@anchor{2f8}@anchor{gnat_rm/the_gnat_library id4}@anchor{2f9}
@section @code{Ada.Characters.Wide_Latin_9} (@code{a-cwila9.ads})
@@ -23646,7 +23658,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-cwila9 ads,The GNAT Library
-@anchor{gnat_rm/the_gnat_library ada-characters-wide-wide-latin-1-a-chzla1-ads}@anchor{2f9}@anchor{gnat_rm/the_gnat_library id5}@anchor{2fa}
+@anchor{gnat_rm/the_gnat_library ada-characters-wide-wide-latin-1-a-chzla1-ads}@anchor{2fa}@anchor{gnat_rm/the_gnat_library id5}@anchor{2fb}
@section @code{Ada.Characters.Wide_Wide_Latin_1} (@code{a-chzla1.ads})
@@ -23663,7 +23675,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 Bounded_Holders a-coboho 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{2fb}@anchor{gnat_rm/the_gnat_library id6}@anchor{2fc}
+@anchor{gnat_rm/the_gnat_library ada-characters-wide-wide-latin-9-a-chzla9-ads}@anchor{2fc}@anchor{gnat_rm/the_gnat_library id6}@anchor{2fd}
@section @code{Ada.Characters.Wide_Wide_Latin_9} (@code{a-chzla9.ads})
@@ -23680,7 +23692,7 @@ is specifically authorized by the Ada Reference Manual
(RM A.3.3(27)).
@node Ada Containers Bounded_Holders a-coboho ads,Ada Command_Line Environment a-colien ads,Ada Characters Wide_Wide_Latin_9 a-chzla9 ads,The GNAT Library
-@anchor{gnat_rm/the_gnat_library ada-containers-bounded-holders-a-coboho-ads}@anchor{2fd}@anchor{gnat_rm/the_gnat_library id7}@anchor{2fe}
+@anchor{gnat_rm/the_gnat_library ada-containers-bounded-holders-a-coboho-ads}@anchor{2fe}@anchor{gnat_rm/the_gnat_library id7}@anchor{2ff}
@section @code{Ada.Containers.Bounded_Holders} (@code{a-coboho.ads})
@@ -23692,7 +23704,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{2ff}@anchor{gnat_rm/the_gnat_library id8}@anchor{300}
+@anchor{gnat_rm/the_gnat_library ada-command-line-environment-a-colien-ads}@anchor{300}@anchor{gnat_rm/the_gnat_library id8}@anchor{301}
@section @code{Ada.Command_Line.Environment} (@code{a-colien.ads})
@@ -23705,7 +23717,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 ada-command-line-remove-a-colire-ads}@anchor{301}@anchor{gnat_rm/the_gnat_library id9}@anchor{302}
+@anchor{gnat_rm/the_gnat_library ada-command-line-remove-a-colire-ads}@anchor{302}@anchor{gnat_rm/the_gnat_library id9}@anchor{303}
@section @code{Ada.Command_Line.Remove} (@code{a-colire.ads})
@@ -23723,7 +23735,7 @@ to further calls to the subprograms in @code{Ada.Command_Line}. These calls
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 ada-command-line-response-file-a-clrefi-ads}@anchor{303}@anchor{gnat_rm/the_gnat_library id10}@anchor{304}
+@anchor{gnat_rm/the_gnat_library ada-command-line-response-file-a-clrefi-ads}@anchor{304}@anchor{gnat_rm/the_gnat_library id10}@anchor{305}
@section @code{Ada.Command_Line.Response_File} (@code{a-clrefi.ads})
@@ -23743,7 +23755,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 ada-direct-io-c-streams-a-diocst-ads}@anchor{305}@anchor{gnat_rm/the_gnat_library id11}@anchor{306}
+@anchor{gnat_rm/the_gnat_library ada-direct-io-c-streams-a-diocst-ads}@anchor{306}@anchor{gnat_rm/the_gnat_library id11}@anchor{307}
@section @code{Ada.Direct_IO.C_Streams} (@code{a-diocst.ads})
@@ -23758,7 +23770,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 ada-exceptions-is-null-occurrence-a-einuoc-ads}@anchor{307}@anchor{gnat_rm/the_gnat_library id12}@anchor{308}
+@anchor{gnat_rm/the_gnat_library ada-exceptions-is-null-occurrence-a-einuoc-ads}@anchor{308}@anchor{gnat_rm/the_gnat_library id12}@anchor{309}
@section @code{Ada.Exceptions.Is_Null_Occurrence} (@code{a-einuoc.ads})
@@ -23772,7 +23784,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 ada-exceptions-last-chance-handler-a-elchha-ads}@anchor{309}@anchor{gnat_rm/the_gnat_library id13}@anchor{30a}
+@anchor{gnat_rm/the_gnat_library ada-exceptions-last-chance-handler-a-elchha-ads}@anchor{30a}@anchor{gnat_rm/the_gnat_library id13}@anchor{30b}
@section @code{Ada.Exceptions.Last_Chance_Handler} (@code{a-elchha.ads})
@@ -23786,7 +23798,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{30b}@anchor{gnat_rm/the_gnat_library id14}@anchor{30c}
+@anchor{gnat_rm/the_gnat_library ada-exceptions-traceback-a-exctra-ads}@anchor{30c}@anchor{gnat_rm/the_gnat_library id14}@anchor{30d}
@section @code{Ada.Exceptions.Traceback} (@code{a-exctra.ads})
@@ -23799,7 +23811,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{30d}@anchor{gnat_rm/the_gnat_library id15}@anchor{30e}
+@anchor{gnat_rm/the_gnat_library ada-sequential-io-c-streams-a-siocst-ads}@anchor{30e}@anchor{gnat_rm/the_gnat_library id15}@anchor{30f}
@section @code{Ada.Sequential_IO.C_Streams} (@code{a-siocst.ads})
@@ -23814,7 +23826,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 ada-streams-stream-io-c-streams-a-ssicst-ads}@anchor{30f}@anchor{gnat_rm/the_gnat_library id16}@anchor{310}
+@anchor{gnat_rm/the_gnat_library ada-streams-stream-io-c-streams-a-ssicst-ads}@anchor{310}@anchor{gnat_rm/the_gnat_library id16}@anchor{311}
@section @code{Ada.Streams.Stream_IO.C_Streams} (@code{a-ssicst.ads})
@@ -23829,7 +23841,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{311}@anchor{gnat_rm/the_gnat_library id17}@anchor{312}
+@anchor{gnat_rm/the_gnat_library ada-strings-unbounded-text-io-a-suteio-ads}@anchor{312}@anchor{gnat_rm/the_gnat_library id17}@anchor{313}
@section @code{Ada.Strings.Unbounded.Text_IO} (@code{a-suteio.ads})
@@ -23846,7 +23858,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 ada-strings-wide-unbounded-wide-text-io-a-swuwti-ads}@anchor{313}@anchor{gnat_rm/the_gnat_library id18}@anchor{314}
+@anchor{gnat_rm/the_gnat_library ada-strings-wide-unbounded-wide-text-io-a-swuwti-ads}@anchor{314}@anchor{gnat_rm/the_gnat_library id18}@anchor{315}
@section @code{Ada.Strings.Wide_Unbounded.Wide_Text_IO} (@code{a-swuwti.ads})
@@ -23863,7 +23875,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 ada-strings-wide-wide-unbounded-wide-wide-text-io-a-szuzti-ads}@anchor{315}@anchor{gnat_rm/the_gnat_library id19}@anchor{316}
+@anchor{gnat_rm/the_gnat_library ada-strings-wide-wide-unbounded-wide-wide-text-io-a-szuzti-ads}@anchor{316}@anchor{gnat_rm/the_gnat_library id19}@anchor{317}
@section @code{Ada.Strings.Wide_Wide_Unbounded.Wide_Wide_Text_IO} (@code{a-szuzti.ads})
@@ -23880,7 +23892,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{317}@anchor{gnat_rm/the_gnat_library id20}@anchor{318}
+@anchor{gnat_rm/the_gnat_library ada-task-initialization-a-tasini-ads}@anchor{318}@anchor{gnat_rm/the_gnat_library id20}@anchor{319}
@section @code{Ada.Task_Initialization} (@code{a-tasini.ads})
@@ -23892,7 +23904,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{319}@anchor{gnat_rm/the_gnat_library id21}@anchor{31a}
+@anchor{gnat_rm/the_gnat_library ada-text-io-c-streams-a-tiocst-ads}@anchor{31a}@anchor{gnat_rm/the_gnat_library id21}@anchor{31b}
@section @code{Ada.Text_IO.C_Streams} (@code{a-tiocst.ads})
@@ -23907,7 +23919,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{31b}@anchor{gnat_rm/the_gnat_library id22}@anchor{31c}
+@anchor{gnat_rm/the_gnat_library ada-text-io-reset-standard-files-a-tirsfi-ads}@anchor{31c}@anchor{gnat_rm/the_gnat_library id22}@anchor{31d}
@section @code{Ada.Text_IO.Reset_Standard_Files} (@code{a-tirsfi.ads})
@@ -23922,7 +23934,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 ada-wide-characters-unicode-a-wichun-ads}@anchor{31d}@anchor{gnat_rm/the_gnat_library id23}@anchor{31e}
+@anchor{gnat_rm/the_gnat_library ada-wide-characters-unicode-a-wichun-ads}@anchor{31e}@anchor{gnat_rm/the_gnat_library id23}@anchor{31f}
@section @code{Ada.Wide_Characters.Unicode} (@code{a-wichun.ads})
@@ -23935,7 +23947,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 ada-wide-text-io-c-streams-a-wtcstr-ads}@anchor{31f}@anchor{gnat_rm/the_gnat_library id24}@anchor{320}
+@anchor{gnat_rm/the_gnat_library ada-wide-text-io-c-streams-a-wtcstr-ads}@anchor{320}@anchor{gnat_rm/the_gnat_library id24}@anchor{321}
@section @code{Ada.Wide_Text_IO.C_Streams} (@code{a-wtcstr.ads})
@@ -23950,7 +23962,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{321}@anchor{gnat_rm/the_gnat_library id25}@anchor{322}
+@anchor{gnat_rm/the_gnat_library ada-wide-text-io-reset-standard-files-a-wrstfi-ads}@anchor{322}@anchor{gnat_rm/the_gnat_library id25}@anchor{323}
@section @code{Ada.Wide_Text_IO.Reset_Standard_Files} (@code{a-wrstfi.ads})
@@ -23965,7 +23977,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 ada-wide-wide-characters-unicode-a-zchuni-ads}@anchor{323}@anchor{gnat_rm/the_gnat_library id26}@anchor{324}
+@anchor{gnat_rm/the_gnat_library ada-wide-wide-characters-unicode-a-zchuni-ads}@anchor{324}@anchor{gnat_rm/the_gnat_library id26}@anchor{325}
@section @code{Ada.Wide_Wide_Characters.Unicode} (@code{a-zchuni.ads})
@@ -23978,7 +23990,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 ada-wide-wide-text-io-c-streams-a-ztcstr-ads}@anchor{325}@anchor{gnat_rm/the_gnat_library id27}@anchor{326}
+@anchor{gnat_rm/the_gnat_library ada-wide-wide-text-io-c-streams-a-ztcstr-ads}@anchor{326}@anchor{gnat_rm/the_gnat_library id27}@anchor{327}
@section @code{Ada.Wide_Wide_Text_IO.C_Streams} (@code{a-ztcstr.ads})
@@ -23993,7 +24005,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{327}@anchor{gnat_rm/the_gnat_library id28}@anchor{328}
+@anchor{gnat_rm/the_gnat_library ada-wide-wide-text-io-reset-standard-files-a-zrstfi-ads}@anchor{328}@anchor{gnat_rm/the_gnat_library id28}@anchor{329}
@section @code{Ada.Wide_Wide_Text_IO.Reset_Standard_Files} (@code{a-zrstfi.ads})
@@ -24008,7 +24020,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{329}@anchor{gnat_rm/the_gnat_library id29}@anchor{32a}
+@anchor{gnat_rm/the_gnat_library gnat-altivec-g-altive-ads}@anchor{32a}@anchor{gnat_rm/the_gnat_library id29}@anchor{32b}
@section @code{GNAT.Altivec} (@code{g-altive.ads})
@@ -24021,7 +24033,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{32b}@anchor{gnat_rm/the_gnat_library id30}@anchor{32c}
+@anchor{gnat_rm/the_gnat_library gnat-altivec-conversions-g-altcon-ads}@anchor{32c}@anchor{gnat_rm/the_gnat_library id30}@anchor{32d}
@section @code{GNAT.Altivec.Conversions} (@code{g-altcon.ads})
@@ -24032,7 +24044,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 gnat-altivec-vector-operations-g-alveop-ads}@anchor{32d}@anchor{gnat_rm/the_gnat_library id31}@anchor{32e}
+@anchor{gnat_rm/the_gnat_library gnat-altivec-vector-operations-g-alveop-ads}@anchor{32e}@anchor{gnat_rm/the_gnat_library id31}@anchor{32f}
@section @code{GNAT.Altivec.Vector_Operations} (@code{g-alveop.ads})
@@ -24046,7 +24058,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{32f}@anchor{gnat_rm/the_gnat_library id32}@anchor{330}
+@anchor{gnat_rm/the_gnat_library gnat-altivec-vector-types-g-alvety-ads}@anchor{330}@anchor{gnat_rm/the_gnat_library id32}@anchor{331}
@section @code{GNAT.Altivec.Vector_Types} (@code{g-alvety.ads})
@@ -24058,7 +24070,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{331}@anchor{gnat_rm/the_gnat_library id33}@anchor{332}
+@anchor{gnat_rm/the_gnat_library gnat-altivec-vector-views-g-alvevi-ads}@anchor{332}@anchor{gnat_rm/the_gnat_library id33}@anchor{333}
@section @code{GNAT.Altivec.Vector_Views} (@code{g-alvevi.ads})
@@ -24073,7 +24085,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{333}@anchor{gnat_rm/the_gnat_library id34}@anchor{334}
+@anchor{gnat_rm/the_gnat_library gnat-array-split-g-arrspl-ads}@anchor{334}@anchor{gnat_rm/the_gnat_library id34}@anchor{335}
@section @code{GNAT.Array_Split} (@code{g-arrspl.ads})
@@ -24086,7 +24098,7 @@ an array wherever the separators appear, and provide direct access
to the resulting slices.
@node GNAT AWK g-awk ads,GNAT Binary_Search g-binsea ads,GNAT Array_Split g-arrspl ads,The GNAT Library
-@anchor{gnat_rm/the_gnat_library gnat-awk-g-awk-ads}@anchor{335}@anchor{gnat_rm/the_gnat_library id35}@anchor{336}
+@anchor{gnat_rm/the_gnat_library gnat-awk-g-awk-ads}@anchor{336}@anchor{gnat_rm/the_gnat_library id35}@anchor{337}
@section @code{GNAT.AWK} (@code{g-awk.ads})
@@ -24101,7 +24113,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 Binary_Search g-binsea ads,GNAT Bind_Environment g-binenv ads,GNAT AWK g-awk ads,The GNAT Library
-@anchor{gnat_rm/the_gnat_library gnat-binary-search-g-binsea-ads}@anchor{337}@anchor{gnat_rm/the_gnat_library id36}@anchor{338}
+@anchor{gnat_rm/the_gnat_library gnat-binary-search-g-binsea-ads}@anchor{338}@anchor{gnat_rm/the_gnat_library id36}@anchor{339}
@section @code{GNAT.Binary_Search} (@code{g-binsea.ads})
@@ -24113,7 +24125,7 @@ Allow binary search of a sorted array (or of an array-like container;
the generic does not reference the array directly).
@node GNAT Bind_Environment g-binenv ads,GNAT Branch_Prediction g-brapre ads,GNAT Binary_Search g-binsea ads,The GNAT Library
-@anchor{gnat_rm/the_gnat_library gnat-bind-environment-g-binenv-ads}@anchor{339}@anchor{gnat_rm/the_gnat_library id37}@anchor{33a}
+@anchor{gnat_rm/the_gnat_library gnat-bind-environment-g-binenv-ads}@anchor{33a}@anchor{gnat_rm/the_gnat_library id37}@anchor{33b}
@section @code{GNAT.Bind_Environment} (@code{g-binenv.ads})
@@ -24126,7 +24138,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 gnat-branch-prediction-g-brapre-ads}@anchor{33b}@anchor{gnat_rm/the_gnat_library id38}@anchor{33c}
+@anchor{gnat_rm/the_gnat_library gnat-branch-prediction-g-brapre-ads}@anchor{33c}@anchor{gnat_rm/the_gnat_library id38}@anchor{33d}
@section @code{GNAT.Branch_Prediction} (@code{g-brapre.ads})
@@ -24137,7 +24149,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{33d}@anchor{gnat_rm/the_gnat_library id39}@anchor{33e}
+@anchor{gnat_rm/the_gnat_library gnat-bounded-buffers-g-boubuf-ads}@anchor{33e}@anchor{gnat_rm/the_gnat_library id39}@anchor{33f}
@section @code{GNAT.Bounded_Buffers} (@code{g-boubuf.ads})
@@ -24152,7 +24164,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{33f}@anchor{gnat_rm/the_gnat_library id40}@anchor{340}
+@anchor{gnat_rm/the_gnat_library gnat-bounded-mailboxes-g-boumai-ads}@anchor{340}@anchor{gnat_rm/the_gnat_library id40}@anchor{341}
@section @code{GNAT.Bounded_Mailboxes} (@code{g-boumai.ads})
@@ -24165,7 +24177,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{341}@anchor{gnat_rm/the_gnat_library id41}@anchor{342}
+@anchor{gnat_rm/the_gnat_library gnat-bubble-sort-g-bubsor-ads}@anchor{342}@anchor{gnat_rm/the_gnat_library id41}@anchor{343}
@section @code{GNAT.Bubble_Sort} (@code{g-bubsor.ads})
@@ -24180,7 +24192,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 gnat-bubble-sort-a-g-busora-ads}@anchor{343}@anchor{gnat_rm/the_gnat_library id42}@anchor{344}
+@anchor{gnat_rm/the_gnat_library gnat-bubble-sort-a-g-busora-ads}@anchor{344}@anchor{gnat_rm/the_gnat_library id42}@anchor{345}
@section @code{GNAT.Bubble_Sort_A} (@code{g-busora.ads})
@@ -24196,7 +24208,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{345}@anchor{gnat_rm/the_gnat_library id43}@anchor{346}
+@anchor{gnat_rm/the_gnat_library gnat-bubble-sort-g-g-busorg-ads}@anchor{346}@anchor{gnat_rm/the_gnat_library id43}@anchor{347}
@section @code{GNAT.Bubble_Sort_G} (@code{g-busorg.ads})
@@ -24212,7 +24224,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{347}@anchor{gnat_rm/the_gnat_library id44}@anchor{348}
+@anchor{gnat_rm/the_gnat_library gnat-byte-order-mark-g-byorma-ads}@anchor{348}@anchor{gnat_rm/the_gnat_library id44}@anchor{349}
@section @code{GNAT.Byte_Order_Mark} (@code{g-byorma.ads})
@@ -24228,7 +24240,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{349}@anchor{gnat_rm/the_gnat_library id45}@anchor{34a}
+@anchor{gnat_rm/the_gnat_library gnat-byte-swapping-g-bytswa-ads}@anchor{34a}@anchor{gnat_rm/the_gnat_library id45}@anchor{34b}
@section @code{GNAT.Byte_Swapping} (@code{g-bytswa.ads})
@@ -24242,7 +24254,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 gnat-calendar-g-calend-ads}@anchor{34b}@anchor{gnat_rm/the_gnat_library id46}@anchor{34c}
+@anchor{gnat_rm/the_gnat_library gnat-calendar-g-calend-ads}@anchor{34c}@anchor{gnat_rm/the_gnat_library id46}@anchor{34d}
@section @code{GNAT.Calendar} (@code{g-calend.ads})
@@ -24256,7 +24268,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 gnat-calendar-time-io-g-catiio-ads}@anchor{34d}@anchor{gnat_rm/the_gnat_library id47}@anchor{34e}
+@anchor{gnat_rm/the_gnat_library gnat-calendar-time-io-g-catiio-ads}@anchor{34e}@anchor{gnat_rm/the_gnat_library id47}@anchor{34f}
@section @code{GNAT.Calendar.Time_IO} (@code{g-catiio.ads})
@@ -24267,7 +24279,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 gnat-crc32-g-crc32-ads}@anchor{34f}@anchor{gnat_rm/the_gnat_library id48}@anchor{350}
+@anchor{gnat_rm/the_gnat_library gnat-crc32-g-crc32-ads}@anchor{350}@anchor{gnat_rm/the_gnat_library id48}@anchor{351}
@section @code{GNAT.CRC32} (@code{g-crc32.ads})
@@ -24284,7 +24296,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 gnat-case-util-g-casuti-ads}@anchor{351}@anchor{gnat_rm/the_gnat_library id49}@anchor{352}
+@anchor{gnat_rm/the_gnat_library gnat-case-util-g-casuti-ads}@anchor{352}@anchor{gnat_rm/the_gnat_library id49}@anchor{353}
@section @code{GNAT.Case_Util} (@code{g-casuti.ads})
@@ -24299,7 +24311,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 gnat-cgi-g-cgi-ads}@anchor{353}@anchor{gnat_rm/the_gnat_library id50}@anchor{354}
+@anchor{gnat_rm/the_gnat_library gnat-cgi-g-cgi-ads}@anchor{354}@anchor{gnat_rm/the_gnat_library id50}@anchor{355}
@section @code{GNAT.CGI} (@code{g-cgi.ads})
@@ -24314,7 +24326,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{355}@anchor{gnat_rm/the_gnat_library id51}@anchor{356}
+@anchor{gnat_rm/the_gnat_library gnat-cgi-cookie-g-cgicoo-ads}@anchor{356}@anchor{gnat_rm/the_gnat_library id51}@anchor{357}
@section @code{GNAT.CGI.Cookie} (@code{g-cgicoo.ads})
@@ -24329,7 +24341,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{357}@anchor{gnat_rm/the_gnat_library id52}@anchor{358}
+@anchor{gnat_rm/the_gnat_library gnat-cgi-debug-g-cgideb-ads}@anchor{358}@anchor{gnat_rm/the_gnat_library id52}@anchor{359}
@section @code{GNAT.CGI.Debug} (@code{g-cgideb.ads})
@@ -24341,7 +24353,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 gnat-command-line-g-comlin-ads}@anchor{359}@anchor{gnat_rm/the_gnat_library id53}@anchor{35a}
+@anchor{gnat_rm/the_gnat_library gnat-command-line-g-comlin-ads}@anchor{35a}@anchor{gnat_rm/the_gnat_library id53}@anchor{35b}
@section @code{GNAT.Command_Line} (@code{g-comlin.ads})
@@ -24354,7 +24366,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{35b}@anchor{gnat_rm/the_gnat_library id54}@anchor{35c}
+@anchor{gnat_rm/the_gnat_library gnat-compiler-version-g-comver-ads}@anchor{35c}@anchor{gnat_rm/the_gnat_library id54}@anchor{35d}
@section @code{GNAT.Compiler_Version} (@code{g-comver.ads})
@@ -24372,7 +24384,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 gnat-ctrl-c-g-ctrl-c-ads}@anchor{35d}@anchor{gnat_rm/the_gnat_library id55}@anchor{35e}
+@anchor{gnat_rm/the_gnat_library gnat-ctrl-c-g-ctrl-c-ads}@anchor{35e}@anchor{gnat_rm/the_gnat_library id55}@anchor{35f}
@section @code{GNAT.Ctrl_C} (@code{g-ctrl_c.ads})
@@ -24383,7 +24395,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 gnat-current-exception-g-curexc-ads}@anchor{35f}@anchor{gnat_rm/the_gnat_library id56}@anchor{360}
+@anchor{gnat_rm/the_gnat_library gnat-current-exception-g-curexc-ads}@anchor{360}@anchor{gnat_rm/the_gnat_library id56}@anchor{361}
@section @code{GNAT.Current_Exception} (@code{g-curexc.ads})
@@ -24400,7 +24412,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{361}@anchor{gnat_rm/the_gnat_library id57}@anchor{362}
+@anchor{gnat_rm/the_gnat_library gnat-debug-pools-g-debpoo-ads}@anchor{362}@anchor{gnat_rm/the_gnat_library id57}@anchor{363}
@section @code{GNAT.Debug_Pools} (@code{g-debpoo.ads})
@@ -24417,7 +24429,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{363}@anchor{gnat_rm/the_gnat_library id58}@anchor{364}
+@anchor{gnat_rm/the_gnat_library gnat-debug-utilities-g-debuti-ads}@anchor{364}@anchor{gnat_rm/the_gnat_library id58}@anchor{365}
@section @code{GNAT.Debug_Utilities} (@code{g-debuti.ads})
@@ -24430,7 +24442,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{365}@anchor{gnat_rm/the_gnat_library id59}@anchor{366}
+@anchor{gnat_rm/the_gnat_library gnat-decode-string-g-decstr-ads}@anchor{366}@anchor{gnat_rm/the_gnat_library id59}@anchor{367}
@section @code{GNAT.Decode_String} (@code{g-decstr.ads})
@@ -24454,7 +24466,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{367}@anchor{gnat_rm/the_gnat_library id60}@anchor{368}
+@anchor{gnat_rm/the_gnat_library gnat-decode-utf8-string-g-deutst-ads}@anchor{368}@anchor{gnat_rm/the_gnat_library id60}@anchor{369}
@section @code{GNAT.Decode_UTF8_String} (@code{g-deutst.ads})
@@ -24475,7 +24487,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 gnat-directory-operations-g-dirope-ads}@anchor{369}@anchor{gnat_rm/the_gnat_library id61}@anchor{36a}
+@anchor{gnat_rm/the_gnat_library gnat-directory-operations-g-dirope-ads}@anchor{36a}@anchor{gnat_rm/the_gnat_library id61}@anchor{36b}
@section @code{GNAT.Directory_Operations} (@code{g-dirope.ads})
@@ -24488,7 +24500,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 gnat-directory-operations-iteration-g-diopit-ads}@anchor{36b}@anchor{gnat_rm/the_gnat_library id62}@anchor{36c}
+@anchor{gnat_rm/the_gnat_library gnat-directory-operations-iteration-g-diopit-ads}@anchor{36c}@anchor{gnat_rm/the_gnat_library id62}@anchor{36d}
@section @code{GNAT.Directory_Operations.Iteration} (@code{g-diopit.ads})
@@ -24500,7 +24512,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 gnat-dynamic-htables-g-dynhta-ads}@anchor{36d}@anchor{gnat_rm/the_gnat_library id63}@anchor{36e}
+@anchor{gnat_rm/the_gnat_library gnat-dynamic-htables-g-dynhta-ads}@anchor{36e}@anchor{gnat_rm/the_gnat_library id63}@anchor{36f}
@section @code{GNAT.Dynamic_HTables} (@code{g-dynhta.ads})
@@ -24518,7 +24530,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{36f}@anchor{gnat_rm/the_gnat_library id64}@anchor{370}
+@anchor{gnat_rm/the_gnat_library gnat-dynamic-tables-g-dyntab-ads}@anchor{370}@anchor{gnat_rm/the_gnat_library id64}@anchor{371}
@section @code{GNAT.Dynamic_Tables} (@code{g-dyntab.ads})
@@ -24538,7 +24550,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 gnat-encode-string-g-encstr-ads}@anchor{371}@anchor{gnat_rm/the_gnat_library id65}@anchor{372}
+@anchor{gnat_rm/the_gnat_library gnat-encode-string-g-encstr-ads}@anchor{372}@anchor{gnat_rm/the_gnat_library id65}@anchor{373}
@section @code{GNAT.Encode_String} (@code{g-encstr.ads})
@@ -24560,7 +24572,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{373}@anchor{gnat_rm/the_gnat_library id66}@anchor{374}
+@anchor{gnat_rm/the_gnat_library gnat-encode-utf8-string-g-enutst-ads}@anchor{374}@anchor{gnat_rm/the_gnat_library id66}@anchor{375}
@section @code{GNAT.Encode_UTF8_String} (@code{g-enutst.ads})
@@ -24581,7 +24593,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{375}@anchor{gnat_rm/the_gnat_library id67}@anchor{376}
+@anchor{gnat_rm/the_gnat_library gnat-exception-actions-g-excact-ads}@anchor{376}@anchor{gnat_rm/the_gnat_library id67}@anchor{377}
@section @code{GNAT.Exception_Actions} (@code{g-excact.ads})
@@ -24594,7 +24606,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{377}@anchor{gnat_rm/the_gnat_library id68}@anchor{378}
+@anchor{gnat_rm/the_gnat_library gnat-exception-traces-g-exctra-ads}@anchor{378}@anchor{gnat_rm/the_gnat_library id68}@anchor{379}
@section @code{GNAT.Exception_Traces} (@code{g-exctra.ads})
@@ -24608,7 +24620,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 gnat-exceptions-g-except-ads}@anchor{379}@anchor{gnat_rm/the_gnat_library id69}@anchor{37a}
+@anchor{gnat_rm/the_gnat_library gnat-exceptions-g-except-ads}@anchor{37a}@anchor{gnat_rm/the_gnat_library id69}@anchor{37b}
@section @code{GNAT.Exceptions} (@code{g-except.ads})
@@ -24629,7 +24641,7 @@ predefined exceptions, and for example allows 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 gnat-expect-g-expect-ads}@anchor{37b}@anchor{gnat_rm/the_gnat_library id70}@anchor{37c}
+@anchor{gnat_rm/the_gnat_library gnat-expect-g-expect-ads}@anchor{37c}@anchor{gnat_rm/the_gnat_library id70}@anchor{37d}
@section @code{GNAT.Expect} (@code{g-expect.ads})
@@ -24645,7 +24657,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 gnat-expect-tty-g-exptty-ads}@anchor{37d}@anchor{gnat_rm/the_gnat_library id71}@anchor{37e}
+@anchor{gnat_rm/the_gnat_library gnat-expect-tty-g-exptty-ads}@anchor{37e}@anchor{gnat_rm/the_gnat_library id71}@anchor{37f}
@section @code{GNAT.Expect.TTY} (@code{g-exptty.ads})
@@ -24657,7 +24669,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 gnat-float-control-g-flocon-ads}@anchor{37f}@anchor{gnat_rm/the_gnat_library id72}@anchor{380}
+@anchor{gnat_rm/the_gnat_library gnat-float-control-g-flocon-ads}@anchor{380}@anchor{gnat_rm/the_gnat_library id72}@anchor{381}
@section @code{GNAT.Float_Control} (@code{g-flocon.ads})
@@ -24671,7 +24683,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 Generic_Fast_Math_Functions g-gfmafu ads,GNAT Float_Control g-flocon ads,The GNAT Library
-@anchor{gnat_rm/the_gnat_library gnat-formatted-string-g-forstr-ads}@anchor{381}@anchor{gnat_rm/the_gnat_library id73}@anchor{382}
+@anchor{gnat_rm/the_gnat_library gnat-formatted-string-g-forstr-ads}@anchor{382}@anchor{gnat_rm/the_gnat_library id73}@anchor{383}
@section @code{GNAT.Formatted_String} (@code{g-forstr.ads})
@@ -24686,7 +24698,7 @@ derived from Integer, Float or enumerations as values for the
formatted string.
@node GNAT Generic_Fast_Math_Functions g-gfmafu ads,GNAT Heap_Sort g-heasor ads,GNAT Formatted_String g-forstr ads,The GNAT Library
-@anchor{gnat_rm/the_gnat_library gnat-generic-fast-math-functions-g-gfmafu-ads}@anchor{383}@anchor{gnat_rm/the_gnat_library id74}@anchor{384}
+@anchor{gnat_rm/the_gnat_library gnat-generic-fast-math-functions-g-gfmafu-ads}@anchor{384}@anchor{gnat_rm/the_gnat_library id74}@anchor{385}
@section @code{GNAT.Generic_Fast_Math_Functions} (@code{g-gfmafu.ads})
@@ -24704,7 +24716,7 @@ have a vector implementation that can be automatically used by the
compiler when auto-vectorization is enabled.
@node GNAT Heap_Sort g-heasor ads,GNAT Heap_Sort_A g-hesora ads,GNAT Generic_Fast_Math_Functions g-gfmafu ads,The GNAT Library
-@anchor{gnat_rm/the_gnat_library gnat-heap-sort-g-heasor-ads}@anchor{385}@anchor{gnat_rm/the_gnat_library id75}@anchor{386}
+@anchor{gnat_rm/the_gnat_library gnat-heap-sort-g-heasor-ads}@anchor{386}@anchor{gnat_rm/the_gnat_library id75}@anchor{387}
@section @code{GNAT.Heap_Sort} (@code{g-heasor.ads})
@@ -24718,7 +24730,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{387}@anchor{gnat_rm/the_gnat_library id76}@anchor{388}
+@anchor{gnat_rm/the_gnat_library gnat-heap-sort-a-g-hesora-ads}@anchor{388}@anchor{gnat_rm/the_gnat_library id76}@anchor{389}
@section @code{GNAT.Heap_Sort_A} (@code{g-hesora.ads})
@@ -24734,7 +24746,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 gnat-heap-sort-g-g-hesorg-ads}@anchor{389}@anchor{gnat_rm/the_gnat_library id77}@anchor{38a}
+@anchor{gnat_rm/the_gnat_library gnat-heap-sort-g-g-hesorg-ads}@anchor{38a}@anchor{gnat_rm/the_gnat_library id77}@anchor{38b}
@section @code{GNAT.Heap_Sort_G} (@code{g-hesorg.ads})
@@ -24748,7 +24760,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 gnat-htable-g-htable-ads}@anchor{38b}@anchor{gnat_rm/the_gnat_library id78}@anchor{38c}
+@anchor{gnat_rm/the_gnat_library gnat-htable-g-htable-ads}@anchor{38c}@anchor{gnat_rm/the_gnat_library id78}@anchor{38d}
@section @code{GNAT.HTable} (@code{g-htable.ads})
@@ -24761,7 +24773,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 gnat-io-g-io-ads}@anchor{38d}@anchor{gnat_rm/the_gnat_library id79}@anchor{38e}
+@anchor{gnat_rm/the_gnat_library gnat-io-g-io-ads}@anchor{38e}@anchor{gnat_rm/the_gnat_library id79}@anchor{38f}
@section @code{GNAT.IO} (@code{g-io.ads})
@@ -24777,7 +24789,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 gnat-io-aux-g-io-aux-ads}@anchor{38f}@anchor{gnat_rm/the_gnat_library id80}@anchor{390}
+@anchor{gnat_rm/the_gnat_library gnat-io-aux-g-io-aux-ads}@anchor{390}@anchor{gnat_rm/the_gnat_library id80}@anchor{391}
@section @code{GNAT.IO_Aux} (@code{g-io_aux.ads})
@@ -24791,7 +24803,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 gnat-lock-files-g-locfil-ads}@anchor{391}@anchor{gnat_rm/the_gnat_library id81}@anchor{392}
+@anchor{gnat_rm/the_gnat_library gnat-lock-files-g-locfil-ads}@anchor{392}@anchor{gnat_rm/the_gnat_library id81}@anchor{393}
@section @code{GNAT.Lock_Files} (@code{g-locfil.ads})
@@ -24805,7 +24817,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 gnat-mbbs-discrete-random-g-mbdira-ads}@anchor{393}@anchor{gnat_rm/the_gnat_library id82}@anchor{394}
+@anchor{gnat_rm/the_gnat_library gnat-mbbs-discrete-random-g-mbdira-ads}@anchor{394}@anchor{gnat_rm/the_gnat_library id82}@anchor{395}
@section @code{GNAT.MBBS_Discrete_Random} (@code{g-mbdira.ads})
@@ -24817,7 +24829,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 gnat-mbbs-float-random-g-mbflra-ads}@anchor{395}@anchor{gnat_rm/the_gnat_library id83}@anchor{396}
+@anchor{gnat_rm/the_gnat_library gnat-mbbs-float-random-g-mbflra-ads}@anchor{396}@anchor{gnat_rm/the_gnat_library id83}@anchor{397}
@section @code{GNAT.MBBS_Float_Random} (@code{g-mbflra.ads})
@@ -24829,7 +24841,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 gnat-md5-g-md5-ads}@anchor{397}@anchor{gnat_rm/the_gnat_library id84}@anchor{398}
+@anchor{gnat_rm/the_gnat_library gnat-md5-g-md5-ads}@anchor{398}@anchor{gnat_rm/the_gnat_library id84}@anchor{399}
@section @code{GNAT.MD5} (@code{g-md5.ads})
@@ -24842,7 +24854,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 gnat-memory-dump-g-memdum-ads}@anchor{399}@anchor{gnat_rm/the_gnat_library id85}@anchor{39a}
+@anchor{gnat_rm/the_gnat_library gnat-memory-dump-g-memdum-ads}@anchor{39a}@anchor{gnat_rm/the_gnat_library id85}@anchor{39b}
@section @code{GNAT.Memory_Dump} (@code{g-memdum.ads})
@@ -24855,7 +24867,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{39b}@anchor{gnat_rm/the_gnat_library id86}@anchor{39c}
+@anchor{gnat_rm/the_gnat_library gnat-most-recent-exception-g-moreex-ads}@anchor{39c}@anchor{gnat_rm/the_gnat_library id86}@anchor{39d}
@section @code{GNAT.Most_Recent_Exception} (@code{g-moreex.ads})
@@ -24869,7 +24881,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{39d}@anchor{gnat_rm/the_gnat_library id87}@anchor{39e}
+@anchor{gnat_rm/the_gnat_library gnat-os-lib-g-os-lib-ads}@anchor{39e}@anchor{gnat_rm/the_gnat_library id87}@anchor{39f}
@section @code{GNAT.OS_Lib} (@code{g-os_lib.ads})
@@ -24885,7 +24897,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{39f}@anchor{gnat_rm/the_gnat_library id88}@anchor{3a0}
+@anchor{gnat_rm/the_gnat_library gnat-perfect-hash-generators-g-pehage-ads}@anchor{3a0}@anchor{gnat_rm/the_gnat_library id88}@anchor{3a1}
@section @code{GNAT.Perfect_Hash_Generators} (@code{g-pehage.ads})
@@ -24903,7 +24915,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{3a1}@anchor{gnat_rm/the_gnat_library id89}@anchor{3a2}
+@anchor{gnat_rm/the_gnat_library gnat-random-numbers-g-rannum-ads}@anchor{3a2}@anchor{gnat_rm/the_gnat_library id89}@anchor{3a3}
@section @code{GNAT.Random_Numbers} (@code{g-rannum.ads})
@@ -24917,7 +24929,7 @@ however NOT suitable for situations requiring cryptographically secure
randomness.
@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 gnat-regexp-g-regexp-ads}@anchor{278}@anchor{gnat_rm/the_gnat_library id90}@anchor{3a3}
+@anchor{gnat_rm/the_gnat_library gnat-regexp-g-regexp-ads}@anchor{279}@anchor{gnat_rm/the_gnat_library id90}@anchor{3a4}
@section @code{GNAT.Regexp} (@code{g-regexp.ads})
@@ -24933,7 +24945,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 gnat-registry-g-regist-ads}@anchor{3a4}@anchor{gnat_rm/the_gnat_library id91}@anchor{3a5}
+@anchor{gnat_rm/the_gnat_library gnat-registry-g-regist-ads}@anchor{3a5}@anchor{gnat_rm/the_gnat_library id91}@anchor{3a6}
@section @code{GNAT.Registry} (@code{g-regist.ads})
@@ -24947,7 +24959,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 gnat-regpat-g-regpat-ads}@anchor{3a6}@anchor{gnat_rm/the_gnat_library id92}@anchor{3a7}
+@anchor{gnat_rm/the_gnat_library gnat-regpat-g-regpat-ads}@anchor{3a7}@anchor{gnat_rm/the_gnat_library id92}@anchor{3a8}
@section @code{GNAT.Regpat} (@code{g-regpat.ads})
@@ -24962,7 +24974,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 gnat-rewrite-data-g-rewdat-ads}@anchor{3a8}@anchor{gnat_rm/the_gnat_library id93}@anchor{3a9}
+@anchor{gnat_rm/the_gnat_library gnat-rewrite-data-g-rewdat-ads}@anchor{3a9}@anchor{gnat_rm/the_gnat_library id93}@anchor{3aa}
@section @code{GNAT.Rewrite_Data} (@code{g-rewdat.ads})
@@ -24976,7 +24988,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{3aa}@anchor{gnat_rm/the_gnat_library id94}@anchor{3ab}
+@anchor{gnat_rm/the_gnat_library gnat-secondary-stack-info-g-sestin-ads}@anchor{3ab}@anchor{gnat_rm/the_gnat_library id94}@anchor{3ac}
@section @code{GNAT.Secondary_Stack_Info} (@code{g-sestin.ads})
@@ -24988,7 +25000,7 @@ Provides 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 gnat-semaphores-g-semaph-ads}@anchor{3ac}@anchor{gnat_rm/the_gnat_library id95}@anchor{3ad}
+@anchor{gnat_rm/the_gnat_library gnat-semaphores-g-semaph-ads}@anchor{3ad}@anchor{gnat_rm/the_gnat_library id95}@anchor{3ae}
@section @code{GNAT.Semaphores} (@code{g-semaph.ads})
@@ -24999,7 +25011,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{3ae}@anchor{gnat_rm/the_gnat_library id96}@anchor{3af}
+@anchor{gnat_rm/the_gnat_library gnat-serial-communications-g-sercom-ads}@anchor{3af}@anchor{gnat_rm/the_gnat_library id96}@anchor{3b0}
@section @code{GNAT.Serial_Communications} (@code{g-sercom.ads})
@@ -25011,7 +25023,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{3b0}@anchor{gnat_rm/the_gnat_library id97}@anchor{3b1}
+@anchor{gnat_rm/the_gnat_library gnat-sha1-g-sha1-ads}@anchor{3b1}@anchor{gnat_rm/the_gnat_library id97}@anchor{3b2}
@section @code{GNAT.SHA1} (@code{g-sha1.ads})
@@ -25024,7 +25036,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{3b2}@anchor{gnat_rm/the_gnat_library id98}@anchor{3b3}
+@anchor{gnat_rm/the_gnat_library gnat-sha224-g-sha224-ads}@anchor{3b3}@anchor{gnat_rm/the_gnat_library id98}@anchor{3b4}
@section @code{GNAT.SHA224} (@code{g-sha224.ads})
@@ -25037,7 +25049,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{3b4}@anchor{gnat_rm/the_gnat_library id99}@anchor{3b5}
+@anchor{gnat_rm/the_gnat_library gnat-sha256-g-sha256-ads}@anchor{3b5}@anchor{gnat_rm/the_gnat_library id99}@anchor{3b6}
@section @code{GNAT.SHA256} (@code{g-sha256.ads})
@@ -25050,7 +25062,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 gnat-sha384-g-sha384-ads}@anchor{3b6}@anchor{gnat_rm/the_gnat_library id100}@anchor{3b7}
+@anchor{gnat_rm/the_gnat_library gnat-sha384-g-sha384-ads}@anchor{3b7}@anchor{gnat_rm/the_gnat_library id100}@anchor{3b8}
@section @code{GNAT.SHA384} (@code{g-sha384.ads})
@@ -25063,7 +25075,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 gnat-sha512-g-sha512-ads}@anchor{3b8}@anchor{gnat_rm/the_gnat_library id101}@anchor{3b9}
+@anchor{gnat_rm/the_gnat_library gnat-sha512-g-sha512-ads}@anchor{3b9}@anchor{gnat_rm/the_gnat_library id101}@anchor{3ba}
@section @code{GNAT.SHA512} (@code{g-sha512.ads})
@@ -25076,7 +25088,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{3ba}@anchor{gnat_rm/the_gnat_library id102}@anchor{3bb}
+@anchor{gnat_rm/the_gnat_library gnat-signals-g-signal-ads}@anchor{3bb}@anchor{gnat_rm/the_gnat_library id102}@anchor{3bc}
@section @code{GNAT.Signals} (@code{g-signal.ads})
@@ -25088,7 +25100,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{3bc}@anchor{gnat_rm/the_gnat_library id103}@anchor{3bd}
+@anchor{gnat_rm/the_gnat_library gnat-sockets-g-socket-ads}@anchor{3bd}@anchor{gnat_rm/the_gnat_library id103}@anchor{3be}
@section @code{GNAT.Sockets} (@code{g-socket.ads})
@@ -25103,7 +25115,7 @@ on all native GNAT ports and on VxWorks cross ports. 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{3be}@anchor{gnat_rm/the_gnat_library id104}@anchor{3bf}
+@anchor{gnat_rm/the_gnat_library gnat-source-info-g-souinf-ads}@anchor{3bf}@anchor{gnat_rm/the_gnat_library id104}@anchor{3c0}
@section @code{GNAT.Source_Info} (@code{g-souinf.ads})
@@ -25117,7 +25129,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{3c0}@anchor{gnat_rm/the_gnat_library id105}@anchor{3c1}
+@anchor{gnat_rm/the_gnat_library gnat-spelling-checker-g-speche-ads}@anchor{3c1}@anchor{gnat_rm/the_gnat_library id105}@anchor{3c2}
@section @code{GNAT.Spelling_Checker} (@code{g-speche.ads})
@@ -25129,7 +25141,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{3c2}@anchor{gnat_rm/the_gnat_library id106}@anchor{3c3}
+@anchor{gnat_rm/the_gnat_library gnat-spelling-checker-generic-g-spchge-ads}@anchor{3c3}@anchor{gnat_rm/the_gnat_library id106}@anchor{3c4}
@section @code{GNAT.Spelling_Checker_Generic} (@code{g-spchge.ads})
@@ -25142,7 +25154,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{3c4}@anchor{gnat_rm/the_gnat_library id107}@anchor{3c5}
+@anchor{gnat_rm/the_gnat_library gnat-spitbol-patterns-g-spipat-ads}@anchor{3c5}@anchor{gnat_rm/the_gnat_library id107}@anchor{3c6}
@section @code{GNAT.Spitbol.Patterns} (@code{g-spipat.ads})
@@ -25158,7 +25170,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 gnat-spitbol-g-spitbo-ads}@anchor{3c6}@anchor{gnat_rm/the_gnat_library id108}@anchor{3c7}
+@anchor{gnat_rm/the_gnat_library gnat-spitbol-g-spitbo-ads}@anchor{3c7}@anchor{gnat_rm/the_gnat_library id108}@anchor{3c8}
@section @code{GNAT.Spitbol} (@code{g-spitbo.ads})
@@ -25173,7 +25185,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{3c8}@anchor{gnat_rm/the_gnat_library id109}@anchor{3c9}
+@anchor{gnat_rm/the_gnat_library gnat-spitbol-table-boolean-g-sptabo-ads}@anchor{3c9}@anchor{gnat_rm/the_gnat_library id109}@anchor{3ca}
@section @code{GNAT.Spitbol.Table_Boolean} (@code{g-sptabo.ads})
@@ -25188,7 +25200,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{3ca}@anchor{gnat_rm/the_gnat_library id110}@anchor{3cb}
+@anchor{gnat_rm/the_gnat_library gnat-spitbol-table-integer-g-sptain-ads}@anchor{3cb}@anchor{gnat_rm/the_gnat_library id110}@anchor{3cc}
@section @code{GNAT.Spitbol.Table_Integer} (@code{g-sptain.ads})
@@ -25205,7 +25217,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 gnat-spitbol-table-vstring-g-sptavs-ads}@anchor{3cc}@anchor{gnat_rm/the_gnat_library id111}@anchor{3cd}
+@anchor{gnat_rm/the_gnat_library gnat-spitbol-table-vstring-g-sptavs-ads}@anchor{3cd}@anchor{gnat_rm/the_gnat_library id111}@anchor{3ce}
@section @code{GNAT.Spitbol.Table_VString} (@code{g-sptavs.ads})
@@ -25222,7 +25234,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 gnat-sse-g-sse-ads}@anchor{3ce}@anchor{gnat_rm/the_gnat_library id112}@anchor{3cf}
+@anchor{gnat_rm/the_gnat_library gnat-sse-g-sse-ads}@anchor{3cf}@anchor{gnat_rm/the_gnat_library id112}@anchor{3d0}
@section @code{GNAT.SSE} (@code{g-sse.ads})
@@ -25234,7 +25246,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{3d0}@anchor{gnat_rm/the_gnat_library id113}@anchor{3d1}
+@anchor{gnat_rm/the_gnat_library gnat-sse-vector-types-g-ssvety-ads}@anchor{3d1}@anchor{gnat_rm/the_gnat_library id113}@anchor{3d2}
@section @code{GNAT.SSE.Vector_Types} (@code{g-ssvety.ads})
@@ -25243,7 +25255,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{3d2}@anchor{gnat_rm/the_gnat_library id114}@anchor{3d3}
+@anchor{gnat_rm/the_gnat_library gnat-string-hash-g-strhas-ads}@anchor{3d3}@anchor{gnat_rm/the_gnat_library id114}@anchor{3d4}
@section @code{GNAT.String_Hash} (@code{g-strhas.ads})
@@ -25255,7 +25267,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 gnat-strings-g-string-ads}@anchor{3d4}@anchor{gnat_rm/the_gnat_library id115}@anchor{3d5}
+@anchor{gnat_rm/the_gnat_library gnat-strings-g-string-ads}@anchor{3d5}@anchor{gnat_rm/the_gnat_library id115}@anchor{3d6}
@section @code{GNAT.Strings} (@code{g-string.ads})
@@ -25265,7 +25277,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{3d6}@anchor{gnat_rm/the_gnat_library id116}@anchor{3d7}
+@anchor{gnat_rm/the_gnat_library gnat-string-split-g-strspl-ads}@anchor{3d7}@anchor{gnat_rm/the_gnat_library id116}@anchor{3d8}
@section @code{GNAT.String_Split} (@code{g-strspl.ads})
@@ -25279,7 +25291,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 gnat-table-g-table-ads}@anchor{3d8}@anchor{gnat_rm/the_gnat_library id117}@anchor{3d9}
+@anchor{gnat_rm/the_gnat_library gnat-table-g-table-ads}@anchor{3d9}@anchor{gnat_rm/the_gnat_library id117}@anchor{3da}
@section @code{GNAT.Table} (@code{g-table.ads})
@@ -25299,7 +25311,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 gnat-task-lock-g-tasloc-ads}@anchor{3da}@anchor{gnat_rm/the_gnat_library id118}@anchor{3db}
+@anchor{gnat_rm/the_gnat_library gnat-task-lock-g-tasloc-ads}@anchor{3db}@anchor{gnat_rm/the_gnat_library id118}@anchor{3dc}
@section @code{GNAT.Task_Lock} (@code{g-tasloc.ads})
@@ -25316,7 +25328,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 gnat-time-stamp-g-timsta-ads}@anchor{3dc}@anchor{gnat_rm/the_gnat_library id119}@anchor{3dd}
+@anchor{gnat_rm/the_gnat_library gnat-time-stamp-g-timsta-ads}@anchor{3dd}@anchor{gnat_rm/the_gnat_library id119}@anchor{3de}
@section @code{GNAT.Time_Stamp} (@code{g-timsta.ads})
@@ -25331,7 +25343,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{3de}@anchor{gnat_rm/the_gnat_library id120}@anchor{3df}
+@anchor{gnat_rm/the_gnat_library gnat-threads-g-thread-ads}@anchor{3df}@anchor{gnat_rm/the_gnat_library id120}@anchor{3e0}
@section @code{GNAT.Threads} (@code{g-thread.ads})
@@ -25348,7 +25360,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 gnat-traceback-g-traceb-ads}@anchor{3e0}@anchor{gnat_rm/the_gnat_library id121}@anchor{3e1}
+@anchor{gnat_rm/the_gnat_library gnat-traceback-g-traceb-ads}@anchor{3e1}@anchor{gnat_rm/the_gnat_library id121}@anchor{3e2}
@section @code{GNAT.Traceback} (@code{g-traceb.ads})
@@ -25360,7 +25372,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-utf_32 ads,GNAT Traceback g-traceb ads,The GNAT Library
-@anchor{gnat_rm/the_gnat_library gnat-traceback-symbolic-g-trasym-ads}@anchor{3e2}@anchor{gnat_rm/the_gnat_library id122}@anchor{3e3}
+@anchor{gnat_rm/the_gnat_library gnat-traceback-symbolic-g-trasym-ads}@anchor{3e3}@anchor{gnat_rm/the_gnat_library id122}@anchor{3e4}
@section @code{GNAT.Traceback.Symbolic} (@code{g-trasym.ads})
@@ -25369,7 +25381,7 @@ in various debugging situations.
@geindex Trace back facilities
@node GNAT UTF_32 g-utf_32 ads,GNAT UTF_32_Spelling_Checker g-u3spch ads,GNAT Traceback Symbolic g-trasym ads,The GNAT Library
-@anchor{gnat_rm/the_gnat_library gnat-utf-32-g-utf-32-ads}@anchor{3e4}@anchor{gnat_rm/the_gnat_library id123}@anchor{3e5}
+@anchor{gnat_rm/the_gnat_library gnat-utf-32-g-utf-32-ads}@anchor{3e5}@anchor{gnat_rm/the_gnat_library id123}@anchor{3e6}
@section @code{GNAT.UTF_32} (@code{g-utf_32.ads})
@@ -25388,7 +25400,7 @@ lower case to upper case fold routine corresponding to
the Ada 2005 rules for identifier equivalence.
@node GNAT UTF_32_Spelling_Checker g-u3spch ads,GNAT Wide_Spelling_Checker g-wispch ads,GNAT UTF_32 g-utf_32 ads,The GNAT Library
-@anchor{gnat_rm/the_gnat_library gnat-utf-32-spelling-checker-g-u3spch-ads}@anchor{3e6}@anchor{gnat_rm/the_gnat_library id124}@anchor{3e7}
+@anchor{gnat_rm/the_gnat_library gnat-utf-32-spelling-checker-g-u3spch-ads}@anchor{3e7}@anchor{gnat_rm/the_gnat_library id124}@anchor{3e8}
@section @code{GNAT.UTF_32_Spelling_Checker} (@code{g-u3spch.ads})
@@ -25401,7 +25413,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 UTF_32_Spelling_Checker g-u3spch ads,The GNAT Library
-@anchor{gnat_rm/the_gnat_library gnat-wide-spelling-checker-g-wispch-ads}@anchor{3e8}@anchor{gnat_rm/the_gnat_library id125}@anchor{3e9}
+@anchor{gnat_rm/the_gnat_library gnat-wide-spelling-checker-g-wispch-ads}@anchor{3e9}@anchor{gnat_rm/the_gnat_library id125}@anchor{3ea}
@section @code{GNAT.Wide_Spelling_Checker} (@code{g-wispch.ads})
@@ -25413,7 +25425,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 gnat-wide-string-split-g-wistsp-ads}@anchor{3ea}@anchor{gnat_rm/the_gnat_library id126}@anchor{3eb}
+@anchor{gnat_rm/the_gnat_library gnat-wide-string-split-g-wistsp-ads}@anchor{3eb}@anchor{gnat_rm/the_gnat_library id126}@anchor{3ec}
@section @code{GNAT.Wide_String_Split} (@code{g-wistsp.ads})
@@ -25427,7 +25439,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{3ec}@anchor{gnat_rm/the_gnat_library id127}@anchor{3ed}
+@anchor{gnat_rm/the_gnat_library gnat-wide-wide-spelling-checker-g-zspche-ads}@anchor{3ed}@anchor{gnat_rm/the_gnat_library id127}@anchor{3ee}
@section @code{GNAT.Wide_Wide_Spelling_Checker} (@code{g-zspche.ads})
@@ -25439,7 +25451,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{3ee}@anchor{gnat_rm/the_gnat_library id128}@anchor{3ef}
+@anchor{gnat_rm/the_gnat_library gnat-wide-wide-string-split-g-zistsp-ads}@anchor{3ef}@anchor{gnat_rm/the_gnat_library id128}@anchor{3f0}
@section @code{GNAT.Wide_Wide_String_Split} (@code{g-zistsp.ads})
@@ -25453,7 +25465,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 id129}@anchor{3f0}@anchor{gnat_rm/the_gnat_library interfaces-c-extensions-i-cexten-ads}@anchor{3f1}
+@anchor{gnat_rm/the_gnat_library id129}@anchor{3f1}@anchor{gnat_rm/the_gnat_library interfaces-c-extensions-i-cexten-ads}@anchor{3f2}
@section @code{Interfaces.C.Extensions} (@code{i-cexten.ads})
@@ -25464,7 +25476,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 id130}@anchor{3f2}@anchor{gnat_rm/the_gnat_library interfaces-c-streams-i-cstrea-ads}@anchor{3f3}
+@anchor{gnat_rm/the_gnat_library id130}@anchor{3f3}@anchor{gnat_rm/the_gnat_library interfaces-c-streams-i-cstrea-ads}@anchor{3f4}
@section @code{Interfaces.C.Streams} (@code{i-cstrea.ads})
@@ -25477,7 +25489,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 id131}@anchor{3f4}@anchor{gnat_rm/the_gnat_library interfaces-packed-decimal-i-pacdec-ads}@anchor{3f5}
+@anchor{gnat_rm/the_gnat_library id131}@anchor{3f5}@anchor{gnat_rm/the_gnat_library interfaces-packed-decimal-i-pacdec-ads}@anchor{3f6}
@section @code{Interfaces.Packed_Decimal} (@code{i-pacdec.ads})
@@ -25492,7 +25504,7 @@ from a packed decimal format compatible with that used on IBM
mainframes.
@node Interfaces VxWorks i-vxwork ads,Interfaces VxWorks IO i-vxwoio ads,Interfaces Packed_Decimal i-pacdec ads,The GNAT Library
-@anchor{gnat_rm/the_gnat_library id132}@anchor{3f6}@anchor{gnat_rm/the_gnat_library interfaces-vxworks-i-vxwork-ads}@anchor{3f7}
+@anchor{gnat_rm/the_gnat_library id132}@anchor{3f7}@anchor{gnat_rm/the_gnat_library interfaces-vxworks-i-vxwork-ads}@anchor{3f8}
@section @code{Interfaces.VxWorks} (@code{i-vxwork.ads})
@@ -25506,7 +25518,7 @@ mainframes.
This package provides a limited binding to the VxWorks API.
@node Interfaces VxWorks IO i-vxwoio ads,System Address_Image s-addima ads,Interfaces VxWorks i-vxwork ads,The GNAT Library
-@anchor{gnat_rm/the_gnat_library id133}@anchor{3f8}@anchor{gnat_rm/the_gnat_library interfaces-vxworks-io-i-vxwoio-ads}@anchor{3f9}
+@anchor{gnat_rm/the_gnat_library id133}@anchor{3f9}@anchor{gnat_rm/the_gnat_library interfaces-vxworks-io-i-vxwoio-ads}@anchor{3fa}
@section @code{Interfaces.VxWorks.IO} (@code{i-vxwoio.ads})
@@ -25529,7 +25541,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 id134}@anchor{3fa}@anchor{gnat_rm/the_gnat_library system-address-image-s-addima-ads}@anchor{3fb}
+@anchor{gnat_rm/the_gnat_library id134}@anchor{3fb}@anchor{gnat_rm/the_gnat_library system-address-image-s-addima-ads}@anchor{3fc}
@section @code{System.Address_Image} (@code{s-addima.ads})
@@ -25545,7 +25557,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 id135}@anchor{3fc}@anchor{gnat_rm/the_gnat_library system-assertions-s-assert-ads}@anchor{3fd}
+@anchor{gnat_rm/the_gnat_library id135}@anchor{3fd}@anchor{gnat_rm/the_gnat_library system-assertions-s-assert-ads}@anchor{3fe}
@section @code{System.Assertions} (@code{s-assert.ads})
@@ -25561,7 +25573,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 id136}@anchor{3fe}@anchor{gnat_rm/the_gnat_library system-atomic-counters-s-atocou-ads}@anchor{3ff}
+@anchor{gnat_rm/the_gnat_library id136}@anchor{3ff}@anchor{gnat_rm/the_gnat_library system-atomic-counters-s-atocou-ads}@anchor{400}
@section @code{System.Atomic_Counters} (@code{s-atocou.ads})
@@ -25575,7 +25587,7 @@ on most targets, including all Alpha, AARCH64, ARM, 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 id137}@anchor{400}@anchor{gnat_rm/the_gnat_library system-memory-s-memory-ads}@anchor{401}
+@anchor{gnat_rm/the_gnat_library id137}@anchor{401}@anchor{gnat_rm/the_gnat_library system-memory-s-memory-ads}@anchor{402}
@section @code{System.Memory} (@code{s-memory.ads})
@@ -25593,7 +25605,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 id138}@anchor{402}@anchor{gnat_rm/the_gnat_library system-multiprocessors-s-multip-ads}@anchor{403}
+@anchor{gnat_rm/the_gnat_library id138}@anchor{403}@anchor{gnat_rm/the_gnat_library system-multiprocessors-s-multip-ads}@anchor{404}
@section @code{System.Multiprocessors} (@code{s-multip.ads})
@@ -25606,7 +25618,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 id139}@anchor{404}@anchor{gnat_rm/the_gnat_library system-multiprocessors-dispatching-domains-s-mudido-ads}@anchor{405}
+@anchor{gnat_rm/the_gnat_library id139}@anchor{405}@anchor{gnat_rm/the_gnat_library system-multiprocessors-dispatching-domains-s-mudido-ads}@anchor{406}
@section @code{System.Multiprocessors.Dispatching_Domains} (@code{s-mudido.ads})
@@ -25619,7 +25631,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 id140}@anchor{406}@anchor{gnat_rm/the_gnat_library system-partition-interface-s-parint-ads}@anchor{407}
+@anchor{gnat_rm/the_gnat_library id140}@anchor{407}@anchor{gnat_rm/the_gnat_library system-partition-interface-s-parint-ads}@anchor{408}
@section @code{System.Partition_Interface} (@code{s-parint.ads})
@@ -25632,7 +25644,7 @@ is used primarily in a distribution context when using Annex E
with @code{PolyORB}.
@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 id141}@anchor{408}@anchor{gnat_rm/the_gnat_library system-pool-global-s-pooglo-ads}@anchor{409}
+@anchor{gnat_rm/the_gnat_library id141}@anchor{409}@anchor{gnat_rm/the_gnat_library system-pool-global-s-pooglo-ads}@anchor{40a}
@section @code{System.Pool_Global} (@code{s-pooglo.ads})
@@ -25649,7 +25661,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 id142}@anchor{40a}@anchor{gnat_rm/the_gnat_library system-pool-local-s-pooloc-ads}@anchor{40b}
+@anchor{gnat_rm/the_gnat_library id142}@anchor{40b}@anchor{gnat_rm/the_gnat_library system-pool-local-s-pooloc-ads}@anchor{40c}
@section @code{System.Pool_Local} (@code{s-pooloc.ads})
@@ -25666,7 +25678,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 id143}@anchor{40c}@anchor{gnat_rm/the_gnat_library system-restrictions-s-restri-ads}@anchor{40d}
+@anchor{gnat_rm/the_gnat_library id143}@anchor{40d}@anchor{gnat_rm/the_gnat_library system-restrictions-s-restri-ads}@anchor{40e}
@section @code{System.Restrictions} (@code{s-restri.ads})
@@ -25682,7 +25694,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 id144}@anchor{40e}@anchor{gnat_rm/the_gnat_library system-rident-s-rident-ads}@anchor{40f}
+@anchor{gnat_rm/the_gnat_library id144}@anchor{40f}@anchor{gnat_rm/the_gnat_library system-rident-s-rident-ads}@anchor{410}
@section @code{System.Rident} (@code{s-rident.ads})
@@ -25698,7 +25710,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 id145}@anchor{410}@anchor{gnat_rm/the_gnat_library system-strings-stream-ops-s-ststop-ads}@anchor{411}
+@anchor{gnat_rm/the_gnat_library id145}@anchor{411}@anchor{gnat_rm/the_gnat_library system-strings-stream-ops-s-ststop-ads}@anchor{412}
@section @code{System.Strings.Stream_Ops} (@code{s-ststop.ads})
@@ -25714,7 +25726,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 id146}@anchor{412}@anchor{gnat_rm/the_gnat_library system-unsigned-types-s-unstyp-ads}@anchor{413}
+@anchor{gnat_rm/the_gnat_library id146}@anchor{413}@anchor{gnat_rm/the_gnat_library system-unsigned-types-s-unstyp-ads}@anchor{414}
@section @code{System.Unsigned_Types} (@code{s-unstyp.ads})
@@ -25727,7 +25739,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 id147}@anchor{414}@anchor{gnat_rm/the_gnat_library system-wch-cnv-s-wchcnv-ads}@anchor{415}
+@anchor{gnat_rm/the_gnat_library id147}@anchor{415}@anchor{gnat_rm/the_gnat_library system-wch-cnv-s-wchcnv-ads}@anchor{416}
@section @code{System.Wch_Cnv} (@code{s-wchcnv.ads})
@@ -25748,7 +25760,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 id148}@anchor{416}@anchor{gnat_rm/the_gnat_library system-wch-con-s-wchcon-ads}@anchor{417}
+@anchor{gnat_rm/the_gnat_library id148}@anchor{417}@anchor{gnat_rm/the_gnat_library system-wch-con-s-wchcon-ads}@anchor{418}
@section @code{System.Wch_Con} (@code{s-wchcon.ads})
@@ -25760,7 +25772,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 doc}@anchor{418}@anchor{gnat_rm/interfacing_to_other_languages id1}@anchor{419}@anchor{gnat_rm/interfacing_to_other_languages interfacing-to-other-languages}@anchor{11}
+@anchor{gnat_rm/interfacing_to_other_languages doc}@anchor{419}@anchor{gnat_rm/interfacing_to_other_languages id1}@anchor{41a}@anchor{gnat_rm/interfacing_to_other_languages interfacing-to-other-languages}@anchor{11}
@chapter Interfacing to Other Languages
@@ -25778,7 +25790,7 @@ provided.
@end menu
@node Interfacing to C,Interfacing to C++,,Interfacing to Other Languages
-@anchor{gnat_rm/interfacing_to_other_languages id2}@anchor{41a}@anchor{gnat_rm/interfacing_to_other_languages interfacing-to-c}@anchor{41b}
+@anchor{gnat_rm/interfacing_to_other_languages id2}@anchor{41b}@anchor{gnat_rm/interfacing_to_other_languages interfacing-to-c}@anchor{41c}
@section Interfacing to C
@@ -25918,7 +25930,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 id3}@anchor{49}@anchor{gnat_rm/interfacing_to_other_languages id4}@anchor{41c}
+@anchor{gnat_rm/interfacing_to_other_languages id3}@anchor{49}@anchor{gnat_rm/interfacing_to_other_languages id4}@anchor{41d}
@section Interfacing to C++
@@ -26135,7 +26147,7 @@ builds an opaque @code{Type_Info_Ptr} to reference a @code{std::type_info}
object at a given @code{System.Address}.
@node Interfacing to COBOL,Interfacing to Fortran,Interfacing to C++,Interfacing to Other Languages
-@anchor{gnat_rm/interfacing_to_other_languages id5}@anchor{41d}@anchor{gnat_rm/interfacing_to_other_languages interfacing-to-cobol}@anchor{41e}
+@anchor{gnat_rm/interfacing_to_other_languages id5}@anchor{41e}@anchor{gnat_rm/interfacing_to_other_languages interfacing-to-cobol}@anchor{41f}
@section Interfacing to COBOL
@@ -26143,7 +26155,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{41f}@anchor{gnat_rm/interfacing_to_other_languages interfacing-to-fortran}@anchor{420}
+@anchor{gnat_rm/interfacing_to_other_languages id6}@anchor{420}@anchor{gnat_rm/interfacing_to_other_languages interfacing-to-fortran}@anchor{421}
@section Interfacing to Fortran
@@ -26153,7 +26165,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 id7}@anchor{421}@anchor{gnat_rm/interfacing_to_other_languages interfacing-to-non-gnat-ada-code}@anchor{422}
+@anchor{gnat_rm/interfacing_to_other_languages id7}@anchor{422}@anchor{gnat_rm/interfacing_to_other_languages interfacing-to-non-gnat-ada-code}@anchor{423}
@section Interfacing to non-GNAT Ada code
@@ -26177,7 +26189,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 doc}@anchor{423}@anchor{gnat_rm/specialized_needs_annexes id1}@anchor{424}@anchor{gnat_rm/specialized_needs_annexes specialized-needs-annexes}@anchor{12}
+@anchor{gnat_rm/specialized_needs_annexes doc}@anchor{424}@anchor{gnat_rm/specialized_needs_annexes id1}@anchor{425}@anchor{gnat_rm/specialized_needs_annexes specialized-needs-annexes}@anchor{12}
@chapter Specialized Needs Annexes
@@ -26215,7 +26227,7 @@ in Ada 2005) is fully implemented.
@end table
@node Implementation of Specific Ada Features,Implementation of Ada 2022 Features,Specialized Needs Annexes,Top
-@anchor{gnat_rm/implementation_of_specific_ada_features doc}@anchor{425}@anchor{gnat_rm/implementation_of_specific_ada_features id1}@anchor{426}@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{426}@anchor{gnat_rm/implementation_of_specific_ada_features id1}@anchor{427}@anchor{gnat_rm/implementation_of_specific_ada_features implementation-of-specific-ada-features}@anchor{13}
@chapter Implementation of Specific Ada Features
@@ -26234,7 +26246,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 id2}@anchor{427}@anchor{gnat_rm/implementation_of_specific_ada_features machine-code-insertions}@anchor{180}
+@anchor{gnat_rm/implementation_of_specific_ada_features id2}@anchor{428}@anchor{gnat_rm/implementation_of_specific_ada_features machine-code-insertions}@anchor{181}
@section Machine Code Insertions
@@ -26402,7 +26414,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 gnat-implementation-of-tasking}@anchor{428}@anchor{gnat_rm/implementation_of_specific_ada_features id3}@anchor{429}
+@anchor{gnat_rm/implementation_of_specific_ada_features gnat-implementation-of-tasking}@anchor{429}@anchor{gnat_rm/implementation_of_specific_ada_features id3}@anchor{42a}
@section GNAT Implementation of Tasking
@@ -26418,7 +26430,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 id4}@anchor{42a}@anchor{gnat_rm/implementation_of_specific_ada_features mapping-ada-tasks-onto-the-underlying-kernel-threads}@anchor{42b}
+@anchor{gnat_rm/implementation_of_specific_ada_features id4}@anchor{42b}@anchor{gnat_rm/implementation_of_specific_ada_features mapping-ada-tasks-onto-the-underlying-kernel-threads}@anchor{42c}
@subsection Mapping Ada Tasks onto the Underlying Kernel Threads
@@ -26487,7 +26499,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 ensuring-compliance-with-the-real-time-annex}@anchor{42c}@anchor{gnat_rm/implementation_of_specific_ada_features id5}@anchor{42d}
+@anchor{gnat_rm/implementation_of_specific_ada_features ensuring-compliance-with-the-real-time-annex}@anchor{42d}@anchor{gnat_rm/implementation_of_specific_ada_features id5}@anchor{42e}
@subsection Ensuring Compliance with the Real-Time Annex
@@ -26538,7 +26550,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{42e}
+@anchor{gnat_rm/implementation_of_specific_ada_features support-for-locking-policies}@anchor{42f}
@subsection Support for Locking Policies
@@ -26572,7 +26584,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 gnat-implementation-of-shared-passive-packages}@anchor{42f}@anchor{gnat_rm/implementation_of_specific_ada_features id6}@anchor{430}
+@anchor{gnat_rm/implementation_of_specific_ada_features gnat-implementation-of-shared-passive-packages}@anchor{430}@anchor{gnat_rm/implementation_of_specific_ada_features id6}@anchor{431}
@section GNAT Implementation of Shared Passive Packages
@@ -26670,7 +26682,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{431}@anchor{gnat_rm/implementation_of_specific_ada_features id7}@anchor{432}
+@anchor{gnat_rm/implementation_of_specific_ada_features code-generation-for-array-aggregates}@anchor{432}@anchor{gnat_rm/implementation_of_specific_ada_features id7}@anchor{433}
@section Code Generation for Array Aggregates
@@ -26701,7 +26713,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 id8}@anchor{433}@anchor{gnat_rm/implementation_of_specific_ada_features static-constant-aggregates-with-static-bounds}@anchor{434}
+@anchor{gnat_rm/implementation_of_specific_ada_features id8}@anchor{434}@anchor{gnat_rm/implementation_of_specific_ada_features static-constant-aggregates-with-static-bounds}@anchor{435}
@subsection Static constant aggregates with static bounds
@@ -26748,7 +26760,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{435}@anchor{gnat_rm/implementation_of_specific_ada_features id9}@anchor{436}
+@anchor{gnat_rm/implementation_of_specific_ada_features constant-aggregates-with-unconstrained-nominal-types}@anchor{436}@anchor{gnat_rm/implementation_of_specific_ada_features id9}@anchor{437}
@subsection Constant aggregates with unconstrained nominal types
@@ -26763,7 +26775,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 aggregates-with-static-bounds}@anchor{437}@anchor{gnat_rm/implementation_of_specific_ada_features id10}@anchor{438}
+@anchor{gnat_rm/implementation_of_specific_ada_features aggregates-with-static-bounds}@anchor{438}@anchor{gnat_rm/implementation_of_specific_ada_features id10}@anchor{439}
@subsection Aggregates with static bounds
@@ -26791,7 +26803,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 aggregates-with-nonstatic-bounds}@anchor{439}@anchor{gnat_rm/implementation_of_specific_ada_features id11}@anchor{43a}
+@anchor{gnat_rm/implementation_of_specific_ada_features aggregates-with-nonstatic-bounds}@anchor{43a}@anchor{gnat_rm/implementation_of_specific_ada_features id11}@anchor{43b}
@subsection Aggregates with nonstatic bounds
@@ -26802,7 +26814,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 aggregates-in-assignment-statements}@anchor{43b}@anchor{gnat_rm/implementation_of_specific_ada_features id12}@anchor{43c}
+@anchor{gnat_rm/implementation_of_specific_ada_features aggregates-in-assignment-statements}@anchor{43c}@anchor{gnat_rm/implementation_of_specific_ada_features id12}@anchor{43d}
@subsection Aggregates in assignment statements
@@ -26844,7 +26856,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,Image Values For Nonscalar Types,Code Generation for Array Aggregates,Implementation of Specific Ada Features
-@anchor{gnat_rm/implementation_of_specific_ada_features id13}@anchor{43d}@anchor{gnat_rm/implementation_of_specific_ada_features the-size-of-discriminated-records-with-default-discriminants}@anchor{43e}
+@anchor{gnat_rm/implementation_of_specific_ada_features id13}@anchor{43e}@anchor{gnat_rm/implementation_of_specific_ada_features the-size-of-discriminated-records-with-default-discriminants}@anchor{43f}
@section The Size of Discriminated Records with Default Discriminants
@@ -26924,7 +26936,7 @@ say) must be consistent, so it is imperative that the object, once created,
remain invariant.
@node Image Values For Nonscalar Types,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 id14}@anchor{43f}@anchor{gnat_rm/implementation_of_specific_ada_features image-values-for-nonscalar-types}@anchor{440}
+@anchor{gnat_rm/implementation_of_specific_ada_features id14}@anchor{440}@anchor{gnat_rm/implementation_of_specific_ada_features image-values-for-nonscalar-types}@anchor{441}
@section Image Values For Nonscalar Types
@@ -26944,7 +26956,7 @@ control of image text is required for some type T, then T’Put_Image should be
explicitly specified.
@node Strict Conformance to the Ada Reference Manual,,Image Values For Nonscalar Types,Implementation of Specific Ada Features
-@anchor{gnat_rm/implementation_of_specific_ada_features id15}@anchor{441}@anchor{gnat_rm/implementation_of_specific_ada_features strict-conformance-to-the-ada-reference-manual}@anchor{442}
+@anchor{gnat_rm/implementation_of_specific_ada_features id15}@anchor{442}@anchor{gnat_rm/implementation_of_specific_ada_features strict-conformance-to-the-ada-reference-manual}@anchor{443}
@section Strict Conformance to the Ada Reference Manual
@@ -26971,7 +26983,7 @@ behavior (although at the cost of a significant performance penalty), so
infinite and NaN values are properly generated.
@node Implementation of Ada 2022 Features,GNAT language extensions,Implementation of Specific Ada Features,Top
-@anchor{gnat_rm/implementation_of_ada_2022_features doc}@anchor{443}@anchor{gnat_rm/implementation_of_ada_2022_features id1}@anchor{444}@anchor{gnat_rm/implementation_of_ada_2022_features implementation-of-ada-2022-features}@anchor{14}
+@anchor{gnat_rm/implementation_of_ada_2022_features doc}@anchor{444}@anchor{gnat_rm/implementation_of_ada_2022_features id1}@anchor{445}@anchor{gnat_rm/implementation_of_ada_2022_features implementation-of-ada-2022-features}@anchor{14}
@chapter Implementation of Ada 2022 Features
@@ -30390,7 +30402,7 @@ RM references: 3.02.04 (31/5) 4.06 (51.1/5)
@end itemize
@node GNAT language extensions,Security Hardening Features,Implementation of Ada 2022 Features,Top
-@anchor{gnat_rm/gnat_language_extensions doc}@anchor{445}@anchor{gnat_rm/gnat_language_extensions gnat-language-extensions}@anchor{446}@anchor{gnat_rm/gnat_language_extensions id1}@anchor{447}
+@anchor{gnat_rm/gnat_language_extensions doc}@anchor{446}@anchor{gnat_rm/gnat_language_extensions gnat-language-extensions}@anchor{447}@anchor{gnat_rm/gnat_language_extensions id1}@anchor{448}
@chapter GNAT language extensions
@@ -30422,7 +30434,7 @@ These features might be removed or heavily modified at any time.
@end menu
@node How to activate the extended GNAT Ada superset,Curated Extensions,,GNAT language extensions
-@anchor{gnat_rm/gnat_language_extensions how-to-activate-the-extended-gnat-ada-superset}@anchor{448}
+@anchor{gnat_rm/gnat_language_extensions how-to-activate-the-extended-gnat-ada-superset}@anchor{449}
@section How to activate the extended GNAT Ada superset
@@ -30463,7 +30475,7 @@ for use in playground experiments.
@end cartouche
@node Curated Extensions,Experimental Language Extensions,How to activate the extended GNAT Ada superset,GNAT language extensions
-@anchor{gnat_rm/gnat_language_extensions curated-extensions}@anchor{449}@anchor{gnat_rm/gnat_language_extensions curated-language-extensions}@anchor{6a}
+@anchor{gnat_rm/gnat_language_extensions curated-extensions}@anchor{44a}@anchor{gnat_rm/gnat_language_extensions curated-language-extensions}@anchor{6a}
@section Curated Extensions
@@ -30484,7 +30496,7 @@ Features activated via @code{-gnatX} or
@end menu
@node Local Declarations Without Block,Deep delta Aggregates,,Curated Extensions
-@anchor{gnat_rm/gnat_language_extensions local-declarations-without-block}@anchor{44a}
+@anchor{gnat_rm/gnat_language_extensions local-declarations-without-block}@anchor{44b}
@subsection Local Declarations Without Block
@@ -30577,7 +30589,7 @@ And as such the second `@w{`}A`@w{`} declaration is hiding the first one.
@end cartouche
@node Deep delta Aggregates,Fixed lower bounds for array types and subtypes,Local Declarations Without Block,Curated Extensions
-@anchor{gnat_rm/gnat_language_extensions deep-delta-aggregates}@anchor{44b}
+@anchor{gnat_rm/gnat_language_extensions deep-delta-aggregates}@anchor{44c}
@subsection Deep delta Aggregates
@@ -30599,7 +30611,7 @@ The syntax of delta aggregates in the extended version is the following:
@end menu
@node Syntax,Legality Rules,,Deep delta Aggregates
-@anchor{gnat_rm/gnat_language_extensions syntax}@anchor{44c}
+@anchor{gnat_rm/gnat_language_extensions syntax}@anchor{44d}
@subsubsection Syntax
@@ -30645,7 +30657,7 @@ array_subcomponent_choice ::=
@end example
@node Legality Rules,Dynamic Semantics,Syntax,Deep delta Aggregates
-@anchor{gnat_rm/gnat_language_extensions legality-rules}@anchor{44d}
+@anchor{gnat_rm/gnat_language_extensions legality-rules}@anchor{44e}
@subsubsection Legality Rules
@@ -30682,7 +30694,7 @@ the object denoted by the base_expression, prior to any update.]
@end enumerate
@node Dynamic Semantics,Examples,Legality Rules,Deep delta Aggregates
-@anchor{gnat_rm/gnat_language_extensions dynamic-semantics}@anchor{44e}
+@anchor{gnat_rm/gnat_language_extensions dynamic-semantics}@anchor{44f}
@subsubsection Dynamic Semantics
@@ -30739,7 +30751,7 @@ and assigned to the corresponding subcomponent of the anonymous object.
@end itemize
@node Examples,,Dynamic Semantics,Deep delta Aggregates
-@anchor{gnat_rm/gnat_language_extensions examples}@anchor{44f}
+@anchor{gnat_rm/gnat_language_extensions examples}@anchor{450}
@subsubsection Examples
@@ -30767,7 +30779,7 @@ end;
@end example
@node Fixed lower bounds for array types and subtypes,Prefixed-view notation for calls to primitive subprograms of untagged types,Deep delta Aggregates,Curated Extensions
-@anchor{gnat_rm/gnat_language_extensions fixed-lower-bounds-for-array-types-and-subtypes}@anchor{450}
+@anchor{gnat_rm/gnat_language_extensions fixed-lower-bounds-for-array-types-and-subtypes}@anchor{451}
@subsection Fixed lower bounds for array types and subtypes
@@ -30818,7 +30830,7 @@ lower bound of unconstrained array formals when the formal’s subtype has index
ranges with static fixed lower bounds.
@node Prefixed-view notation for calls to primitive subprograms of untagged types,Expression defaults for generic formal functions,Fixed lower bounds for array types and subtypes,Curated Extensions
-@anchor{gnat_rm/gnat_language_extensions prefixed-view-notation-for-calls-to-primitive-subprograms-of-untagged-types}@anchor{451}
+@anchor{gnat_rm/gnat_language_extensions prefixed-view-notation-for-calls-to-primitive-subprograms-of-untagged-types}@anchor{452}
@subsection Prefixed-view notation for calls to primitive subprograms of untagged types
@@ -30868,7 +30880,7 @@ pragma Assert (V.Nth_Element(1) = 42);
@end example
@node Expression defaults for generic formal functions,String interpolation,Prefixed-view notation for calls to primitive subprograms of untagged types,Curated Extensions
-@anchor{gnat_rm/gnat_language_extensions expression-defaults-for-generic-formal-functions}@anchor{452}
+@anchor{gnat_rm/gnat_language_extensions expression-defaults-for-generic-formal-functions}@anchor{453}
@subsection Expression defaults for generic formal functions
@@ -30899,7 +30911,7 @@ If the default is used (i.e. there is no actual corresponding to Copy),
then calls to Copy in the instance will simply return Item.
@node String interpolation,Constrained attribute for generic objects,Expression defaults for generic formal functions,Curated Extensions
-@anchor{gnat_rm/gnat_language_extensions string-interpolation}@anchor{453}
+@anchor{gnat_rm/gnat_language_extensions string-interpolation}@anchor{454}
@subsection String interpolation
@@ -31066,7 +31078,7 @@ a double quote is " and an open brace is @{
@end example
@node Constrained attribute for generic objects,Static aspect on intrinsic functions,String interpolation,Curated Extensions
-@anchor{gnat_rm/gnat_language_extensions constrained-attribute-for-generic-objects}@anchor{454}
+@anchor{gnat_rm/gnat_language_extensions constrained-attribute-for-generic-objects}@anchor{455}
@subsection Constrained attribute for generic objects
@@ -31074,7 +31086,7 @@ The @code{Constrained} attribute is permitted for objects of generic types. The
result indicates whether the corresponding actual is constrained.
@node Static aspect on intrinsic functions,First Controlling Parameter,Constrained attribute for generic objects,Curated Extensions
-@anchor{gnat_rm/gnat_language_extensions static-aspect-on-intrinsic-functions}@anchor{455}
+@anchor{gnat_rm/gnat_language_extensions static-aspect-on-intrinsic-functions}@anchor{456}
@subsection @code{Static} aspect on intrinsic functions
@@ -31083,7 +31095,7 @@ and the compiler will evaluate some of these intrinsics statically, in
particular the @code{Shift_Left} and @code{Shift_Right} intrinsics.
@node First Controlling Parameter,,Static aspect on intrinsic functions,Curated Extensions
-@anchor{gnat_rm/gnat_language_extensions first-controlling-parameter}@anchor{456}
+@anchor{gnat_rm/gnat_language_extensions first-controlling-parameter}@anchor{457}
@subsection First Controlling Parameter
@@ -31183,7 +31195,7 @@ The result of a function is never a controlling result.
@end itemize
@node Experimental Language Extensions,,Curated Extensions,GNAT language extensions
-@anchor{gnat_rm/gnat_language_extensions experimental-language-extensions}@anchor{6b}@anchor{gnat_rm/gnat_language_extensions id2}@anchor{457}
+@anchor{gnat_rm/gnat_language_extensions experimental-language-extensions}@anchor{6b}@anchor{gnat_rm/gnat_language_extensions id2}@anchor{458}
@section Experimental Language Extensions
@@ -31208,7 +31220,7 @@ Features activated via @code{-gnatX0} or
@end menu
@node Conditional when constructs,Implicit With,,Experimental Language Extensions
-@anchor{gnat_rm/gnat_language_extensions conditional-when-constructs}@anchor{458}
+@anchor{gnat_rm/gnat_language_extensions conditional-when-constructs}@anchor{459}
@subsection Conditional when constructs
@@ -31277,7 +31289,7 @@ end;
@end example
@node Implicit With,Storage Model,Conditional when constructs,Experimental Language Extensions
-@anchor{gnat_rm/gnat_language_extensions implicit-with}@anchor{459}
+@anchor{gnat_rm/gnat_language_extensions implicit-with}@anchor{45a}
@subsection Implicit With
@@ -31294,7 +31306,7 @@ end;
@end example
@node Storage Model,Attribute Super,Implicit With,Experimental Language Extensions
-@anchor{gnat_rm/gnat_language_extensions storage-model}@anchor{45a}
+@anchor{gnat_rm/gnat_language_extensions storage-model}@anchor{45b}
@subsection Storage Model
@@ -31311,7 +31323,7 @@ memory models, in particular to support interactions with GPU.
@end menu
@node Aspect Storage_Model_Type,Aspect Designated_Storage_Model,,Storage Model
-@anchor{gnat_rm/gnat_language_extensions aspect-storage-model-type}@anchor{45b}
+@anchor{gnat_rm/gnat_language_extensions aspect-storage-model-type}@anchor{45c}
@subsubsection Aspect Storage_Model_Type
@@ -31445,7 +31457,7 @@ end CUDA_Memory;
@end example
@node Aspect Designated_Storage_Model,Legacy Storage Pools,Aspect Storage_Model_Type,Storage Model
-@anchor{gnat_rm/gnat_language_extensions aspect-designated-storage-model}@anchor{45c}
+@anchor{gnat_rm/gnat_language_extensions aspect-designated-storage-model}@anchor{45d}
@subsubsection Aspect Designated_Storage_Model
@@ -31523,7 +31535,7 @@ begin
@end example
@node Legacy Storage Pools,,Aspect Designated_Storage_Model,Storage Model
-@anchor{gnat_rm/gnat_language_extensions legacy-storage-pools}@anchor{45d}
+@anchor{gnat_rm/gnat_language_extensions legacy-storage-pools}@anchor{45e}
@subsubsection Legacy Storage Pools
@@ -31574,7 +31586,7 @@ type Acc is access Integer_Array with Storage_Pool => My_Pool;
can still be accepted as a shortcut for the new syntax.
@node Attribute Super,Simpler Accessibility Model,Storage Model,Experimental Language Extensions
-@anchor{gnat_rm/gnat_language_extensions attribute-super}@anchor{45e}
+@anchor{gnat_rm/gnat_language_extensions attribute-super}@anchor{45f}
@subsection Attribute Super
@@ -31609,7 +31621,7 @@ end;
@end example
@node Simpler Accessibility Model,Case pattern matching,Attribute Super,Experimental Language Extensions
-@anchor{gnat_rm/gnat_language_extensions simpler-accessibility-model}@anchor{45f}
+@anchor{gnat_rm/gnat_language_extensions simpler-accessibility-model}@anchor{460}
@subsection Simpler Accessibility Model
@@ -31640,7 +31652,7 @@ All of the refined rules are compatible with the [use of anonymous access types
@end menu
@node Stand-alone objects,Subprogram parameters,,Simpler Accessibility Model
-@anchor{gnat_rm/gnat_language_extensions stand-alone-objects}@anchor{460}
+@anchor{gnat_rm/gnat_language_extensions stand-alone-objects}@anchor{461}
@subsubsection Stand-alone objects
@@ -31688,7 +31700,7 @@ of the RM 4.6 rule “The accessibility level of the operand type shall not be
statically deeper than that of the target type …”.
@node Subprogram parameters,Function results,Stand-alone objects,Simpler Accessibility Model
-@anchor{gnat_rm/gnat_language_extensions subprogram-parameters}@anchor{461}
+@anchor{gnat_rm/gnat_language_extensions subprogram-parameters}@anchor{462}
@subsubsection Subprogram parameters
@@ -31781,7 +31793,7 @@ end;
@end example
@node Function results,,Subprogram parameters,Simpler Accessibility Model
-@anchor{gnat_rm/gnat_language_extensions function-results}@anchor{462}
+@anchor{gnat_rm/gnat_language_extensions function-results}@anchor{463}
@subsubsection Function results
@@ -31909,7 +31921,7 @@ end;
@end example
@node Case pattern matching,Mutably Tagged Types with Size’Class Aspect,Simpler Accessibility Model,Experimental Language Extensions
-@anchor{gnat_rm/gnat_language_extensions case-pattern-matching}@anchor{463}
+@anchor{gnat_rm/gnat_language_extensions case-pattern-matching}@anchor{464}
@subsection Case pattern matching
@@ -32039,7 +32051,7 @@ message generated in such cases is usually “Capacity exceeded in compiling
case statement with composite selector type”.
@node Mutably Tagged Types with Size’Class Aspect,Generalized Finalization,Case pattern matching,Experimental Language Extensions
-@anchor{gnat_rm/gnat_language_extensions mutably-tagged-types-with-size-class-aspect}@anchor{464}
+@anchor{gnat_rm/gnat_language_extensions mutably-tagged-types-with-size-class-aspect}@anchor{465}
@subsection Mutably Tagged Types with Size’Class Aspect
@@ -32210,7 +32222,7 @@ parameter exists (that is, before leaving the corresponding callable construct).
This is analogous to the RM 6.4.1(18) rule about discriminated parameters.
@node Generalized Finalization,No_Raise aspect,Mutably Tagged Types with Size’Class Aspect,Experimental Language Extensions
-@anchor{gnat_rm/gnat_language_extensions generalized-finalization}@anchor{465}
+@anchor{gnat_rm/gnat_language_extensions generalized-finalization}@anchor{466}
@subsection Generalized Finalization
@@ -32281,7 +32293,7 @@ in this case.
@item
The @code{Adjust} and @code{Finalize} procedures are automatically considered as
-having the @ref{466,,No_Raise aspect} specified for them. In particular, the
+having the @ref{467,,No_Raise aspect} specified for them. In particular, the
compiler has permission to enforce none of the guarantees specified by the
RM 7.6.1 (14/1) and subsequent subclauses.
@end itemize
@@ -32342,7 +32354,7 @@ end P;
@end menu
@node Finalizable tagged types,Composite types,,Generalized Finalization
-@anchor{gnat_rm/gnat_language_extensions finalizable-tagged-types}@anchor{467}
+@anchor{gnat_rm/gnat_language_extensions finalizable-tagged-types}@anchor{468}
@subsubsection Finalizable tagged types
@@ -32352,7 +32364,7 @@ dispatching whenever it makes sense, i.e. when the object in question is of a
class-wide type and the class includes at least one finalizable tagged type.
@node Composite types,Interoperability with controlled types,Finalizable tagged types,Generalized Finalization
-@anchor{gnat_rm/gnat_language_extensions composite-types}@anchor{468}
+@anchor{gnat_rm/gnat_language_extensions composite-types}@anchor{469}
@subsubsection Composite types
@@ -32362,7 +32374,7 @@ in order to call the primitives of their components. The dynamic semantics is
the same as for controlled components of composite types.
@node Interoperability with controlled types,,Composite types,Generalized Finalization
-@anchor{gnat_rm/gnat_language_extensions interoperability-with-controlled-types}@anchor{469}
+@anchor{gnat_rm/gnat_language_extensions interoperability-with-controlled-types}@anchor{46a}
@subsubsection Interoperability with controlled types
@@ -32372,7 +32384,7 @@ versa, but the stricter dynamic semantics, in other words that of controlled
types, is applied in this case.
@node No_Raise aspect,Inference of Dependent Types in Generic Instantiations,Generalized Finalization,Experimental Language Extensions
-@anchor{gnat_rm/gnat_language_extensions id3}@anchor{46a}@anchor{gnat_rm/gnat_language_extensions no-raise-aspect}@anchor{466}
+@anchor{gnat_rm/gnat_language_extensions id3}@anchor{46b}@anchor{gnat_rm/gnat_language_extensions no-raise-aspect}@anchor{467}
@subsection No_Raise aspect
@@ -32382,7 +32394,7 @@ be raised during the execution of the subprogram, it is caught at the end of
this execution and @code{Program_Error} is propagated to the caller.
@node Inference of Dependent Types in Generic Instantiations,External_Initialization Aspect,No_Raise aspect,Experimental Language Extensions
-@anchor{gnat_rm/gnat_language_extensions inference-of-dependent-types-in-generic-instantiations}@anchor{46b}
+@anchor{gnat_rm/gnat_language_extensions inference-of-dependent-types-in-generic-instantiations}@anchor{46c}
@subsection Inference of Dependent Types in Generic Instantiations
@@ -32459,7 +32471,7 @@ package Int_Array_Operations is new Array_Operations
@end example
@node External_Initialization Aspect,Finally construct,Inference of Dependent Types in Generic Instantiations,Experimental Language Extensions
-@anchor{gnat_rm/gnat_language_extensions external-initialization-aspect}@anchor{46c}
+@anchor{gnat_rm/gnat_language_extensions external-initialization-aspect}@anchor{46d}
@subsection External_Initialization Aspect
@@ -32500,7 +32512,7 @@ The maximum size of loaded files is limited to 2@w{^31} bytes.
@end cartouche
@node Finally construct,Continue statement,External_Initialization Aspect,Experimental Language Extensions
-@anchor{gnat_rm/gnat_language_extensions finally-construct}@anchor{46d}
+@anchor{gnat_rm/gnat_language_extensions finally-construct}@anchor{46e}
@subsection Finally construct
@@ -32517,7 +32529,7 @@ This feature is similar to the one with the same name in other languages such as
@end menu
@node Syntax<2>,Legality Rules<2>,,Finally construct
-@anchor{gnat_rm/gnat_language_extensions id4}@anchor{46e}
+@anchor{gnat_rm/gnat_language_extensions id4}@anchor{46f}
@subsubsection Syntax
@@ -32532,7 +32544,7 @@ handled_sequence_of_statements ::=
@end example
@node Legality Rules<2>,Dynamic Semantics<2>,Syntax<2>,Finally construct
-@anchor{gnat_rm/gnat_language_extensions id5}@anchor{46f}
+@anchor{gnat_rm/gnat_language_extensions id5}@anchor{470}
@subsubsection Legality Rules
@@ -32542,7 +32554,7 @@ to be transferred outside the finally part are forbidden.
Goto & exit where the target is outside of the finally’s @code{sequence_of_statements} are forbidden
@node Dynamic Semantics<2>,,Legality Rules<2>,Finally construct
-@anchor{gnat_rm/gnat_language_extensions id6}@anchor{470}
+@anchor{gnat_rm/gnat_language_extensions id6}@anchor{471}
@subsubsection Dynamic Semantics
@@ -32557,7 +32569,7 @@ execution, that is the finally block must be executed in full even if the contai
aborted, or if the control is transferred out of the block.
@node Continue statement,,Finally construct,Experimental Language Extensions
-@anchor{gnat_rm/gnat_language_extensions continue-statement}@anchor{471}
+@anchor{gnat_rm/gnat_language_extensions continue-statement}@anchor{472}
@subsection Continue statement
@@ -32575,7 +32587,7 @@ Note that @code{continue} is a keyword but it is not a reserved word. This is a
configuration that does not exist in standard Ada.
@node Security Hardening Features,Obsolescent Features,GNAT language extensions,Top
-@anchor{gnat_rm/security_hardening_features doc}@anchor{472}@anchor{gnat_rm/security_hardening_features id1}@anchor{473}@anchor{gnat_rm/security_hardening_features security-hardening-features}@anchor{15}
+@anchor{gnat_rm/security_hardening_features doc}@anchor{473}@anchor{gnat_rm/security_hardening_features id1}@anchor{474}@anchor{gnat_rm/security_hardening_features security-hardening-features}@anchor{15}
@chapter Security Hardening Features
@@ -32597,7 +32609,7 @@ change.
@end menu
@node Register Scrubbing,Stack Scrubbing,,Security Hardening Features
-@anchor{gnat_rm/security_hardening_features register-scrubbing}@anchor{474}
+@anchor{gnat_rm/security_hardening_features register-scrubbing}@anchor{475}
@section Register Scrubbing
@@ -32633,7 +32645,7 @@ programming languages, see @cite{Using the GNU Compiler Collection (GCC)}.
@c Stack Scrubbing:
@node Stack Scrubbing,Hardened Conditionals,Register Scrubbing,Security Hardening Features
-@anchor{gnat_rm/security_hardening_features stack-scrubbing}@anchor{475}
+@anchor{gnat_rm/security_hardening_features stack-scrubbing}@anchor{476}
@section Stack Scrubbing
@@ -32777,7 +32789,7 @@ Bar_Callable_Ptr.
@c Hardened Conditionals:
@node Hardened Conditionals,Hardened Booleans,Stack Scrubbing,Security Hardening Features
-@anchor{gnat_rm/security_hardening_features hardened-conditionals}@anchor{476}
+@anchor{gnat_rm/security_hardening_features hardened-conditionals}@anchor{477}
@section Hardened Conditionals
@@ -32867,7 +32879,7 @@ be used with other programming languages supported by GCC.
@c Hardened Booleans:
@node Hardened Booleans,Control Flow Redundancy,Hardened Conditionals,Security Hardening Features
-@anchor{gnat_rm/security_hardening_features hardened-booleans}@anchor{477}
+@anchor{gnat_rm/security_hardening_features hardened-booleans}@anchor{478}
@section Hardened Booleans
@@ -32928,7 +32940,7 @@ and more details on that attribute, see @cite{Using the GNU Compiler Collection
@c Control Flow Redundancy:
@node Control Flow Redundancy,,Hardened Booleans,Security Hardening Features
-@anchor{gnat_rm/security_hardening_features control-flow-redundancy}@anchor{478}
+@anchor{gnat_rm/security_hardening_features control-flow-redundancy}@anchor{479}
@section Control Flow Redundancy
@@ -33096,7 +33108,7 @@ see @cite{Using the GNU Compiler Collection (GCC)}. These options
can be used with other programming languages supported by GCC.
@node Obsolescent Features,Compatibility and Porting Guide,Security Hardening Features,Top
-@anchor{gnat_rm/obsolescent_features doc}@anchor{479}@anchor{gnat_rm/obsolescent_features id1}@anchor{47a}@anchor{gnat_rm/obsolescent_features obsolescent-features}@anchor{16}
+@anchor{gnat_rm/obsolescent_features doc}@anchor{47a}@anchor{gnat_rm/obsolescent_features id1}@anchor{47b}@anchor{gnat_rm/obsolescent_features obsolescent-features}@anchor{16}
@chapter Obsolescent Features
@@ -33115,7 +33127,7 @@ compatibility purposes.
@end menu
@node pragma No_Run_Time,pragma Ravenscar,,Obsolescent Features
-@anchor{gnat_rm/obsolescent_features id2}@anchor{47b}@anchor{gnat_rm/obsolescent_features pragma-no-run-time}@anchor{47c}
+@anchor{gnat_rm/obsolescent_features id2}@anchor{47c}@anchor{gnat_rm/obsolescent_features pragma-no-run-time}@anchor{47d}
@section pragma No_Run_Time
@@ -33128,7 +33140,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{47d}@anchor{gnat_rm/obsolescent_features pragma-ravenscar}@anchor{47e}
+@anchor{gnat_rm/obsolescent_features id3}@anchor{47e}@anchor{gnat_rm/obsolescent_features pragma-ravenscar}@anchor{47f}
@section pragma Ravenscar
@@ -33137,7 +33149,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 id4}@anchor{47f}@anchor{gnat_rm/obsolescent_features pragma-restricted-run-time}@anchor{480}
+@anchor{gnat_rm/obsolescent_features id4}@anchor{480}@anchor{gnat_rm/obsolescent_features pragma-restricted-run-time}@anchor{481}
@section pragma Restricted_Run_Time
@@ -33147,7 +33159,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 id5}@anchor{481}@anchor{gnat_rm/obsolescent_features pragma-task-info}@anchor{482}
+@anchor{gnat_rm/obsolescent_features id5}@anchor{482}@anchor{gnat_rm/obsolescent_features pragma-task-info}@anchor{483}
@section pragma Task_Info
@@ -33173,7 +33185,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{483}@anchor{gnat_rm/obsolescent_features package-system-task-info-s-tasinf-ads}@anchor{484}
+@anchor{gnat_rm/obsolescent_features package-system-task-info}@anchor{484}@anchor{gnat_rm/obsolescent_features package-system-task-info-s-tasinf-ads}@anchor{485}
@section package System.Task_Info (@code{s-tasinf.ads})
@@ -33183,7 +33195,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 doc}@anchor{485}@anchor{gnat_rm/compatibility_and_porting_guide compatibility-and-porting-guide}@anchor{17}@anchor{gnat_rm/compatibility_and_porting_guide id1}@anchor{486}
+@anchor{gnat_rm/compatibility_and_porting_guide doc}@anchor{486}@anchor{gnat_rm/compatibility_and_porting_guide compatibility-and-porting-guide}@anchor{17}@anchor{gnat_rm/compatibility_and_porting_guide id1}@anchor{487}
@chapter Compatibility and Porting Guide
@@ -33205,7 +33217,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{487}@anchor{gnat_rm/compatibility_and_porting_guide writing-portable-fixed-point-declarations}@anchor{488}
+@anchor{gnat_rm/compatibility_and_porting_guide id2}@anchor{488}@anchor{gnat_rm/compatibility_and_porting_guide writing-portable-fixed-point-declarations}@anchor{489}
@section Writing Portable Fixed-Point Declarations
@@ -33327,7 +33339,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{489}@anchor{gnat_rm/compatibility_and_porting_guide id3}@anchor{48a}
+@anchor{gnat_rm/compatibility_and_porting_guide compatibility-with-ada-83}@anchor{48a}@anchor{gnat_rm/compatibility_and_porting_guide id3}@anchor{48b}
@section Compatibility with Ada 83
@@ -33355,7 +33367,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{48b}@anchor{gnat_rm/compatibility_and_porting_guide legal-ada-83-programs-that-are-illegal-in-ada-95}@anchor{48c}
+@anchor{gnat_rm/compatibility_and_porting_guide id4}@anchor{48c}@anchor{gnat_rm/compatibility_and_porting_guide legal-ada-83-programs-that-are-illegal-in-ada-95}@anchor{48d}
@subsection Legal Ada 83 programs that are illegal in Ada 95
@@ -33455,7 +33467,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 id5}@anchor{48d}@anchor{gnat_rm/compatibility_and_porting_guide more-deterministic-semantics}@anchor{48e}
+@anchor{gnat_rm/compatibility_and_porting_guide id5}@anchor{48e}@anchor{gnat_rm/compatibility_and_porting_guide more-deterministic-semantics}@anchor{48f}
@subsection More deterministic semantics
@@ -33483,7 +33495,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 changed-semantics}@anchor{48f}@anchor{gnat_rm/compatibility_and_porting_guide id6}@anchor{490}
+@anchor{gnat_rm/compatibility_and_porting_guide changed-semantics}@anchor{490}@anchor{gnat_rm/compatibility_and_porting_guide id6}@anchor{491}
@subsection Changed semantics
@@ -33525,7 +33537,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 id7}@anchor{491}@anchor{gnat_rm/compatibility_and_porting_guide other-language-compatibility-issues}@anchor{492}
+@anchor{gnat_rm/compatibility_and_porting_guide id7}@anchor{492}@anchor{gnat_rm/compatibility_and_porting_guide other-language-compatibility-issues}@anchor{493}
@subsection Other language compatibility issues
@@ -33558,7 +33570,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{493}@anchor{gnat_rm/compatibility_and_porting_guide id8}@anchor{494}
+@anchor{gnat_rm/compatibility_and_porting_guide compatibility-between-ada-95-and-ada-2005}@anchor{494}@anchor{gnat_rm/compatibility_and_porting_guide id8}@anchor{495}
@section Compatibility between Ada 95 and Ada 2005
@@ -33630,7 +33642,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 id9}@anchor{495}@anchor{gnat_rm/compatibility_and_porting_guide implementation-dependent-characteristics}@anchor{496}
+@anchor{gnat_rm/compatibility_and_porting_guide id9}@anchor{496}@anchor{gnat_rm/compatibility_and_porting_guide implementation-dependent-characteristics}@anchor{497}
@section Implementation-dependent characteristics
@@ -33653,7 +33665,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 id10}@anchor{497}@anchor{gnat_rm/compatibility_and_porting_guide implementation-defined-pragmas}@anchor{498}
+@anchor{gnat_rm/compatibility_and_porting_guide id10}@anchor{498}@anchor{gnat_rm/compatibility_and_porting_guide implementation-defined-pragmas}@anchor{499}
@subsection Implementation-defined pragmas
@@ -33675,7 +33687,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{499}@anchor{gnat_rm/compatibility_and_porting_guide implementation-defined-attributes}@anchor{49a}
+@anchor{gnat_rm/compatibility_and_porting_guide id11}@anchor{49a}@anchor{gnat_rm/compatibility_and_porting_guide implementation-defined-attributes}@anchor{49b}
@subsection Implementation-defined attributes
@@ -33689,7 +33701,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 id12}@anchor{49b}@anchor{gnat_rm/compatibility_and_porting_guide libraries}@anchor{49c}
+@anchor{gnat_rm/compatibility_and_porting_guide id12}@anchor{49c}@anchor{gnat_rm/compatibility_and_porting_guide libraries}@anchor{49d}
@subsection Libraries
@@ -33718,7 +33730,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{49d}@anchor{gnat_rm/compatibility_and_porting_guide id13}@anchor{49e}
+@anchor{gnat_rm/compatibility_and_porting_guide elaboration-order}@anchor{49e}@anchor{gnat_rm/compatibility_and_porting_guide id13}@anchor{49f}
@subsection Elaboration order
@@ -33754,7 +33766,7 @@ pragmas either globally (as an effect of the `-gnatE' switch) or locally
@end itemize
@node Target-specific aspects,,Elaboration order,Implementation-dependent characteristics
-@anchor{gnat_rm/compatibility_and_porting_guide id14}@anchor{49f}@anchor{gnat_rm/compatibility_and_porting_guide target-specific-aspects}@anchor{4a0}
+@anchor{gnat_rm/compatibility_and_porting_guide id14}@anchor{4a0}@anchor{gnat_rm/compatibility_and_porting_guide target-specific-aspects}@anchor{4a1}
@subsection Target-specific aspects
@@ -33767,10 +33779,10 @@ on the robustness of the original design. Moreover, Ada 95 (and thus
Ada 2005, Ada 2012, and Ada 2022) 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{4a1,,Representation Clauses}.
+GNAT’s approach to these issues is described in @ref{4a2,,Representation Clauses}.
@node Compatibility with Other Ada Systems,Representation Clauses,Implementation-dependent characteristics,Compatibility and Porting Guide
-@anchor{gnat_rm/compatibility_and_porting_guide compatibility-with-other-ada-systems}@anchor{4a2}@anchor{gnat_rm/compatibility_and_porting_guide id15}@anchor{4a3}
+@anchor{gnat_rm/compatibility_and_porting_guide compatibility-with-other-ada-systems}@anchor{4a3}@anchor{gnat_rm/compatibility_and_porting_guide id15}@anchor{4a4}
@section Compatibility with Other Ada Systems
@@ -33813,7 +33825,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 id16}@anchor{4a4}@anchor{gnat_rm/compatibility_and_porting_guide representation-clauses}@anchor{4a1}
+@anchor{gnat_rm/compatibility_and_porting_guide id16}@anchor{4a5}@anchor{gnat_rm/compatibility_and_porting_guide representation-clauses}@anchor{4a2}
@section Representation Clauses
@@ -33906,7 +33918,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{4a5}@anchor{gnat_rm/compatibility_and_porting_guide id17}@anchor{4a6}
+@anchor{gnat_rm/compatibility_and_porting_guide compatibility-with-hp-ada-83}@anchor{4a6}@anchor{gnat_rm/compatibility_and_porting_guide id17}@anchor{4a7}
@section Compatibility with HP Ada 83
@@ -33936,7 +33948,7 @@ extension of package System.
@end itemize
@node GNU Free Documentation License,Index,Compatibility and Porting Guide,Top
-@anchor{share/gnu_free_documentation_license doc}@anchor{4a7}@anchor{share/gnu_free_documentation_license gnu-fdl}@anchor{1}@anchor{share/gnu_free_documentation_license gnu-free-documentation-license}@anchor{4a8}
+@anchor{share/gnu_free_documentation_license doc}@anchor{4a8}@anchor{share/gnu_free_documentation_license gnu-fdl}@anchor{1}@anchor{share/gnu_free_documentation_license gnu-free-documentation-license}@anchor{4a9}
@chapter GNU Free Documentation License
diff --git a/gcc/ada/gnat_ugn.texi b/gcc/ada/gnat_ugn.texi
index 6cd0bed..7b3175e 100644
--- a/gcc/ada/gnat_ugn.texi
+++ b/gcc/ada/gnat_ugn.texi
@@ -30297,8 +30297,8 @@ to permit their use in free software.
@printindex ge
-@anchor{gnat_ugn/gnat_utility_programs switches-related-to-project-files}@w{ }
@anchor{d2}@w{ }
+@anchor{gnat_ugn/gnat_utility_programs switches-related-to-project-files}@w{ }
@c %**end of body
@bye
diff --git a/gcc/ada/json_utils.adb b/gcc/ada/json_utils.adb
index 61b0693..9d289fb 100644
--- a/gcc/ada/json_utils.adb
+++ b/gcc/ada/json_utils.adb
@@ -2,7 +2,7 @@
-- --
-- GNAT COMPILER COMPONENTS --
-- --
--- D I A G N O S T I C S . J S O N _ U T I L S --
+-- J S O N _ U T I L S --
-- --
-- B o d y --
-- --
diff --git a/gcc/ada/json_utils.ads b/gcc/ada/json_utils.ads
index b251def..7a8251c 100644
--- a/gcc/ada/json_utils.ads
+++ b/gcc/ada/json_utils.ads
@@ -2,7 +2,7 @@
-- --
-- GNAT COMPILER COMPONENTS --
-- --
--- D I A G N O S T I C S . J S O N _ U T I L S --
+-- J S O N _ U T I L S --
-- --
-- S p e c --
-- --
@@ -22,6 +22,7 @@
-- Extensive contributions were provided by Ada Core Technologies Inc. --
-- --
------------------------------------------------------------------------------
+
with Types; use Types;
package JSON_Utils is
diff --git a/gcc/ada/krunch.adb b/gcc/ada/krunch.adb
index 35df625..409431d 100644
--- a/gcc/ada/krunch.adb
+++ b/gcc/ada/krunch.adb
@@ -271,6 +271,4 @@ begin
Buffer (Len) := Buffer (J);
end if;
end loop;
-
- return;
end Krunch;
diff --git a/gcc/ada/layout.adb b/gcc/ada/layout.adb
index 08bbcc0..099ea49 100644
--- a/gcc/ada/layout.adb
+++ b/gcc/ada/layout.adb
@@ -227,9 +227,7 @@ package body Layout is
procedure Layout_Object (E : Entity_Id) is
pragma Unreferenced (E);
begin
- -- Nothing to do for now, assume backend does the layout
-
- return;
+ null; -- Nothing to do for now, assume backend does the layout
end Layout_Object;
-----------------
diff --git a/gcc/ada/lib-xref-spark_specific.adb b/gcc/ada/lib-xref-spark_specific.adb
index d77d6aa..03693a9 100644
--- a/gcc/ada/lib-xref-spark_specific.adb
+++ b/gcc/ada/lib-xref-spark_specific.adb
@@ -258,6 +258,13 @@ package body SPARK_Specific is
Context := Defining_Entity (Context);
exit;
+ when N_Subunit =>
+ Context := Corresponding_Stub (Context);
+
+ when N_Body_Stub =>
+ Context := Corresponding_Spec_Of_Stub (Context);
+ exit;
+
when others =>
Context := Parent (Context);
end case;
diff --git a/gcc/ada/lib.adb b/gcc/ada/lib.adb
index a727f48..3fd9540 100644
--- a/gcc/ada/lib.adb
+++ b/gcc/ada/lib.adb
@@ -1062,7 +1062,7 @@ package body Lib is
-----------------------------
function Increment_Serial_Number return Nat is
- TSN : Int renames Units.Table (Current_Sem_Unit).Serial_Number;
+ TSN : Nat renames Units.Table (Current_Sem_Unit).Serial_Number;
begin
TSN := TSN + 1;
return TSN;
@@ -1223,7 +1223,7 @@ package body Lib is
-------------------------------
procedure Synchronize_Serial_Number (SN : Nat) is
- TSN : Int renames Units.Table (Current_Sem_Unit).Serial_Number;
+ TSN : Nat renames Units.Table (Current_Sem_Unit).Serial_Number;
begin
-- We should not be trying to synchronize downward
diff --git a/gcc/ada/lib.ads b/gcc/ada/lib.ads
index a085aa7..928f6f8 100644
--- a/gcc/ada/lib.ads
+++ b/gcc/ada/lib.ads
@@ -852,7 +852,7 @@ private
Source_Index : Source_File_Index;
Cunit : Node_Id;
Cunit_Entity : Entity_Id;
- Dependency_Num : Int;
+ Dependency_Num : Nat;
Ident_String : Node_Id;
Main_Priority : Int;
Main_CPU : Int;
diff --git a/gcc/ada/libgnarl/s-tassta.adb b/gcc/ada/libgnarl/s-tassta.adb
index b1eb842..98ee15b 100644
--- a/gcc/ada/libgnarl/s-tassta.adb
+++ b/gcc/ada/libgnarl/s-tassta.adb
@@ -133,6 +133,11 @@ package body System.Tasking.Stages is
-- Different code is used at master completion, in Terminate_Dependents,
-- due to a need for tighter synchronization with the master.
+ function Get_Stack_Base (Self_ID : Task_Id) return System.Address;
+ -- Get the stack base of Self.
+ --
+ -- If the stack base cannot be determined, then Null_Address is returned.
+
----------------------
-- Abort_Dependents --
----------------------
@@ -1113,7 +1118,7 @@ package body System.Tasking.Stages is
-- Address of the base of the stack
begin
- Stack_Base := Self_ID.Common.Compiler_Data.Pri_Stack_Info.Base;
+ Stack_Base := Get_Stack_Base (Self_ID);
if Stack_Base = Null_Address then
@@ -1139,7 +1144,7 @@ package body System.Tasking.Stages is
(Self_ID.Common.Analyzer,
Self_ID.Common.Task_Image (1 .. Self_ID.Common.Task_Image_Len),
Natural (Self_ID.Common.Compiler_Data.Pri_Stack_Info.Size),
- SSE.To_Integer (Stack_Base),
+ Stack_Base,
Pattern_Size);
STPO.Unlock_RTS;
Fill_Stack (Self_ID.Common.Analyzer);
@@ -1966,6 +1971,15 @@ package body System.Tasking.Stages is
System.Task_Primitives.Operations.Finalize_TCB (T);
end Vulnerable_Free_Task;
+ --------------------
+ -- Get_Stack_Base --
+ --------------------
+
+ -- Get_Stack_Base is architecture-specific
+
+ function Get_Stack_Base (Self_ID : Task_Id) return System.Address
+ is separate;
+
-- Package elaboration code
begin
diff --git a/gcc/ada/libgnarl/s-tsgsba.adb b/gcc/ada/libgnarl/s-tsgsba.adb
new file mode 100644
index 0000000..450513d
--- /dev/null
+++ b/gcc/ada/libgnarl/s-tsgsba.adb
@@ -0,0 +1,40 @@
+------------------------------------------------------------------------------
+-- --
+-- GNAT RUN-TIME LIBRARY (GNARL) COMPONENTS --
+-- --
+-- S Y S T E M . T A S K I N G . S T A G E S . G E T _ S T A C K _ B A S E --
+-- --
+-- B o d y --
+-- --
+-- Copyright (C) 1992-2025, Free Software Foundation, Inc. --
+-- --
+-- GNARL is free software; you can redistribute it and/or modify it under --
+-- terms of the GNU General Public License as published by the Free Soft- --
+-- ware Foundation; either version 3, or (at your option) any later ver- --
+-- sion. GNAT is distributed in the hope that it will be useful, but WITH- --
+-- OUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY --
+-- or FITNESS FOR A PARTICULAR PURPOSE. --
+-- --
+-- As a special exception under Section 7 of GPL version 3, you are granted --
+-- additional permissions described in the GCC Runtime Library Exception, --
+-- version 3.1, as published by the Free Software Foundation. --
+-- --
+-- You should have received a copy of the GNU General Public License and --
+-- a copy of the GCC Runtime Library Exception along with this program; --
+-- see the files COPYING3 and COPYING.RUNTIME respectively. If not, see --
+-- <http://www.gnu.org/licenses/>. --
+-- --
+-- GNARL was developed by the GNARL team at Florida State University. --
+-- Extensive contributions were provided by Ada Core Technologies, Inc. --
+-- --
+------------------------------------------------------------------------------
+
+-- This is the default version for most platforms which tries to get the
+-- stack base from the compiler info. It returns Null_Address if the stack
+-- base is not available.
+
+separate (System.Tasking.Stages)
+function Get_Stack_Base (Self_ID : Task_Id) return System.Address is
+begin
+ return Self_ID.Common.Compiler_Data.Pri_Stack_Info.Base;
+end Get_Stack_Base;
diff --git a/gcc/ada/libgnarl/s-tsgsba__cheri.adb b/gcc/ada/libgnarl/s-tsgsba__cheri.adb
new file mode 100644
index 0000000..5c17836
--- /dev/null
+++ b/gcc/ada/libgnarl/s-tsgsba__cheri.adb
@@ -0,0 +1,49 @@
+------------------------------------------------------------------------------
+-- --
+-- GNAT RUN-TIME LIBRARY (GNARL) COMPONENTS --
+-- --
+-- S Y S T E M . T A S K I N G . S T A G E S . G E T _ S T A C K _ B A S E --
+-- --
+-- B o d y --
+-- --
+-- Copyright (C) 1992-2025, Free Software Foundation, Inc. --
+-- --
+-- GNARL is free software; you can redistribute it and/or modify it under --
+-- terms of the GNU General Public License as published by the Free Soft- --
+-- ware Foundation; either version 3, or (at your option) any later ver- --
+-- sion. GNAT is distributed in the hope that it will be useful, but WITH- --
+-- OUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY --
+-- or FITNESS FOR A PARTICULAR PURPOSE. --
+-- --
+-- As a special exception under Section 7 of GPL version 3, you are granted --
+-- additional permissions described in the GCC Runtime Library Exception, --
+-- version 3.1, as published by the Free Software Foundation. --
+-- --
+-- You should have received a copy of the GNU General Public License and --
+-- a copy of the GCC Runtime Library Exception along with this program; --
+-- see the files COPYING3 and COPYING.RUNTIME respectively. If not, see --
+-- <http://www.gnu.org/licenses/>. --
+-- --
+-- GNARL was developed by the GNARL team at Florida State University. --
+-- Extensive contributions were provided by Ada Core Technologies, Inc. --
+-- --
+------------------------------------------------------------------------------
+with Interfaces.CHERI;
+
+-- This is the version for CHERI targets where we can derive the stack base
+-- from the upper bound of the capability stack pointer (CSP).
+
+separate (System.Tasking.Stages)
+function Get_Stack_Base (Self_ID : Task_Id) return System.Address is
+ pragma Unreferenced (Self_ID);
+
+ use type SSE.Integer_Address;
+
+ CSP : constant System.Address := Interfaces.CHERI.Get_CSP;
+begin
+ return Interfaces.CHERI.Capability_With_Address
+ (Cap => CSP,
+ Addr => Interfaces.CHERI.Get_Base (CSP) +
+ SSE.Integer_Address
+ (Interfaces.CHERI.Get_Length (CSP)));
+end Get_Stack_Base;
diff --git a/gcc/ada/libgnat/a-strsup.adb b/gcc/ada/libgnat/a-strsup.adb
index 8afde71..3ac1a5ac 100644
--- a/gcc/ada/libgnat/a-strsup.adb
+++ b/gcc/ada/libgnat/a-strsup.adb
@@ -755,7 +755,7 @@ package body Ada.Strings.Superbounded with SPARK_Mode is
if Num_Delete <= 0 then
return Source;
- elsif From - 1 > Slen then
+ elsif From > Slen then
raise Ada.Strings.Index_Error;
elsif Through >= Slen then
@@ -784,7 +784,7 @@ package body Ada.Strings.Superbounded with SPARK_Mode is
if Num_Delete <= 0 then
return;
- elsif From - 1 > Slen then
+ elsif From > Slen then
raise Ada.Strings.Index_Error;
elsif Through >= Slen then
diff --git a/gcc/ada/libgnat/a-stwisu.adb b/gcc/ada/libgnat/a-stwisu.adb
index e7e6b1f..28ae887 100644
--- a/gcc/ada/libgnat/a-stwisu.adb
+++ b/gcc/ada/libgnat/a-stwisu.adb
@@ -753,7 +753,7 @@ package body Ada.Strings.Wide_Superbounded is
if Num_Delete <= 0 then
return Source;
- elsif From > Slen + 1 then
+ elsif From > Slen then
raise Ada.Strings.Index_Error;
elsif Through >= Slen then
@@ -782,7 +782,7 @@ package body Ada.Strings.Wide_Superbounded is
if Num_Delete <= 0 then
return;
- elsif From > Slen + 1 then
+ elsif From > Slen then
raise Ada.Strings.Index_Error;
elsif Through >= Slen then
diff --git a/gcc/ada/libgnat/a-stzsup.adb b/gcc/ada/libgnat/a-stzsup.adb
index fb1baf6..5dcbadf 100644
--- a/gcc/ada/libgnat/a-stzsup.adb
+++ b/gcc/ada/libgnat/a-stzsup.adb
@@ -754,7 +754,7 @@ package body Ada.Strings.Wide_Wide_Superbounded is
if Num_Delete <= 0 then
return Source;
- elsif From > Slen + 1 then
+ elsif From > Slen then
raise Ada.Strings.Index_Error;
elsif Through >= Slen then
@@ -783,7 +783,7 @@ package body Ada.Strings.Wide_Wide_Superbounded is
if Num_Delete <= 0 then
return;
- elsif From > Slen + 1 then
+ elsif From > Slen then
raise Ada.Strings.Index_Error;
elsif Through >= Slen then
diff --git a/gcc/ada/libgnat/a-tifiio.adb b/gcc/ada/libgnat/a-tifiio.adb
index 735859c..26f04ed 100644
--- a/gcc/ada/libgnat/a-tifiio.adb
+++ b/gcc/ada/libgnat/a-tifiio.adb
@@ -194,9 +194,6 @@ package body Ada.Text_IO.Fixed_IO with SPARK_Mode => Off is
((Num'Base'Small_Numerator = 1
and then Num'Base'Small_Denominator <= 2**31)
or else
- (Num'Base'Small_Denominator = 1
- and then Num'Base'Small_Numerator <= 2**31)
- or else
(Num'Base'Small_Numerator <= 2**27
and then Num'Base'Small_Denominator <= 2**27));
-- These conditions are derived from the prerequisites of System.Value_F
@@ -223,9 +220,6 @@ package body Ada.Text_IO.Fixed_IO with SPARK_Mode => Off is
((Num'Base'Small_Numerator = 1
and then Num'Base'Small_Denominator <= 2**63)
or else
- (Num'Base'Small_Denominator = 1
- and then Num'Base'Small_Numerator <= 2**63)
- or else
(Num'Base'Small_Numerator <= 2**59
and then Num'Base'Small_Denominator <= 2**59));
-- These conditions are derived from the prerequisites of System.Value_F
diff --git a/gcc/ada/libgnat/a-tifiio__128.adb b/gcc/ada/libgnat/a-tifiio__128.adb
index 7424346..78c25f2 100644
--- a/gcc/ada/libgnat/a-tifiio__128.adb
+++ b/gcc/ada/libgnat/a-tifiio__128.adb
@@ -201,9 +201,6 @@ package body Ada.Text_IO.Fixed_IO with SPARK_Mode => Off is
((Num'Base'Small_Numerator = 1
and then Num'Base'Small_Denominator <= 2**31)
or else
- (Num'Base'Small_Denominator = 1
- and then Num'Base'Small_Numerator <= 2**31)
- or else
(Num'Base'Small_Numerator <= 2**27
and then Num'Base'Small_Denominator <= 2**27));
-- These conditions are derived from the prerequisites of System.Value_F
@@ -230,9 +227,6 @@ package body Ada.Text_IO.Fixed_IO with SPARK_Mode => Off is
((Num'Base'Small_Numerator = 1
and then Num'Base'Small_Denominator <= 2**63)
or else
- (Num'Base'Small_Denominator = 1
- and then Num'Base'Small_Numerator <= 2**63)
- or else
(Num'Base'Small_Numerator <= 2**59
and then Num'Base'Small_Denominator <= 2**59));
-- These conditions are derived from the prerequisites of System.Value_F
@@ -259,9 +253,6 @@ package body Ada.Text_IO.Fixed_IO with SPARK_Mode => Off is
((Num'Base'Small_Numerator = 1
and then Num'Base'Small_Denominator <= 2**127)
or else
- (Num'Base'Small_Denominator = 1
- and then Num'Base'Small_Numerator <= 2**127)
- or else
(Num'Base'Small_Numerator <= 2**123
and then Num'Base'Small_Denominator <= 2**123));
-- These conditions are derived from the prerequisites of System.Value_F
diff --git a/gcc/ada/libgnat/a-wtfiio.adb b/gcc/ada/libgnat/a-wtfiio.adb
index ed69d65..3ceda12 100644
--- a/gcc/ada/libgnat/a-wtfiio.adb
+++ b/gcc/ada/libgnat/a-wtfiio.adb
@@ -73,9 +73,6 @@ package body Ada.Wide_Text_IO.Fixed_IO is
((Num'Base'Small_Numerator = 1
and then Num'Base'Small_Denominator <= 2**31)
or else
- (Num'Base'Small_Denominator = 1
- and then Num'Base'Small_Numerator <= 2**31)
- or else
(Num'Base'Small_Numerator <= 2**27
and then Num'Base'Small_Denominator <= 2**27));
-- These conditions are derived from the prerequisites of System.Value_F
@@ -102,9 +99,6 @@ package body Ada.Wide_Text_IO.Fixed_IO is
((Num'Base'Small_Numerator = 1
and then Num'Base'Small_Denominator <= 2**63)
or else
- (Num'Base'Small_Denominator = 1
- and then Num'Base'Small_Numerator <= 2**63)
- or else
(Num'Base'Small_Numerator <= 2**59
and then Num'Base'Small_Denominator <= 2**59));
-- These conditions are derived from the prerequisites of System.Value_F
diff --git a/gcc/ada/libgnat/a-wtfiio__128.adb b/gcc/ada/libgnat/a-wtfiio__128.adb
index ec8deca..8757ffb 100644
--- a/gcc/ada/libgnat/a-wtfiio__128.adb
+++ b/gcc/ada/libgnat/a-wtfiio__128.adb
@@ -80,9 +80,6 @@ package body Ada.Wide_Text_IO.Fixed_IO is
((Num'Base'Small_Numerator = 1
and then Num'Base'Small_Denominator <= 2**31)
or else
- (Num'Base'Small_Denominator = 1
- and then Num'Base'Small_Numerator <= 2**31)
- or else
(Num'Base'Small_Numerator <= 2**27
and then Num'Base'Small_Denominator <= 2**27));
-- These conditions are derived from the prerequisites of System.Value_F
@@ -109,9 +106,6 @@ package body Ada.Wide_Text_IO.Fixed_IO is
((Num'Base'Small_Numerator = 1
and then Num'Base'Small_Denominator <= 2**63)
or else
- (Num'Base'Small_Denominator = 1
- and then Num'Base'Small_Numerator <= 2**63)
- or else
(Num'Base'Small_Numerator <= 2**59
and then Num'Base'Small_Denominator <= 2**59));
-- These conditions are derived from the prerequisites of System.Value_F
@@ -138,9 +132,6 @@ package body Ada.Wide_Text_IO.Fixed_IO is
((Num'Base'Small_Numerator = 1
and then Num'Base'Small_Denominator <= 2**127)
or else
- (Num'Base'Small_Denominator = 1
- and then Num'Base'Small_Numerator <= 2**127)
- or else
(Num'Base'Small_Numerator <= 2**123
and then Num'Base'Small_Denominator <= 2**123));
-- These conditions are derived from the prerequisites of System.Value_F
diff --git a/gcc/ada/libgnat/a-ztfiio.adb b/gcc/ada/libgnat/a-ztfiio.adb
index edf58ad..b9f4f43 100644
--- a/gcc/ada/libgnat/a-ztfiio.adb
+++ b/gcc/ada/libgnat/a-ztfiio.adb
@@ -73,9 +73,6 @@ package body Ada.Wide_Wide_Text_IO.Fixed_IO is
((Num'Base'Small_Numerator = 1
and then Num'Base'Small_Denominator <= 2**31)
or else
- (Num'Base'Small_Denominator = 1
- and then Num'Base'Small_Numerator <= 2**31)
- or else
(Num'Base'Small_Numerator <= 2**27
and then Num'Base'Small_Denominator <= 2**27));
-- These conditions are derived from the prerequisites of System.Value_F
@@ -102,9 +99,6 @@ package body Ada.Wide_Wide_Text_IO.Fixed_IO is
((Num'Base'Small_Numerator = 1
and then Num'Base'Small_Denominator <= 2**63)
or else
- (Num'Base'Small_Denominator = 1
- and then Num'Base'Small_Numerator <= 2**63)
- or else
(Num'Base'Small_Numerator <= 2**59
and then Num'Base'Small_Denominator <= 2**59));
-- These conditions are derived from the prerequisites of System.Value_F
diff --git a/gcc/ada/libgnat/a-ztfiio__128.adb b/gcc/ada/libgnat/a-ztfiio__128.adb
index bc0062f..eb02a4a 100644
--- a/gcc/ada/libgnat/a-ztfiio__128.adb
+++ b/gcc/ada/libgnat/a-ztfiio__128.adb
@@ -81,9 +81,6 @@ package body Ada.Wide_Wide_Text_IO.Fixed_IO is
((Num'Base'Small_Numerator = 1
and then Num'Base'Small_Denominator <= 2**31)
or else
- (Num'Base'Small_Denominator = 1
- and then Num'Base'Small_Numerator <= 2**31)
- or else
(Num'Base'Small_Numerator <= 2**27
and then Num'Base'Small_Denominator <= 2**27));
-- These conditions are derived from the prerequisites of System.Value_F
@@ -110,9 +107,6 @@ package body Ada.Wide_Wide_Text_IO.Fixed_IO is
((Num'Base'Small_Numerator = 1
and then Num'Base'Small_Denominator <= 2**63)
or else
- (Num'Base'Small_Denominator = 1
- and then Num'Base'Small_Numerator <= 2**63)
- or else
(Num'Base'Small_Numerator <= 2**59
and then Num'Base'Small_Denominator <= 2**59));
-- These conditions are derived from the prerequisites of System.Value_F
@@ -139,9 +133,6 @@ package body Ada.Wide_Wide_Text_IO.Fixed_IO is
((Num'Base'Small_Numerator = 1
and then Num'Base'Small_Denominator <= 2**127)
or else
- (Num'Base'Small_Denominator = 1
- and then Num'Base'Small_Numerator <= 2**127)
- or else
(Num'Base'Small_Numerator <= 2**123
and then Num'Base'Small_Denominator <= 2**123));
-- These conditions are derived from the prerequisites of System.Value_F
diff --git a/gcc/ada/libgnat/i-cstrin.ads b/gcc/ada/libgnat/i-cstrin.ads
index 0d057d0..5939fe0 100644
--- a/gcc/ada/libgnat/i-cstrin.ads
+++ b/gcc/ada/libgnat/i-cstrin.ads
@@ -100,6 +100,17 @@ is
-- The Value functions copy the contents of a chars_ptr object
-- into a char_array/String.
+ -- There is a guard for a storage error on an object declaration for
+ -- an array type with a modular index type with the size of
+ -- Long_Long_Integer. The special processing is needed in this case
+ -- to compute reliably the size of the object, and eventually, to
+ -- raise Storage_Error, when wrap-around arithmetic might compute
+ -- a meangingless size for the object.
+ --
+ -- The guard raises Storage_Error when
+ --
+ -- (Arr'Last / 2 - Arr'First / 2) > (2 ** 30)
+ --
function Value (Item : chars_ptr) return char_array with
Pre => Item /= Null_Ptr,
Global => (Input => C_Memory);
diff --git a/gcc/ada/libgnat/s-excdeb.adb b/gcc/ada/libgnat/s-excdeb.adb
index 5cbd6c0..4ad8478 100644
--- a/gcc/ada/libgnat/s-excdeb.adb
+++ b/gcc/ada/libgnat/s-excdeb.adb
@@ -69,7 +69,7 @@ package body System.Exceptions_Debug is
procedure Local_Raise (Excep : System.Address) is
pragma Warnings (Off, Excep);
begin
- return;
+ null;
end Local_Raise;
end System.Exceptions_Debug;
diff --git a/gcc/ada/libgnat/s-stausa.adb b/gcc/ada/libgnat/s-stausa.adb
index 6bdbc43..cbecc0b 100644
--- a/gcc/ada/libgnat/s-stausa.adb
+++ b/gcc/ada/libgnat/s-stausa.adb
@@ -188,7 +188,8 @@ package body System.Stack_Usage is
-- allocated byte on the stack.
begin
if Parameters.Stack_Grows_Down then
- if Analyzer.Stack_Base - Stack_Address (Analyzer.Pattern_Size) >
+ if To_Stack_Address (Analyzer.Stack_Base) -
+ Stack_Address (Analyzer.Pattern_Size) >
To_Stack_Address (Current_Stack_Level'Address) - Guard
then
-- No room for a pattern
@@ -198,22 +199,22 @@ package body System.Stack_Usage is
end if;
Analyzer.Pattern_Limit :=
- Analyzer.Stack_Base - Stack_Address (Analyzer.Pattern_Size);
+ Analyzer.Stack_Base - Storage_Offset (Analyzer.Pattern_Size);
- if Analyzer.Stack_Base >
+ if To_Stack_Address (Analyzer.Stack_Base) >
To_Stack_Address (Current_Stack_Level'Address) - Guard
then
-- Reduce pattern size to prevent local frame overwrite
Analyzer.Pattern_Size :=
Integer (To_Stack_Address (Current_Stack_Level'Address) - Guard
- - Analyzer.Pattern_Limit);
+ - To_Stack_Address (Analyzer.Pattern_Limit));
end if;
- Analyzer.Pattern_Overlay_Address :=
- To_Address (Analyzer.Pattern_Limit);
+ Analyzer.Pattern_Overlay_Address := Analyzer.Pattern_Limit;
else
- if Analyzer.Stack_Base + Stack_Address (Analyzer.Pattern_Size) <
+ if To_Stack_Address (Analyzer.Stack_Base) +
+ Stack_Address (Analyzer.Pattern_Size) <
To_Stack_Address (Current_Stack_Level'Address) + Guard
then
-- No room for a pattern
@@ -223,22 +224,21 @@ package body System.Stack_Usage is
end if;
Analyzer.Pattern_Limit :=
- Analyzer.Stack_Base + Stack_Address (Analyzer.Pattern_Size);
+ Analyzer.Stack_Base + Storage_Offset (Analyzer.Pattern_Size);
- if Analyzer.Stack_Base <
+ if To_Stack_Address (Analyzer.Stack_Base) <
To_Stack_Address (Current_Stack_Level'Address) + Guard
then
-- Reduce pattern size to prevent local frame overwrite
Analyzer.Pattern_Size :=
Integer
- (Analyzer.Pattern_Limit -
+ (To_Stack_Address (Analyzer.Pattern_Limit) -
(To_Stack_Address (Current_Stack_Level'Address) + Guard));
end if;
Analyzer.Pattern_Overlay_Address :=
- To_Address (Analyzer.Pattern_Limit -
- Stack_Address (Analyzer.Pattern_Size));
+ Analyzer.Pattern_Limit - Storage_Offset (Analyzer.Pattern_Size);
end if;
-- Declare and fill the pattern buffer
@@ -270,7 +270,7 @@ package body System.Stack_Usage is
(Analyzer : in out Stack_Analyzer;
Task_Name : String;
Stack_Size : Natural;
- Stack_Base : Stack_Address;
+ Stack_Base : System.Address;
Pattern_Size : Natural;
Pattern : Interfaces.Unsigned_32 := 16#DEAD_BEEF#)
is
@@ -332,10 +332,10 @@ package body System.Stack_Usage is
if Parameters.Stack_Grows_Down then
Analyzer.Topmost_Touched_Mark :=
- Analyzer.Pattern_Limit + Stack_Address (Analyzer.Pattern_Size);
+ Analyzer.Pattern_Limit + Storage_Offset (Analyzer.Pattern_Size);
else
Analyzer.Topmost_Touched_Mark :=
- Analyzer.Pattern_Limit - Stack_Address (Analyzer.Pattern_Size);
+ Analyzer.Pattern_Limit - Storage_Offset (Analyzer.Pattern_Size);
end if;
if Analyzer.Pattern_Size = 0 then
@@ -349,8 +349,7 @@ package body System.Stack_Usage is
if System.Parameters.Stack_Grows_Down then
for J in Stack'Range loop
if Stack (J) /= Analyzer.Pattern then
- Analyzer.Topmost_Touched_Mark :=
- To_Stack_Address (Stack (J)'Address);
+ Analyzer.Topmost_Touched_Mark := Stack (J)'Address;
exit;
end if;
end loop;
@@ -358,8 +357,7 @@ package body System.Stack_Usage is
else
for J in reverse Stack'Range loop
if Stack (J) /= Analyzer.Pattern then
- Analyzer.Topmost_Touched_Mark :=
- To_Stack_Address (Stack (J)'Address);
+ Analyzer.Topmost_Touched_Mark := Stack (J)'Address;
exit;
end if;
end loop;
@@ -514,8 +512,9 @@ package body System.Stack_Usage is
Result.Value := Analyzer.Stack_Size;
else
- Result.Value := Stack_Size (Analyzer.Topmost_Touched_Mark,
- Analyzer.Stack_Base);
+ Result.Value :=
+ Stack_Size (To_Stack_Address (Analyzer.Topmost_Touched_Mark),
+ To_Stack_Address (Analyzer.Stack_Base));
end if;
if Analyzer.Result_Id in Result_Array'Range then
diff --git a/gcc/ada/libgnat/s-stausa.ads b/gcc/ada/libgnat/s-stausa.ads
index c67b124..36cebd7 100644
--- a/gcc/ada/libgnat/s-stausa.ads
+++ b/gcc/ada/libgnat/s-stausa.ads
@@ -230,7 +230,7 @@ package System.Stack_Usage is
(Analyzer : in out Stack_Analyzer;
Task_Name : String;
Stack_Size : Natural;
- Stack_Base : Stack_Address;
+ Stack_Base : System.Address;
Pattern_Size : Natural;
Pattern : Interfaces.Unsigned_32 := 16#DEAD_BEEF#);
-- Should be called before any use of a Stack_Analyzer, to initialize it.
@@ -287,7 +287,7 @@ private
Task_Name : String (1 .. Task_Name_Length);
-- Name of the task
- Stack_Base : Stack_Address;
+ Stack_Base : System.Address;
-- Address of the base of the stack, as given by the caller of
-- Initialize_Analyzer.
@@ -300,10 +300,10 @@ private
Pattern : Pattern_Type;
-- Pattern used to recognize untouched memory
- Pattern_Limit : Stack_Address;
+ Pattern_Limit : System.Address;
-- Bound of the pattern area farthest to the base
- Topmost_Touched_Mark : Stack_Address;
+ Topmost_Touched_Mark : System.Address;
-- Topmost address of the pattern area whose value it is pointing
-- at has been modified during execution. If the systematic error are
-- compensated, it is the topmost value of the stack pointer during
diff --git a/gcc/ada/libgnat/s-trasym__dwarf.adb b/gcc/ada/libgnat/s-trasym__dwarf.adb
index 1b4b807..479b5d3 100644
--- a/gcc/ada/libgnat/s-trasym__dwarf.adb
+++ b/gcc/ada/libgnat/s-trasym__dwarf.adb
@@ -479,7 +479,7 @@ package body System.Traceback.Symbolic is
exception
when others =>
- return;
+ null;
end Module_Symbolic_Traceback;
-------------------------------------
diff --git a/gcc/ada/libgnat/s-valued.adb b/gcc/ada/libgnat/s-valued.adb
index 4f2e102..b7982b6 100644
--- a/gcc/ada/libgnat/s-valued.adb
+++ b/gcc/ada/libgnat/s-valued.adb
@@ -228,9 +228,9 @@ package body System.Value_D is
raise Program_Error;
end if;
- -- Perform a scaled divide operation with rounding to match 'Image
+ -- Perform a scaled divide operation with truncation
- Scaled_Divide (To_Signed (V), Y, Z, Q, R, Round => True);
+ Scaled_Divide (To_Signed (V), Y, Z, Q, R, Round => False);
return Q;
end;
diff --git a/gcc/ada/libgnat/s-valuef.adb b/gcc/ada/libgnat/s-valuef.adb
index 1743749..f38f2cc 100644
--- a/gcc/ada/libgnat/s-valuef.adb
+++ b/gcc/ada/libgnat/s-valuef.adb
@@ -36,12 +36,13 @@ 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).
+ -- operands of the scaled divide does not unduly overflow, which means
+ -- that the numerator and the denominator of the small 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, except
+ -- when the numerator is 1, in which case up to 2**(Int'Size - 1) is
+ -- permitted for the denominator. Given that the largest supported base
+ -- is 16, this gives a limit of 2**(Int'Size - 5) in the general case.
pragma Assert (Int'Size <= Uns'Size);
-- We need an unsigned type large enough to represent the mantissa
@@ -135,6 +136,9 @@ package body System.Value_F is
-- Num * (Base ** -ScaleB) <= Num * (B ** N) < Den * B
-- which means that the product does not overflow if Den <= 2**(M-1) / B.
+ -- Moreover, if 2**(M-1) / B < Den <= 2**(M-1), we can add 1 to ScaleB and
+ -- divide Val by B while preserving the rightmost B-digit of Val in Extra2
+ -- without changing the computation when Num = 1.
----------------------
-- Integer_To_Fixed --
diff --git a/gcc/ada/par-endh.adb b/gcc/ada/par-endh.adb
index 12baed4..8166705 100644
--- a/gcc/ada/par-endh.adb
+++ b/gcc/ada/par-endh.adb
@@ -300,7 +300,7 @@ package body Endh is
else
End_Labl := Scopes (Scope.Last).Labl;
- if End_Labl > Empty_Or_Error then
+ if End_Labl not in Empty | Error then
-- The task here is to construct a designator from the
-- opening label, with the components all marked as not
@@ -658,8 +658,6 @@ package body Endh is
Scan; -- past junk token on same line
end loop;
end if;
-
- return;
end End_Skip;
--------------------
@@ -921,7 +919,7 @@ package body Endh is
-- Suppress message if error was posted on opening label
- if Error_Msg_Node_1 > Empty_Or_Error
+ if Error_Msg_Node_1 not in Empty | Error
and then Error_Posted (Error_Msg_Node_1)
then
return;
diff --git a/gcc/ada/par-tchk.adb b/gcc/ada/par-tchk.adb
index 803d3a2..e59d6b4 100644
--- a/gcc/ada/par-tchk.adb
+++ b/gcc/ada/par-tchk.adb
@@ -513,7 +513,6 @@ package body Tchk is
Error_Msg_AP -- CODEFIX
("|missing "";""");
- return;
end T_Semicolon;
------------
diff --git a/gcc/ada/repinfo.adb b/gcc/ada/repinfo.adb
index 1d616db..bbf92a7 100644
--- a/gcc/ada/repinfo.adb
+++ b/gcc/ada/repinfo.adb
@@ -1239,15 +1239,25 @@ package body Repinfo is
function First_Comp_Or_Discr (Ent : Entity_Id) return Entity_Id is
function Is_Placed_Before (C1, C2 : Entity_Id) return Boolean;
- -- Return True if component C1 is placed before component C2
+ -- Return True if components C1 and C2 are in the same component
+ -- list and component C1 is placed before component C2 in there.
----------------------
-- Is_Placed_Before --
----------------------
function Is_Placed_Before (C1, C2 : Entity_Id) return Boolean is
+ L1 : constant Node_Id := Parent (Parent (C1));
+ L2 : constant Node_Id := Parent (Parent (C2));
+
begin
- return Known_Static_Component_Bit_Offset (C1)
+ -- Discriminants and top-level components are considered to be
+ -- in the same list, although this is not syntactically true.
+
+ return (L1 = L2
+ or else (Nkind (Parent (L1)) /= N_Variant
+ and then Nkind (Parent (L2)) /= N_Variant))
+ and then Known_Static_Component_Bit_Offset (C1)
and then Known_Static_Component_Bit_Offset (C2)
and then
Component_Bit_Offset (C1) < Component_Bit_Offset (C2);
diff --git a/gcc/ada/sem.adb b/gcc/ada/sem.adb
index dcff62e..e168d62 100644
--- a/gcc/ada/sem.adb
+++ b/gcc/ada/sem.adb
@@ -1401,7 +1401,6 @@ package body Sem is
Prev => Global_Suppress_Stack_Top,
Next => Suppress_Stack_Entries);
Suppress_Stack_Entries := Global_Suppress_Stack_Top;
- return;
end Push_Global_Suppress_Stack_Entry;
-------------------------------------
@@ -1422,8 +1421,6 @@ package body Sem is
Prev => Local_Suppress_Stack_Top,
Next => Suppress_Stack_Entries);
Suppress_Stack_Entries := Local_Suppress_Stack_Top;
-
- return;
end Push_Local_Suppress_Stack_Entry;
---------------
diff --git a/gcc/ada/sem_attr.adb b/gcc/ada/sem_attr.adb
index 4f5047f..9602944 100644
--- a/gcc/ada/sem_attr.adb
+++ b/gcc/ada/sem_attr.adb
@@ -1448,9 +1448,10 @@ package body Sem_Attr is
null;
-- Attribute 'Result is allowed to appear in aspect
- -- Relaxed_Initialization (SPARK RM 6.10).
+ -- Relaxed_Initialization (SPARK RM 6.10) and Potentially_Invalid.
- elsif Prag_Nam = Name_Relaxed_Initialization
+ elsif (Prag_Nam = Name_Relaxed_Initialization
+ or else Prag_Nam = Name_Potentially_Invalid)
and then Aname = Name_Result
then
null;
@@ -7766,7 +7767,6 @@ package body Sem_Attr is
when Bad_Attribute =>
Set_Analyzed (N);
Set_Etype (N, Any_Type);
- return;
end Analyze_Attribute;
--------------------
diff --git a/gcc/ada/sem_ch10.adb b/gcc/ada/sem_ch10.adb
index 45aabad..f58513d 100644
--- a/gcc/ada/sem_ch10.adb
+++ b/gcc/ada/sem_ch10.adb
@@ -1491,6 +1491,10 @@ package body Sem_Ch10 is
-- No checks required if no separate spec
or else Acts_As_Spec (N)
+
+ -- No checked needed for ignored ghost units
+
+ or else Is_Ignored_Ghost_Entity (Spec_Id)
)
then
-- This is a case where we only need the entity for checking to
@@ -3295,7 +3299,7 @@ package body Sem_Ch10 is
-- the renamed unit, and the renaming declaration itself has not
-- been analyzed.
- Analyze (Parent (Parent (Entity (Pref))));
+ Semantics (Parent (Parent (Entity (Pref))));
pragma Assert (Renamed_Entity (Entity (Pref)) = Par_Name);
Par_Name := Entity (Pref);
end if;
diff --git a/gcc/ada/sem_ch12.adb b/gcc/ada/sem_ch12.adb
index f492b23..e80aea5 100644
--- a/gcc/ada/sem_ch12.adb
+++ b/gcc/ada/sem_ch12.adb
@@ -3171,7 +3171,7 @@ package body Sem_Ch12 is
end if;
end if;
- if Subtype_Mark (Def) <= Empty_Or_Error then
+ if Subtype_Mark (Def) in Empty | Error then
pragma Assert (Serious_Errors_Detected > 0);
-- avoid passing bad argument to Entity
return;
@@ -11131,13 +11131,9 @@ package body Sem_Ch12 is
begin
-- If this parent of the child instance is a top-level unit,
-- then record the unit and its visibility for later resetting in
- -- Remove_Parent. We exclude units that are generic instances, as we
- -- only want to record this information for the ultimate top-level
- -- noninstance parent (is that always correct???).
+ -- Remove_Parent.
- if Scope (Par) = Standard_Standard
- and then not Is_Generic_Instance (Par)
- then
+ if Scope (Par) = Standard_Standard then
Parent_Unit_Visible := Is_Immediately_Visible (Par);
Instance_Parent_Unit := Par;
end if;
@@ -16338,39 +16334,43 @@ package body Sem_Ch12 is
Install_Private_Declarations (P);
end if;
- -- If the ultimate parent is a top-level unit recorded in
- -- Instance_Parent_Unit, then reset its visibility to what it was
- -- before instantiation. (It's not clear what the purpose is of
- -- testing whether Scope (P) is In_Open_Scopes, but that test was
- -- present before the ultimate parent test was added.???)
-
- elsif not In_Open_Scopes (Scope (P))
- or else (P = Instance_Parent_Unit
- and then not Parent_Unit_Visible)
- then
- Set_Is_Immediately_Visible (P, False);
+ else
+ -- If the ultimate parent is a top-level unit recorded in
+ -- Instance_Parent_Unit, then reset its visibility to what
+ -- it was before instantiation. (It's not clear what the
+ -- purpose is of testing whether Scope (P) is In_Open_Scopes,
+ -- but that test was present before the ultimate parent test
+ -- was added.???)
+
+ if not In_Open_Scopes (Scope (P))
+ or else (P = Instance_Parent_Unit
+ and then not Parent_Unit_Visible)
+ then
+ Set_Is_Immediately_Visible (P, False);
+ end if;
- -- If the current scope is itself an instantiation of a generic
- -- nested within P, and we are in the private part of body of this
- -- instantiation, restore the full views of P, that were removed
- -- in End_Package_Scope above. This obscure case can occur when a
- -- subunit of a generic contains an instance of a child unit of
- -- its generic parent unit.
+ -- If the current scope is itself an instantiation of a generic
+ -- nested within P, and we are in the private part of body of
+ -- the instantiation, restore the full views of P, which were
+ -- removed in End_Package_Scope above. This obscure case can
+ -- occur when a subunit of a generic contains an instance of
+ -- a child unit of its generic parent unit.
- elsif S = Current_Scope and then Is_Generic_Instance (S)
- and then (In_Package_Body (S) or else In_Private_Part (S))
- then
- declare
- Par : constant Entity_Id :=
- Generic_Parent (Package_Specification (S));
- begin
- if Present (Par)
- and then P = Scope (Par)
- then
- Set_In_Private_Part (P);
- Install_Private_Declarations (P);
- end if;
- end;
+ if S = Current_Scope and then Is_Generic_Instance (S)
+ and then (In_Package_Body (S) or else In_Private_Part (S))
+ then
+ declare
+ Par : constant Entity_Id :=
+ Generic_Parent (Package_Specification (S));
+ begin
+ if Present (Par)
+ and then P = Scope (Par)
+ then
+ Set_In_Private_Part (P);
+ Install_Private_Declarations (P);
+ end if;
+ end;
+ end if;
end if;
end loop;
diff --git a/gcc/ada/sem_ch13.adb b/gcc/ada/sem_ch13.adb
index dcca3fc..1e88ef4 100644
--- a/gcc/ada/sem_ch13.adb
+++ b/gcc/ada/sem_ch13.adb
@@ -1930,6 +1930,9 @@ package body Sem_Ch13 is
procedure Analyze_Aspect_Implicit_Dereference;
-- Perform analysis of the Implicit_Dereference aspects
+ procedure Analyze_Aspect_Potentially_Invalid;
+ -- Perform analysis of aspect Potentially_Invalid
+
procedure Analyze_Aspect_Relaxed_Initialization;
-- Perform analysis of aspect Relaxed_Initialization
@@ -2297,6 +2300,267 @@ package body Sem_Ch13 is
end Analyze_Aspect_Implicit_Dereference;
+ ----------------------------------------
+ -- Analyze_Aspect_Potentially_Invalid --
+ ----------------------------------------
+
+ procedure Analyze_Aspect_Potentially_Invalid is
+ procedure Analyze_Aspect_Parameter
+ (Subp_Id : Entity_Id;
+ Param : Node_Id;
+ Seen : in out Elist_Id);
+ -- Analyze parameter that appears in the expression of the
+ -- aspect Potentially_Invalid.
+
+ ------------------------------
+ -- Analyze_Aspect_Parameter --
+ ------------------------------
+
+ procedure Analyze_Aspect_Parameter
+ (Subp_Id : Entity_Id;
+ Param : Node_Id;
+ Seen : in out Elist_Id)
+ is
+ begin
+ -- Set name of the aspect for error messages
+ Error_Msg_Name_1 := Nam;
+
+ -- The potentially invalid parameter is a formal parameter
+
+ if Nkind (Param) in N_Identifier | N_Expanded_Name then
+ Analyze (Param);
+
+ declare
+ Item : constant Entity_Id := Entity (Param);
+ begin
+ -- It must be a formal of the analyzed subprogram
+
+ if Scope (Item) = Subp_Id then
+
+ pragma Assert (Is_Formal (Item));
+
+ -- It must not have scalar type
+
+ if Is_Scalar_Type (Underlying_Type (Etype (Item)))
+ then
+ Error_Msg_N ("illegal aspect % item", Param);
+ Error_Msg_N
+ ("\item must not have scalar type", Param);
+ end if;
+
+ -- Detect duplicated items
+
+ if Contains (Seen, Item) then
+ Error_Msg_N ("duplicate aspect % item", Param);
+ else
+ Append_New_Elmt (Item, Seen);
+ end if;
+ else
+ Error_Msg_N ("illegal aspect % item", Param);
+ end if;
+ end;
+
+ -- The potentially invalid parameter is the function's
+ -- Result attribute.
+
+ elsif Is_Attribute_Result (Param) then
+ Analyze (Param);
+
+ declare
+ Pref : constant Node_Id := Prefix (Param);
+ begin
+ if Present (Pref)
+ and then
+ Nkind (Pref) in N_Identifier | N_Expanded_Name
+ and then
+ Entity (Pref) = Subp_Id
+ then
+ -- Detect duplicated items
+
+ if Contains (Seen, Subp_Id) then
+ Error_Msg_N ("duplicate aspect % item", Param);
+ else
+ Append_New_Elmt (Entity (Pref), Seen);
+ end if;
+
+ else
+ Error_Msg_N ("illegal aspect % item", Param);
+ end if;
+ end;
+ else
+ Error_Msg_N ("illegal aspect % item", Param);
+ end if;
+ end Analyze_Aspect_Parameter;
+
+ -- Local variables
+
+ Seen : Elist_Id := No_Elist;
+ -- Items that appear in the potentially invalid aspect
+ -- expression of a subprogram; for detecting duplicates.
+
+ Restore_Scope : Boolean;
+ -- Will be set to True if we need to restore the scope table
+ -- after analyzing the aspect expression.
+
+ -- Start of processing for Analyze_Aspect_Potentially_Invalid
+
+ begin
+ -- Set name of the aspect for error messages
+ Error_Msg_Name_1 := Nam;
+
+ -- Annotation of a variable; no aspect expression is allowed
+
+ if Ekind (E) = E_Variable then
+ if Present (Expr) then
+ Error_Msg_N ("illegal aspect % expression", Expr);
+ end if;
+
+ -- Annotation of a constant; no aspect expression is allowed.
+ -- For a deferred constant, the aspect must be attached to the
+ -- partial view.
+
+ elsif Ekind (E) = E_Constant then
+ if Present (Incomplete_Or_Partial_View (E)) then
+ Error_Msg_N
+ ("aspect % must apply to deferred constant", N);
+
+ elsif Present (Expr) then
+ Error_Msg_N ("illegal aspect % expression", Expr);
+ end if;
+
+ -- Annotation of a subprogram; aspect expression is required
+
+ elsif Is_Subprogram_Or_Entry (E)
+ or else Is_Generic_Subprogram (E)
+ then
+
+ -- Not allowed for renaming declarations. Examine the
+ -- original node because a subprogram renaming may have been
+ -- rewritten as a body.
+
+ if Nkind (Original_Node (N)) in N_Renaming_Declaration then
+ Error_Msg_N
+ ("aspect % not allowed for renaming declaration",
+ Aspect);
+ end if;
+
+ if Present (Expr) then
+
+ -- If we analyze subprogram body that acts as its own
+ -- spec, then the subprogram itself and its formals are
+ -- already installed; otherwise, we need to install them,
+ -- as they must be visible when analyzing the aspect
+ -- expression.
+
+ if In_Open_Scopes (E) then
+ Restore_Scope := False;
+ else
+ Restore_Scope := True;
+ Push_Scope (E);
+
+ -- Only formals of the subprogram itself can appear
+ -- in Potentially_Invalid aspect expression, not
+ -- formals of the enclosing generic unit. (This is
+ -- different than in Precondition or Depends aspects,
+ -- where both kinds of formals are allowed.)
+
+ Install_Formals (E);
+ end if;
+
+ -- Aspect expression is either an aggregate with list of
+ -- parameters (and possibly the Result attribute for a
+ -- function).
+
+ if Nkind (Expr) = N_Aggregate then
+
+ -- Component associations in the aggregate must be a
+ -- parameter name followed by a static boolean
+ -- expression.
+
+ if Present (Component_Associations (Expr)) then
+ declare
+ Assoc : Node_Id :=
+ First (Component_Associations (Expr));
+ begin
+ while Present (Assoc) loop
+ if List_Length (Choices (Assoc)) = 1 then
+ Analyze_Aspect_Parameter
+ (E, First (Choices (Assoc)), Seen);
+
+ if Inside_A_Generic then
+ Preanalyze_And_Resolve
+ (Expression (Assoc), Any_Boolean);
+ else
+ Analyze_And_Resolve
+ (Expression (Assoc), Any_Boolean);
+ end if;
+
+ if not Is_OK_Static_Expression
+ (Expression (Assoc))
+ then
+ Error_Msg_Name_1 := Nam;
+ Flag_Non_Static_Expr
+ ("expression of aspect % " &
+ "must be static!", Aspect);
+ end if;
+
+ else
+ Error_Msg_Name_1 := Nam;
+ Error_Msg_N
+ ("illegal aspect % expression", Expr);
+ end if;
+ Next (Assoc);
+ end loop;
+ end;
+ end if;
+
+ -- Expressions of the aggregate are parameter names
+
+ if Present (Expressions (Expr)) then
+ declare
+ Param : Node_Id := First (Expressions (Expr));
+
+ begin
+ while Present (Param) loop
+ Analyze_Aspect_Parameter (E, Param, Seen);
+ Next (Param);
+ end loop;
+ end;
+ end if;
+
+ -- Mark the aggregate expression itself as analyzed;
+ -- its subexpressions were marked when they themselves
+ -- were analyzed.
+
+ Set_Analyzed (Expr);
+
+ -- Otherwise, it is a single name of a subprogram
+ -- parameter (or possibly the Result attribute for
+ -- a function).
+
+ else
+ Analyze_Aspect_Parameter (E, Expr, Seen);
+ end if;
+
+ if Restore_Scope then
+ End_Scope;
+ end if;
+
+ -- For instances of Ada.Unchecked_Conversion, allow a
+ -- parameterless aspect, as the 'Result attribute is not
+ -- defined there.
+
+ elsif Is_Unchecked_Conversion_Instance (E) then
+ null;
+ else
+ Error_Msg_N ("missing expression for aspect %", N);
+ end if;
+
+ else
+ Error_Msg_N ("inappropriate entity for aspect %", E);
+ end if;
+ end Analyze_Aspect_Potentially_Invalid;
+
-------------------------------------------
-- Analyze_Aspect_Relaxed_Initialization --
-------------------------------------------
@@ -4075,6 +4339,12 @@ package body Sem_Ch13 is
goto Continue;
+ -- Potentially_Invalid
+
+ when Aspect_Potentially_Invalid =>
+ Analyze_Aspect_Potentially_Invalid;
+ goto Continue;
+
-- SPARK_Mode
when Aspect_SPARK_Mode =>
@@ -11491,6 +11761,7 @@ package body Sem_Ch13 is
| Aspect_Part_Of
| Aspect_Post
| Aspect_Postcondition
+ | Aspect_Potentially_Invalid
| Aspect_Pre
| Aspect_Precondition
| Aspect_Program_Exit
diff --git a/gcc/ada/sem_ch13.ads b/gcc/ada/sem_ch13.ads
index 9bf1ce3..f2c5f70 100644
--- a/gcc/ada/sem_ch13.ads
+++ b/gcc/ada/sem_ch13.ads
@@ -43,8 +43,7 @@ package Sem_Ch13 is
procedure Analyze_Aspect_Specifications (N : Node_Id; E : Entity_Id);
-- This procedure is called to analyze aspect specifications for node N. E
- -- is the corresponding entity declared by the declaration node N. Callers
- -- should check that Has_Aspects (N) is True before calling this routine.
+ -- is the corresponding entity declared by the declaration node N.
procedure Analyze_Aspects_On_Subprogram_Body_Or_Stub (N : Node_Id);
-- Analyze the aspect specifications of [generic] subprogram body or stub
diff --git a/gcc/ada/sem_ch3.adb b/gcc/ada/sem_ch3.adb
index 45b28bf..5354d82 100644
--- a/gcc/ada/sem_ch3.adb
+++ b/gcc/ada/sem_ch3.adb
@@ -4163,7 +4163,7 @@ package body Sem_Ch3 is
procedure Check_Return_Subtype_Indication (Obj_Decl : Node_Id) is
Obj_Id : constant Entity_Id := Defining_Identifier (Obj_Decl);
- Obj_Typ : constant Entity_Id := Etype (Obj_Id);
+ Obj_Typ : Entity_Id := Etype (Obj_Id);
Func_Id : constant Entity_Id := Return_Applies_To (Scope (Obj_Id));
R_Typ : constant Entity_Id := Etype (Func_Id);
Indic : constant Node_Id :=
@@ -4199,6 +4199,15 @@ package body Sem_Ch3 is
return;
end if;
+ -- The return object type could have been rewritten into a
+ -- constrained type, so for the legality checks that follow we need
+ -- to recover the nominal unconstrained type.
+
+ if Is_Constr_Subt_For_U_Nominal (Obj_Typ) then
+ Obj_Typ := Entity (Original_Node (Object_Definition (Obj_Decl)));
+ pragma Assert (not Is_Constrained (Obj_Typ));
+ end if;
+
-- "return access T" case; check that the return statement also has
-- "access T", and that the subtypes statically match:
-- if this is an access to subprogram the signatures must match.
@@ -4267,7 +4276,7 @@ package body Sem_Ch3 is
-- AI05-103: for elementary types, subtypes must statically match
- if Is_Constrained (R_Typ) or else Is_Access_Type (R_Typ) then
+ if Is_Elementary_Type (R_Typ) then
if not Subtypes_Statically_Match (Obj_Typ, R_Typ) then
Error_No_Match (Indic);
end if;
@@ -4283,13 +4292,12 @@ package body Sem_Ch3 is
-- code is expanded on the basis of the base type (see subprogram
-- Stream_Base_Type).
- elsif Nkind (Indic) = N_Subtype_Indication
- and then not Subtypes_Statically_Compatible (Obj_Typ, R_Typ)
+ elsif not Subtypes_Statically_Compatible (Obj_Typ, R_Typ)
and then not Is_TSS (Func_Id, TSS_Stream_Input)
then
Error_Msg_N
("result subtype must be statically compatible with the " &
- "function result type", Indic);
+ "function result subtype", Indic);
if not Predicates_Compatible (Obj_Typ, R_Typ) then
Error_Msg_NE
@@ -19159,8 +19167,7 @@ package body Sem_Ch3 is
-- Otherwise we have a subtype mark without a constraint
elsif Error_Posted (S) then
- -- Don't rewrite if S is Empty or Error
- if S > Empty_Or_Error then
+ if S not in Empty | Error then
Rewrite (S, New_Occurrence_Of (Any_Id, Sloc (S)));
end if;
return Any_Type;
@@ -21094,7 +21101,7 @@ package body Sem_Ch3 is
-- If no range was given, set a dummy range
- if RRS <= Empty_Or_Error then
+ if RRS in Empty | Error then
Low_Val := -Small_Val;
High_Val := Small_Val;
diff --git a/gcc/ada/sem_ch6.adb b/gcc/ada/sem_ch6.adb
index 7bce7fb..48dcf8e 100644
--- a/gcc/ada/sem_ch6.adb
+++ b/gcc/ada/sem_ch6.adb
@@ -7831,7 +7831,6 @@ package body Sem_Ch6 is
end if;
Overridden_Subp := Candidate;
- return;
end;
end Check_Synchronized_Overriding;
diff --git a/gcc/ada/sem_disp.adb b/gcc/ada/sem_disp.adb
index d133676..9d03eff 100644
--- a/gcc/ada/sem_disp.adb
+++ b/gcc/ada/sem_disp.adb
@@ -587,7 +587,7 @@ package body Sem_Disp is
Formal : Entity_Id;
Control : Node_Id := Empty;
Func : Entity_Id;
- Subp_Entity : Entity_Id;
+ Subp_Entity : constant Entity_Id := Entity (Name (N));
Indeterm_Ctrl_Type : Entity_Id := Empty;
-- Type of a controlling formal whose actual is a tag-indeterminate call
@@ -968,7 +968,6 @@ package body Sem_Disp is
-- Find a controlling argument, if any
if Present (Parameter_Associations (N)) then
- Subp_Entity := Entity (Name (N));
Actual := First_Actual (N);
Formal := First_Formal (Subp_Entity);
diff --git a/gcc/ada/sem_elab.adb b/gcc/ada/sem_elab.adb
index 6547813..77b1e12 100644
--- a/gcc/ada/sem_elab.adb
+++ b/gcc/ada/sem_elab.adb
@@ -15236,7 +15236,15 @@ package body Sem_Elab is
end if;
Body_Decl := Unit_Declaration_Node (Body_Id);
- Region := Find_Early_Call_Region (Body_Decl);
+
+ -- For subprogram bodies in subunits we check where the subprogram
+ -- body stub is declared.
+
+ if Nkind (Parent (Body_Decl)) = N_Subunit then
+ Body_Decl := Corresponding_Stub (Parent (Body_Decl));
+ end if;
+
+ Region := Find_Early_Call_Region (Body_Decl);
-- The freeze node appears prior to the early call region of the
-- primitive body.
diff --git a/gcc/ada/sem_elim.adb b/gcc/ada/sem_elim.adb
index 6bd3b77..7d9dca8 100644
--- a/gcc/ada/sem_elim.adb
+++ b/gcc/ada/sem_elim.adb
@@ -713,8 +713,6 @@ package body Sem_Elim is
<<Continue>>
Elmt := Elmt.Homonym;
end loop;
-
- return;
end Check_Eliminated;
-------------------------------------
diff --git a/gcc/ada/sem_eval.adb b/gcc/ada/sem_eval.adb
index 2d64d84..f970932 100644
--- a/gcc/ada/sem_eval.adb
+++ b/gcc/ada/sem_eval.adb
@@ -3997,7 +3997,6 @@ package body Sem_Eval is
-- Otherwise the result depends on the right operand
Fold_Uint (N, Expr_Value (Right), Rstat);
- return;
end Eval_Short_Circuit;
----------------
diff --git a/gcc/ada/sem_util.adb b/gcc/ada/sem_util.adb
index 4e3c625..74de26a 100644
--- a/gcc/ada/sem_util.adb
+++ b/gcc/ada/sem_util.adb
@@ -52,6 +52,7 @@ with Sem_Attr; use Sem_Attr;
with Sem_Cat; use Sem_Cat;
with Sem_Ch6; use Sem_Ch6;
with Sem_Ch8; use Sem_Ch8;
+with Sem_Ch12; use Sem_Ch12;
with Sem_Ch13; use Sem_Ch13;
with Sem_Dim; use Sem_Dim;
with Sem_Disp; use Sem_Disp;
@@ -12837,6 +12838,150 @@ package body Sem_Util is
return False;
end Has_Overriding_Initialize;
+ -----------------------------
+ -- Has_Potentially_Invalid --
+ -----------------------------
+
+ function Has_Potentially_Invalid (E : Entity_Id) return Boolean is
+
+ function Denotes_Invalid_Parameter
+ (Expr : Node_Id;
+ Param : Entity_Id)
+ return Boolean;
+ -- Returns True iff expression Expr denotes a formal parameter or
+ -- function Param (through its attribute Result).
+
+ -------------------------------
+ -- Denotes_Invalid_Parameter --
+ -------------------------------
+
+ function Denotes_Invalid_Parameter
+ (Expr : Node_Id;
+ Param : Entity_Id) return Boolean is
+ begin
+ if Nkind (Expr) in N_Identifier | N_Expanded_Name then
+ return Entity (Expr) = Param;
+ else
+ pragma Assert (Is_Attribute_Result (Expr));
+ return Entity (Prefix (Expr)) = Param;
+ end if;
+ end Denotes_Invalid_Parameter;
+
+ -- Start of processing for Has_Potentially_Invalid
+
+ begin
+ -- When analyzing, we checked all syntax legality rules for the aspect
+ -- Potentially_Invalid, but didn't store the property anywhere (e.g. as
+ -- an Einfo flag). To query the property we look directly at the AST,
+ -- but now without any syntactic checks.
+
+ case Ekind (E) is
+ -- Constants have this aspect attached directly; for deferred
+ -- constants, the aspect is attached to the partial view.
+
+ when E_Constant =>
+ return Has_Aspect (E, Aspect_Potentially_Invalid);
+
+ -- Variables have this aspect attached directly
+
+ when E_Variable =>
+ return Has_Aspect (E, Aspect_Potentially_Invalid);
+
+ when Formal_Kind
+ | E_Function
+ =>
+ -- Instances of Ada.Unchecked_Conversion is a special case. Look
+ -- for the aspect on the generic instance. The aspect necessarily
+ -- applies to the function result.
+
+ if Is_Unchecked_Conversion_Instance (E) then
+ declare
+ Wrapper_Pkg : constant Node_Id :=
+ Defining_Unit_Name (Parent (Subprogram_Spec (E)));
+ pragma Assert (Is_Wrapper_Package (Wrapper_Pkg));
+ Instance : constant Entity_Id := Defining_Unit_Name
+ (Get_Unit_Instantiation_Node (Wrapper_Pkg));
+ begin
+ return Has_Aspect (Instance, Aspect_Potentially_Invalid);
+ end;
+ end if;
+
+ -- Formal parameters and functions have the Potentially_Invalid
+ -- aspect attached to the subprogram entity and must be listed in
+ -- the aspect expression.
+
+ declare
+ Subp_Id : Entity_Id;
+ Aspect_Expr : Node_Id;
+ Param_Expr : Node_Id;
+ Assoc : Node_Id;
+
+ begin
+ if Is_Formal (E) then
+ Subp_Id := Scope (E);
+ else
+ Subp_Id := E;
+ end if;
+
+ if Has_Aspect (Subp_Id, Aspect_Potentially_Invalid) then
+ Aspect_Expr :=
+ Find_Value_Of_Aspect
+ (Subp_Id, Aspect_Potentially_Invalid);
+
+ -- Aspect expression is either an aggregate with an optional
+ -- Boolean expression (which defaults to True), e.g.:
+ --
+ -- function F (X : Integer) return Integer
+ -- with Potentially_Invalid => (X => True, F'Result);
+
+ if Nkind (Aspect_Expr) = N_Aggregate then
+
+ if Present (Component_Associations (Aspect_Expr)) then
+ Assoc := First (Component_Associations (Aspect_Expr));
+
+ while Present (Assoc) loop
+ if Denotes_Invalid_Parameter
+ (First (Choices (Assoc)), E)
+ then
+ return
+ Is_True
+ (Static_Boolean (Expression (Assoc)));
+ end if;
+
+ Next (Assoc);
+ end loop;
+ end if;
+
+ Param_Expr := First (Expressions (Aspect_Expr));
+
+ while Present (Param_Expr) loop
+ if Denotes_Invalid_Parameter (Param_Expr, E) then
+ return True;
+ end if;
+
+ Next (Param_Expr);
+ end loop;
+
+ return False;
+
+ -- or it is a single identifier, e.g.:
+ --
+ -- function F (X : Integer) return Integer
+ -- with Potentially_Invalid => X;
+
+ else
+ return Denotes_Invalid_Parameter (Aspect_Expr, E);
+ end if;
+ else
+ return False;
+ end if;
+ end;
+
+ when others =>
+ raise Program_Error;
+ end case;
+ end Has_Potentially_Invalid;
+
--------------------------------------
-- Has_Preelaborable_Initialization --
--------------------------------------
@@ -23967,7 +24112,7 @@ package body Sem_Util is
Result := N;
- if N > Empty_Or_Error then
+ if N not in Empty | Error then
pragma Assert (Nkind (N) not in N_Entity);
Result := New_Copy (N);
@@ -24048,7 +24193,7 @@ package body Sem_Util is
Result := Id;
- if Id > Empty_Or_Error then
+ if Id not in Empty | Error then
pragma Assert (Nkind (Id) in N_Entity);
-- Determine whether the entity has a corresponding new entity
@@ -24162,7 +24307,9 @@ package body Sem_Util is
Next (Old_Act);
end loop;
- pragma Assert (Replaced);
+ if Nkind (Old_Call) /= N_Function_Call then
+ pragma Assert (Replaced);
+ end if;
end Update_Controlling_Argument;
-------------------------------
diff --git a/gcc/ada/sem_util.ads b/gcc/ada/sem_util.ads
index e9c1263..efeafda 100644
--- a/gcc/ada/sem_util.ads
+++ b/gcc/ada/sem_util.ads
@@ -1521,6 +1521,12 @@ package Sem_Util is
-- non-null), which causes the type to not have preelaborable
-- initialization.
+ function Has_Potentially_Invalid (E : Entity_Id) return Boolean;
+ -- Returns True iff entity E is subject to the Potentially_Invalid aspect.
+ -- Entity E can be either variable, constant, subprogram or entry. For
+ -- private types and deferred constants E should be the private view,
+ -- because aspect can only be attached there.
+
function Has_Preelaborable_Initialization
(E : Entity_Id;
Preelab_Init_Expr : Node_Id := Empty) return Boolean;
diff --git a/gcc/ada/sfn_scan.adb b/gcc/ada/sfn_scan.adb
index d96a5e9..a0f26aa 100644
--- a/gcc/ada/sfn_scan.adb
+++ b/gcc/ada/sfn_scan.adb
@@ -261,8 +261,6 @@ package body SFN_Scan is
if At_EOF then
Error ("unexpected end of file");
end if;
-
- return;
end Check_Not_At_EOF;
-----------------
diff --git a/gcc/ada/snames.ads-tmpl b/gcc/ada/snames.ads-tmpl
index 84bee72..f26515e 100644
--- a/gcc/ada/snames.ads-tmpl
+++ b/gcc/ada/snames.ads-tmpl
@@ -164,6 +164,7 @@ package Snames is
Name_Local_Restrictions : constant Name_Id := N + $;
Name_No_Controlled_Parts : constant Name_Id := N + $;
Name_No_Task_Parts : constant Name_Id := N + $;
+ Name_Potentially_Invalid : constant Name_Id := N + $;
Name_Real_Literal : constant Name_Id := N + $;
Name_Relaxed_Initialization : constant Name_Id := N + $;
Name_Stable_Properties : constant Name_Id := N + $;
diff --git a/gcc/ada/tbuild.adb b/gcc/ada/tbuild.adb
index 52fdbfc..b89c408 100644
--- a/gcc/ada/tbuild.adb
+++ b/gcc/ada/tbuild.adb
@@ -926,11 +926,11 @@ package body Tbuild is
-- conversion of an unchecked conversion. Extra unchecked conversions
-- make the .dg output less readable. We can't do this in cases
-- involving bitfields, because the sizes might not match. The
- -- Is_Composite_Type checks avoid such cases.
+ -- "not Is_Scalar_Type" checks avoid such cases.
elsif Nkind (Expr) = N_Unchecked_Type_Conversion
- and then Is_Composite_Type (Etype (Expr))
- and then Is_Composite_Type (Typ)
+ and then not Is_Scalar_Type (Etype (Expr))
+ and then not Is_Scalar_Type (Typ)
then
Set_Subtype_Mark (Expr, New_Occurrence_Of (Typ, Loc));
Result := Relocate_Node (Expr);
diff --git a/gcc/ada/treepr.adb b/gcc/ada/treepr.adb
index d58f3ce..375608d 100644
--- a/gcc/ada/treepr.adb
+++ b/gcc/ada/treepr.adb
@@ -2015,17 +2015,16 @@ package body Treepr is
-- Case of descendant is a node
if D in Node_Range then
-
- -- Don't bother about Empty or Error descendants
-
- if D <= Union_Id (Empty_Or_Error) then
- return;
- end if;
-
declare
Nod : constant Node_Or_Entity_Id := Node_Or_Entity_Id (D);
begin
+ -- Don't bother about Empty or Error descendants
+
+ if Nod in Empty | Error then
+ return;
+ end if;
+
-- Descendants in one of the standardly compiled internal
-- packages are normally ignored, unless the parent is also
-- in such a package (happens when Standard itself is output)
diff --git a/gcc/ada/types.ads b/gcc/ada/types.ads
index 8869d01..6258ff9 100644
--- a/gcc/ada/types.ads
+++ b/gcc/ada/types.ads
@@ -431,11 +431,6 @@ package Types is
-- Used to indicate an error in the source program. A node is actually
-- allocated with this Id value, so that Nkind (Error) = N_Error.
- Empty_Or_Error : constant Node_Id := Error;
- -- Since Empty and Error are the first two Node_Id values, the test for
- -- N <= Empty_Or_Error tests to see if N is Empty or Error. This definition
- -- provides convenient self-documentation for such tests.
-
First_Node_Id : constant Node_Id := Node_Low_Bound;
-- Subscript of first allocated node. Note that Empty and Error are both
-- allocated nodes, whose Nkind fields can be accessed without error.
diff --git a/gcc/auto-profile.cc b/gcc/auto-profile.cc
index d78f2cb..64f4cda 100644
--- a/gcc/auto-profile.cc
+++ b/gcc/auto-profile.cc
@@ -123,6 +123,18 @@ along with GCC; see the file COPYING3. If not see
#define DEFAULT_AUTO_PROFILE_FILE "fbdata.afdo"
#define AUTO_PROFILE_VERSION 2
+/* profile counts determined by AFDO smaller than afdo_hot_bb_threshold are
+ considered cols. */
+gcov_type afdo_hot_bb_threshod = -1;
+
+/* Return ture if COUNT is possiby hot. */
+bool
+maybe_hot_afdo_count_p (profile_count count)
+{
+ gcc_checking_assert (count.ipa ().initialized_p ());
+ return count.ipa ().to_gcov_type () >= afdo_hot_bb_threshod;
+}
+
namespace autofdo
{
@@ -295,6 +307,10 @@ public:
remove them while possibly merging them to offline variants. */
void offline_if_not_realized (vec <function_instance *> &new_functions);
+ /* Match function instance with gimple body. */
+ bool match (cgraph_node *node, vec <function_instance *> &new_functions,
+ name_index_map &to_symbol_name);
+
/* Offline all inlined functions with name in SEEN.
If new toplevel functions are created, add them to NEW_FUNCTIONS. */
void offline_if_in_set (name_index_set &seen,
@@ -395,6 +411,39 @@ public:
return in_worklist_;
}
+ /* Return corresponding cgraph node. */
+ cgraph_node *get_cgraph_node ();
+
+ void
+ set_location (location_t l)
+ {
+ gcc_checking_assert (location_ == UNKNOWN_LOCATION);
+ location_= l;
+ }
+
+ location_t
+ get_location ()
+ {
+ return location_;
+ }
+
+ void
+ set_call_location (location_t l)
+ {
+ gcc_checking_assert (call_location_ == UNKNOWN_LOCATION);
+ call_location_= l;
+ }
+
+ location_t
+ get_call_location ()
+ {
+ return call_location_;
+ }
+
+ /* Lookup count and warn about duplicates. */
+ count_info *lookup_count (location_t loc, inline_stack &stack,
+ cgraph_node *node);
+
private:
/* Callsite, represented as (decl_lineno, callee_function_name_index). */
typedef std::pair<unsigned, unsigned> callsite;
@@ -403,9 +452,10 @@ private:
typedef std::map<callsite, function_instance *> callsite_map;
function_instance (unsigned name, gcov_type head_count)
- : name_ (name), total_count_ (0), head_count_ (head_count),
+ : name_ (name), total_count_ (0), head_count_ (head_count),
removed_icall_target_ (false), realized_ (false),
- in_worklist_ (false), inlined_to_ (NULL)
+ in_worklist_ (false), inlined_to_ (NULL),
+ location_ (UNKNOWN_LOCATION), call_location_ (UNKNOWN_LOCATION)
{
}
@@ -442,6 +492,9 @@ private:
is a toplevel one. */
function_instance *inlined_to_;
+ /* Location of function and its call (in case it is inlined). */
+ location_t location_, call_location_;
+
/* Turn inline instance to offline. */
static bool offline (function_instance *fn,
vec <function_instance *> &new_functions);
@@ -590,10 +643,21 @@ get_original_name (const char *name, bool alloc = true)
static unsigned
get_combined_location (location_t loc, tree decl)
{
+ bool warned = false;
/* TODO: allow more bits for line and less bits for discriminator. */
- if (LOCATION_LINE (loc) - DECL_SOURCE_LINE (decl) >= (1<<16))
- warning_at (loc, OPT_Woverflow, "offset exceeds 16 bytes");
- return ((LOCATION_LINE (loc) - DECL_SOURCE_LINE (decl)) << 16)
+ if ((LOCATION_LINE (loc) - DECL_SOURCE_LINE (decl)) >= (1<<15)
+ || (LOCATION_LINE (loc) - DECL_SOURCE_LINE (decl)) <= -(1<<15))
+ warned = warning_at (loc, OPT_Wauto_profile,
+ "auto-profile cannot encode offset %i "
+ "that exceeds 16 bytes",
+ LOCATION_LINE (loc) - DECL_SOURCE_LINE (decl));
+ if (warned)
+ inform (DECL_SOURCE_LOCATION (decl), "location offset is related to");
+ if ((unsigned)get_discriminator_from_loc (loc) >= (1u << 16))
+ warning_at (loc, OPT_Wauto_profile,
+ "auto-profile cannot encode discriminators "
+ "that exceeds 16 bytes");
+ return ((unsigned)(LOCATION_LINE (loc) - DECL_SOURCE_LINE (decl)) << 16)
| get_discriminator_from_loc (loc);
}
@@ -699,7 +763,7 @@ static unsigned
get_relative_location_for_locus (tree fn, tree block, location_t locus)
{
if (LOCATION_LOCUS (locus) == UNKNOWN_LOCATION)
- return UNKNOWN_LOCATION;
+ return -1;
for (; block && (TREE_CODE (block) == BLOCK);
block = BLOCK_SUPERCONTEXT (block))
@@ -810,6 +874,20 @@ function_instance::~function_instance ()
delete iter->second;
}
+/* Return corresponding cgraph node, NULL if unavailable. */
+cgraph_node *
+function_instance::get_cgraph_node ()
+{
+ for (symtab_node *n = cgraph_node::get_for_asmname
+ (get_identifier
+ (afdo_string_table->get_name (name ())));
+ n; n = n->next_sharing_asm_name)
+ if (cgraph_node *cn = dyn_cast <cgraph_node *> (n))
+ if (cn->definition && cn->has_gimple_body_p ())
+ return cn;
+ return NULL;
+}
+
/* Traverse callsites of the current function_instance to find one at the
location of LINENO and callee name represented in DECL. */
@@ -1043,6 +1121,520 @@ function_instance::offline_if_in_set (name_index_set &seen,
}
}
+/* Try to check if inlined_fn can correspond to a call of function N.
+ Return non-zero if it correspons and 2 if renaming was done. */
+
+static int
+match_with_target (gimple *stmt, function_instance *inlined_fn, cgraph_node *n)
+{
+ const char *symbol_name = IDENTIFIER_POINTER
+ (DECL_ASSEMBLER_NAME (n->decl));
+ const char *name = afdo_string_table->get_name (inlined_fn->name ());
+ if (strcmp (name, symbol_name))
+ {
+ int i;
+ bool in_suffix = false;
+ for (i = 0; i; i++)
+ {
+ if (name[i] != symbol_name[i])
+ break;
+ if (name[i] == '.')
+ in_suffix = true;
+ }
+ /* Accept dwarf names and stripped suffixes. */
+ if (!strcmp (lang_hooks.dwarf_name (n->decl, 0),
+ afdo_string_table->get_name (inlined_fn->name ()))
+ || (!name[i] && symbol_name[i] == '.')
+ || in_suffix)
+ {
+ int index = afdo_string_table->get_index (symbol_name);
+ if (index == -1)
+ index = afdo_string_table->add_name (xstrdup (symbol_name));
+ if (dump_file)
+ fprintf (dump_file,
+ " Renaming inlined call target %s to %s\n",
+ name, symbol_name);
+ inlined_fn->set_name (index);
+ return 2;
+ }
+ warning_at (gimple_location (stmt), OPT_Wauto_profile,
+ "auto-profile contains inlined "
+ "function with symbol name %s instead of symbol name %s",
+ name, symbol_name);
+ return 0;
+ }
+ return 1;
+}
+
+static void
+dump_stmt (gimple *stmt, count_info *info, function_instance *inlined_fn,
+ inline_stack &stack)
+{
+ if (dump_file)
+ {
+ fprintf (dump_file, " ");
+ if (!stack.length ())
+ fprintf (dump_file, " ");
+ else
+ {
+ gcc_checking_assert (stack.length () == 1);
+ fprintf (dump_file, "%5i", stack[0].afdo_loc >> 16);
+ if (stack[0].afdo_loc & 65535)
+ fprintf (dump_file, ".%-5i", stack[0].afdo_loc & 65535);
+ else
+ fprintf (dump_file, " ");
+ if (info)
+ fprintf (dump_file, "%9" PRIu64 " ", (int64_t)info->count);
+ else if (inlined_fn)
+ fprintf (dump_file, " inlined ");
+ else
+ fprintf (dump_file, " no info ");
+ }
+ print_gimple_stmt (dump_file, stmt, 0, TDF_SLIM);
+ }
+}
+
+/* Lookup count and warn about duplicates. */
+count_info *
+function_instance::lookup_count (location_t loc, inline_stack &stack,
+ cgraph_node *node)
+{
+ gcc_checking_assert (stack.length () < 2);
+ if (stack.length ())
+ {
+ int c = pos_counts.count (stack[0].afdo_loc);
+ if (c > 1)
+ warning_at (loc, OPT_Wauto_profile,
+ "duplicated count information"
+ " in auto-profile of %q+F"
+ " with relative location %i discriminator %i",
+ node->decl, stack[0].afdo_loc >> 16,
+ stack[0].afdo_loc & 65535);
+ if (c)
+ return &pos_counts[stack[0].afdo_loc];
+ }
+ return NULL;
+}
+
+/* Mark expr locations as used. */
+void
+mark_expr_locations (function_instance *f, tree t, cgraph_node *node,
+ hash_set<const count_info *> &counts)
+{
+ inline_stack stack;
+ return;
+ if (!t)
+ return;
+ do
+ {
+ get_inline_stack_in_node (EXPR_LOCATION (t), &stack, node);
+ /* FIXME: EXPR_LOCATION does not always originate from current
+ function. */
+ if (stack.length () > 1)
+ break;
+ count_info *info = f->lookup_count (EXPR_LOCATION (t), stack, node);
+ if (info)
+ counts.add (info);
+ if (handled_component_p (t))
+ t = TREE_OPERAND (t, 0);
+ else
+ break;
+ }
+ while (true);
+}
+
+/* Match function instance with gimple body.
+ Report mismatches, attempt to fix them if possible and remove data we will
+ not use.
+
+ Set location and call_location so we can output diagnostics and know what
+ functions was already matched. */
+
+bool
+function_instance::match (cgraph_node *node,
+ vec <function_instance *> &new_functions,
+ name_index_map &to_symbol_name)
+{
+ if (get_location () != UNKNOWN_LOCATION)
+ return false;
+ set_location (DECL_SOURCE_LOCATION (node->decl));
+ if (dump_file)
+ {
+ fprintf (dump_file,
+ "\nMatching gimple function %s with auto profile: ",
+ node->dump_name ());
+ dump_inline_stack (dump_file);
+ fprintf (dump_file, "\n");
+ }
+ basic_block bb;
+ /* Sets used to track if entires in auto-profile are useful. */
+ hash_set<const count_info *> counts;
+ hash_set<const count_info *> targets;
+ hash_set<const function_instance *> functions;
+
+ /* We try to fill in lost disciminator if there is unique call
+ with given line number. This map is used to record them. */
+ hash_map<int_hash <int, -1, -2>,auto_vec <gcall *>> lineno_to_call;
+ bool lineno_to_call_computed = false;
+
+ for (tree arg = DECL_ARGUMENTS (node->decl); arg; arg = DECL_CHAIN (arg))
+ {
+ inline_stack stack;
+
+ get_inline_stack_in_node (DECL_SOURCE_LOCATION (arg), &stack, node);
+ count_info *info = lookup_count (DECL_SOURCE_LOCATION (arg), stack, node);
+ if (stack.length () && dump_file)
+ {
+ gcc_checking_assert (stack.length () == 1);
+ fprintf (dump_file, "%5i", stack[0].afdo_loc >> 16);
+ if (stack[0].afdo_loc & 65535)
+ fprintf (dump_file, " .%-5i arg", stack[0].afdo_loc & 65535);
+ else
+ fprintf (dump_file, " arg ");
+ print_generic_expr (dump_file, arg);
+ fprintf (dump_file, "\n");
+ }
+ if (info)
+ counts.add (info);
+ }
+ FOR_EACH_BB_FN (bb, DECL_STRUCT_FUNCTION (node->decl))
+ {
+ if (dump_file)
+ fprintf (dump_file, " basic block %i\n", bb->index);
+ for (gphi_iterator gpi = gsi_start_phis (bb);
+ !gsi_end_p (gpi);
+ gsi_next (&gpi))
+ {
+ gphi *phi = gpi.phi ();
+ inline_stack stack;
+
+ get_inline_stack_in_node (gimple_location (phi), &stack, node);
+ count_info *info = lookup_count (gimple_location (phi), stack, node);
+ if (info)
+ counts.add (info);
+ dump_stmt (phi, info, NULL, stack);
+ counts.add (info);
+ for (edge e : bb->succs)
+ {
+ location_t phi_loc
+ = gimple_phi_arg_location_from_edge (phi, e);
+ inline_stack stack;
+ get_inline_stack_in_node (phi_loc, &stack, node);
+ count_info *info = lookup_count (phi_loc, stack, node);
+ if (info)
+ counts.add (info);
+ gcc_checking_assert (stack.length () < 2);
+ mark_expr_locations (this,
+ gimple_phi_arg_def_from_edge (phi, e),
+ node, counts);
+ }
+ }
+ /* TODO: goto locuses are not used for BB annotation. */
+ for (edge e : bb->succs)
+ {
+ inline_stack stack;
+ get_inline_stack_in_node (e->goto_locus, &stack, node);
+ count_info *info = lookup_count (e->goto_locus, stack, node);
+ if (info)
+ counts.add (info);
+ }
+ for (gimple_stmt_iterator gsi = gsi_start_bb (bb);
+ !gsi_end_p (gsi); gsi_next (&gsi))
+ {
+ inline_stack stack;
+ gimple *stmt = gsi_stmt (gsi);
+ get_inline_stack_in_node (gimple_location (stmt), &stack, node);
+
+ count_info *info = lookup_count (gimple_location (stmt), stack, node);
+ if (info)
+ counts.add (info);
+ for (unsigned int op = 0; op < gimple_num_ops (stmt); op++)
+ mark_expr_locations (this, gimple_op (stmt, op), node, counts);
+ if (gimple_code (stmt) == GIMPLE_CALL)
+ {
+ function_instance *inlined_fn = NULL;
+ function_instance *inlined_fn_nodisc = NULL;
+ /* Lookup callsite. */
+ if (stack.length ())
+ {
+ int c = 0;
+ int cnodis = 0;
+ for (auto const &iter : callsites)
+ if (iter.first.first == stack[0].afdo_loc)
+ {
+ if (!c)
+ inlined_fn = iter.second;
+ c++;
+ }
+ /* Discriminators are sometimes lost; try to find the
+ call without discriminator info. */
+ else if (iter.first.first == (stack[0].afdo_loc & ~65535))
+ {
+ if (!cnodis)
+ inlined_fn_nodisc = iter.second;
+ cnodis++;
+ }
+ if (c > 1 || cnodis > 1)
+ warning_at (gimple_location (stmt), OPT_Wauto_profile,
+ "duplicated callsite in auto-profile of %q+F"
+ " with relative location %i, discriminator %i",
+ node->decl, stack[0].afdo_loc >> 16,
+ stack[0].afdo_loc & 65535);
+ if (inlined_fn && info && info->targets.size ())
+ warning_at (gimple_location (stmt), OPT_Wauto_profile,
+ "both call targets and inline callsite"
+ " information is present in auto-profile"
+ " of function %q+F with relative location"
+ " %i, discriminator %i",
+ node->decl, stack[0].afdo_loc >> 16,
+ stack[0].afdo_loc & 65535);
+ tree callee = gimple_call_fndecl (stmt);
+ cgraph_node *callee_node;
+ unsigned int loc = stack[0].afdo_loc;
+ bool lost_discriminator = false;
+ if (!inlined_fn && inlined_fn_nodisc)
+ {
+ if (!lineno_to_call_computed)
+ {
+ basic_block bb2;
+ FOR_EACH_BB_FN (bb2,
+ DECL_STRUCT_FUNCTION (node->decl))
+ for (gimple_stmt_iterator gsi2
+ = gsi_start_bb (bb2);
+ !gsi_end_p (gsi2); gsi_next (&gsi2))
+ if (gcall *call
+ = dyn_cast <gcall *> (gsi_stmt (gsi2)))
+ {
+ inline_stack stack2;
+ get_inline_stack_in_node
+ (gimple_location (call),
+ &stack2, node);
+ if (stack2.length ())
+ lineno_to_call.get_or_insert
+ (stack2[0].afdo_loc >> 16).safe_push (call);
+ }
+ lineno_to_call_computed = true;
+ }
+ /* If we can determine lost discriminator uniquely,
+ use it. */
+ if (lineno_to_call.get
+ (stack[0].afdo_loc >> 16)->length () == 1)
+ {
+ warning_at (gimple_location (stmt), OPT_Wauto_profile,
+ "auto-profile of %q+F seem to contain"
+ " lost discriminator %i for call at"
+ " relative location %i",
+ node->decl, loc & 65535, loc >> 16);
+ inlined_fn = inlined_fn_nodisc;
+ if (dump_file)
+ fprintf (dump_file, " Lost discriminator %i\n",
+ loc & 65535);
+ loc = loc & ~65535;
+ }
+ lost_discriminator = true;
+ }
+ if (callee && (callee_node = cgraph_node::get (callee)))
+ {
+ callee_node = callee_node->ultimate_alias_target ();
+ if (inlined_fn)
+ {
+ int old_name = inlined_fn->name ();
+ int r = match_with_target (stmt, inlined_fn,
+ callee_node);
+ if (r == 2)
+ {
+ auto iter = callsites.find ({loc, old_name});
+ gcc_checking_assert (old_name
+ != inlined_fn->name ()
+ && iter != callsites.end ()
+ && iter->second
+ == inlined_fn);
+ callsite key2 = {stack[0].afdo_loc,
+ inlined_fn->name ()};
+ callsites[key2] = inlined_fn;
+ callsites.erase (iter);
+ }
+ if (r)
+ functions.add (inlined_fn);
+ }
+
+ if (info && info->targets.size () > 1)
+ warning_at (gimple_location (stmt), OPT_Wauto_profile,
+ "auto-profile of %q+F contains multiple"
+ " targets for a direct call with relative"
+ " location %i, discriminator %i",
+ node->decl, stack[0].afdo_loc >> 16,
+ stack[0].afdo_loc & 65535);
+ /* We do not need target profile for direct calls. */
+ if (info)
+ info->targets.clear ();
+ }
+ else
+ {
+ if (inlined_fn
+ && inlined_fn->get_call_location ()
+ != UNKNOWN_LOCATION
+ && warning_at (gimple_location (stmt),
+ OPT_Wauto_profile,
+ "%q+F contains two calls of the same"
+ " relative location +%i,"
+ " discrimnator %i,"
+ " that leads to lost auto-profile",
+ node->decl,
+ loc << 16,
+ loc & 65535))
+ {
+ inform (inlined_fn->get_call_location (),
+ "location of the earlier call");
+ inlined_fn = NULL;
+ }
+ if (inlined_fn)
+ {
+ inlined_fn->set_call_location
+ (gimple_location (stmt));
+ /* Do renaming if needed so we can look up
+ cgraph node and recurse into inlined function. */
+ int *newn = to_symbol_name.get (inlined_fn->name ());
+ gcc_checking_assert
+ (!newn || *newn != inlined_fn->name ());
+ if (newn || lost_discriminator)
+ {
+ auto iter = callsites.find
+ ({loc, inlined_fn->name ()});
+ gcc_checking_assert (iter != callsites.end ()
+ && iter->second
+ == inlined_fn);
+ callsite key2 = {stack[0].afdo_loc,
+ newn ? *newn
+ : inlined_fn->name ()};
+ callsites[key2] = inlined_fn;
+ inlined_fn->set_name (newn ? *newn
+ : inlined_fn->name ());
+ callsites.erase (iter);
+ }
+ functions.add (inlined_fn);
+ }
+ if (info)
+ targets.add (info);
+ }
+ }
+ dump_stmt (stmt, info, inlined_fn, stack);
+ }
+ else
+ dump_stmt (stmt, info, NULL, stack);
+ }
+ }
+ bool warned = false;
+ for (auto &iter : pos_counts)
+ if (iter.second.targets.size ()
+ && counts.contains (&iter.second)
+ && !targets.contains (&iter.second))
+ {
+ if (!warned)
+ warned = warning_at
+ (DECL_SOURCE_LOCATION (node->decl),
+ OPT_Wauto_profile,
+ "auto-profile of %q+F contains indirect call targets"
+ " not associated with an indirect call statement",
+ node->decl);
+ if (warned)
+ inform (DECL_SOURCE_LOCATION (node->decl),
+ "count %" PRIu64
+ " with relative location +%i, discriminator %i",
+ iter.second.count, iter.first >> 16, iter.first & 65535);
+ if (dump_file)
+ {
+ fprintf (dump_file, "Removing targets of ");
+ dump_afdo_loc (dump_file, iter.first);
+ fprintf (dump_file, "\n");
+ }
+ iter.second.targets.clear ();
+ }
+ warned = false;
+ /* Profile sometimes contains extra location for start or end of function
+ (prologue, epilogue).
+ TODO: If present, perhaps it can be used to determine entry block
+ and exit block counts. */
+ unsigned int end_location = get_combined_location
+ (DECL_STRUCT_FUNCTION (node->decl)->function_end_locus, node->decl);
+ unsigned int start_location = get_combined_location
+ (DECL_STRUCT_FUNCTION (node->decl)->function_start_locus, node->decl);
+ for (position_count_map::const_iterator iter = pos_counts.begin ();
+ iter != pos_counts.end ();)
+ if (!counts.contains (&iter->second))
+ {
+ if (iter->first != end_location && iter->first != start_location
+ && iter->first)
+ {
+ if (!warned)
+ warned = warning_at (DECL_SOURCE_LOCATION (node->decl),
+ OPT_Wauto_profile,
+ "auto-profile of %q+F contains extra statements",
+ node->decl);
+ if (warned)
+ inform (DECL_SOURCE_LOCATION (node->decl),
+ "count %" PRIu64 " with relative location +%i,"
+ " discriminator %i",
+ iter->second.count, iter->first >> 16,
+ iter->first & 65535);
+ if ((iter->first >> 16) > (end_location >> 16) && warned)
+ inform (DECL_SOURCE_LOCATION (node->decl),
+ "location is after end of function");
+ }
+ if (dump_file)
+ {
+ fprintf (dump_file, "Removing unmatched count ");
+ dump_afdo_loc (dump_file, iter->first);
+ fprintf (dump_file, ":%" PRIu64, iter->second.count);
+ for (auto &titer : iter->second.targets)
+ fprintf (dump_file, " %s:%" PRIu64,
+ afdo_string_table->get_name (titer.first),
+ (int64_t)titer.second);
+ fprintf (dump_file, "\n");
+ }
+ iter = pos_counts.erase (iter);
+ }
+ else
+ iter++;
+ warned = false;
+ for (callsite_map::const_iterator iter = callsites.begin ();
+ iter != callsites.end ();)
+ if (!functions.contains (iter->second))
+ {
+ if (!warned)
+ warned = warning_at (DECL_SOURCE_LOCATION (node->decl),
+ OPT_Wauto_profile,
+ "auto-profile of %q+F contains extra callsites",
+ node->decl);
+ if (warned)
+ inform (DECL_SOURCE_LOCATION (node->decl),
+ "call of %s with relative location +%i, discriminator %i",
+ afdo_string_table->get_name (iter->first.second),
+ iter->first.first >> 16, iter->first.first & 65535);
+ if ((iter->first.first >> 16) > (end_location >> 16) && warned)
+ inform (DECL_SOURCE_LOCATION (node->decl),
+ "location is after end of function");
+ warned = true;
+ function_instance *f = iter->second;
+ if (dump_file)
+ {
+ fprintf (dump_file,
+ "Offlining inline with no corresponding gimple stmt ");
+ f->dump_inline_stack (dump_file);
+ fprintf (dump_file, "\n");
+ }
+ callsites.erase (iter);
+ offline (f, new_functions);
+ iter = callsites.begin ();
+ }
+ else
+ iter++;
+ for (auto &iter : callsites)
+ if (cgraph_node *n = iter.second->get_cgraph_node ())
+ iter.second->match (n, new_functions, to_symbol_name);
+ return true;
+}
+
/* Walk inlined functions and if their name is not in SEEN
remove it. Also rename function names as given by
to_symbol_name map. */
@@ -1054,6 +1646,7 @@ function_instance::remove_external_functions
vec <function_instance *> &new_functions)
{
auto_vec <callsite, 20> to_rename;
+
for (callsite_map::const_iterator iter = callsites.begin ();
iter != callsites.end ();)
if (!seen.contains (iter->first.second))
@@ -1074,7 +1667,9 @@ function_instance::remove_external_functions
{
gcc_checking_assert ((int)iter->first.second
== iter->second->name ());
- int *newn = to_symbol_name.get (iter->first.second);
+ int *newn = iter->second->get_call_location () == UNKNOWN_LOCATION
+ ? to_symbol_name.get (iter->first.second)
+ : NULL;
if (newn)
{
gcc_checking_assert (iter->second->inlined_to ());
@@ -1397,6 +1992,7 @@ autofdo_source_profile::offline_external_functions ()
TODO: after early-inlining we ought to offline all functions
that were not inlined. */
vec <function_instance *>&fns = duplicate_functions_;
+ auto_vec <function_instance *, 20>fns2;
/* Poppulate worklist with all functions to process. Processing
may introduce new functions by offlining. */
for (auto const &iter : map_)
@@ -1404,74 +2000,78 @@ autofdo_source_profile::offline_external_functions ()
iter.second->set_in_worklist ();
fns.safe_push (iter.second);
}
- while (fns.length ())
- {
- function_instance *f = fns.pop ();
- int index = f->name ();
- gcc_checking_assert (f->in_worklist_p ());
- /* If map has different function_instance of same name, then
- this is a duplicated entry which needs to be merged. */
- if (map_.count (index) && map_[index] != f)
- {
- if (dump_file)
- {
- fprintf (dump_file, "Merging duplicate instance: ");
- f->dump_inline_stack (dump_file);
- fprintf (dump_file, "\n");
- }
- map_[index]->merge (f, fns);
- gcc_checking_assert (!f->inlined_to ());
- f->clear_in_worklist ();
- delete f;
- }
- /* If name was not seen in the symbol table, remove it. */
- else if (!seen.contains (index))
- {
- f->offline_if_in_set (seen, fns);
- f->clear_in_worklist ();
- if (dump_file)
- fprintf (dump_file, "Removing external %s\n",
- afdo_string_table->get_name (f->name ()));
- map_.erase (f->name ());
- delete f;
- }
- /* If this is offline function instance seen in this
- translation unit offline external inlines and possibly
- rename from dwarf name. */
- else
- {
- f->remove_external_functions (seen, to_symbol_name, fns);
- f->clear_in_worklist ();
- int *newn = to_symbol_name.get (index);
- if (newn)
- {
- gcc_checking_assert (*newn != index);
- f->set_name (*newn);
- if (map_.count (*newn))
- {
- if (dump_file)
- fprintf (dump_file, "Merging duplicate symbol %s\n",
- afdo_string_table->get_name (f->name ()));
- function_instance *to = map_[*newn];
- gcc_checking_assert (!map_.count (index) || map_[index] == f);
- if (to != f)
- {
- to->merge (f, fns);
- delete f;
- }
- if (map_.count (index))
- map_.erase (index);
- }
- else
- {
- auto iter = map_.find (index);
- map_[*newn] = iter->second;
- map_.erase (iter);
- }
- }
- }
- }
+ /* There are two worklists. First all functions needs to be matched
+ with gimple body and only then we want to do merging, since matching
+ should be done on unmodified profile and merging works better if
+ mismatches are already resolved both in source and destination. */
+ while (fns.length () || fns2.length ())
+ if (fns.length ())
+ {
+ function_instance *f = fns.pop ();
+ if (f->get_location () == UNKNOWN_LOCATION)
+ {
+ int index = f->name ();
+ int *newn = to_symbol_name.get (index);
+ if (newn)
+ {
+ f->set_name (*newn);
+ if (map_.count (index)
+ && map_[index] == f)
+ map_.erase (index);
+ if (!map_.count (*newn))
+ map_[*newn] = f;
+ }
+ if (cgraph_node *n = f->get_cgraph_node ())
+ {
+ gcc_checking_assert (seen.contains (f->name ()));
+ f->match (n, fns, to_symbol_name);
+ }
+ }
+ fns2.safe_push (f);
+ }
+ else
+ {
+ function_instance *f = fns2.pop ();
+ int index = f->name ();
+ gcc_checking_assert (f->in_worklist_p ());
+
+ /* If map has different function_instance of same name, then
+ this is a duplicated entry which needs to be merged. */
+ if (map_.count (index) && map_[index] != f)
+ {
+ if (dump_file)
+ {
+ fprintf (dump_file, "Merging duplicate instance: ");
+ f->dump_inline_stack (dump_file);
+ fprintf (dump_file, "\n");
+ }
+ map_[index]->merge (f, fns);
+ gcc_checking_assert (!f->inlined_to ());
+ f->clear_in_worklist ();
+ delete f;
+ }
+ /* If name was not seen in the symbol table, remove it. */
+ else if (!seen.contains (index))
+ {
+ f->offline_if_in_set (seen, fns);
+ f->clear_in_worklist ();
+ if (dump_file)
+ fprintf (dump_file, "Removing external %s\n",
+ afdo_string_table->get_name (f->name ()));
+ if (map_.count (index) && map_[index] == f)
+ map_.erase (f->name ());
+ delete f;
+ }
+ /* If this is offline function instance seen in this
+ translation unit offline external inlines and possibly
+ rename from dwarf name. */
+ else
+ {
+ f->remove_external_functions (seen, to_symbol_name, fns);
+ f->clear_in_worklist ();
+ }
+ }
if (dump_file)
for (auto const &iter : map_)
{
@@ -1542,23 +2142,15 @@ autofdo_source_profile::offline_unrealized_inlines ()
int index = f->name ();
bool in_map = map_.count (index);
if (in_map)
- for (cgraph_node *n = cgraph_node::get_for_asmname
- (get_identifier (afdo_string_table->get_name (index)));n;)
+ if (cgraph_node *n = f->get_cgraph_node ())
{
- if (n->definition)
- {
- if (dump_file)
- fprintf (dump_file, "Marking realized %s\n",
- afdo_string_table->get_name (index));
- f->set_realized ();
- if (DECL_INITIAL (n->decl)
- && DECL_INITIAL (n->decl) != error_mark_node)
- walk_block (n->decl, f, DECL_INITIAL (n->decl));
- }
- if (n->next_sharing_asm_name)
- n = as_a <cgraph_node *>(n->next_sharing_asm_name);
- else
- break;
+ if (dump_file)
+ fprintf (dump_file, "Marking realized %s\n",
+ afdo_string_table->get_name (index));
+ f->set_realized ();
+ if (DECL_INITIAL (n->decl)
+ && DECL_INITIAL (n->decl) != error_mark_node)
+ walk_block (n->decl, f, DECL_INITIAL (n->decl));
}
f->offline_if_not_realized (fns);
gcc_checking_assert ((in_map || !f->realized_p ())
@@ -1908,9 +2500,6 @@ autofdo_source_profile::read ()
/* Read in the function/callsite profile, and store it in local
data structure. */
unsigned function_num = gcov_read_unsigned ();
- int profile_pass_num
- = g->get_passes ()->get_pass_auto_profile ()->static_pass_number;
- g->get_dumps ()->dump_start (profile_pass_num, NULL);
for (unsigned i = 0; i < function_num; i++)
{
function_instance::function_instance_stack stack;
@@ -1926,12 +2515,18 @@ autofdo_source_profile::read ()
"auto-profile contains duplicated function instance %s",
afdo_string_table->get_name (s->name ()));
}
+ int hot_frac = param_hot_bb_count_fraction;
/* Scale up the profile, but leave some bits in case some counts gets
bigger than sum_max eventually. */
if (afdo_profile_info->sum_max)
afdo_count_scale
= MAX (((gcov_type)1 << (profile_count::n_bits / 2))
/ afdo_profile_info->sum_max, 1);
+ afdo_hot_bb_threshod
+ = hot_frac
+ ? afdo_profile_info->sum_max * afdo_count_scale / hot_frac
+ : (gcov_type)profile_count::max_count;
+ set_hot_bb_threshold (afdo_hot_bb_threshod);
if (dump_file)
fprintf (dump_file, "Max count in profile %" PRIu64 "\n"
"Setting scale %" PRIu64 "\n"
@@ -1940,10 +2535,8 @@ autofdo_source_profile::read ()
(int64_t)afdo_profile_info->sum_max,
(int64_t)afdo_count_scale,
(int64_t)(afdo_profile_info->sum_max * afdo_count_scale),
- (int64_t)(afdo_profile_info->sum_max * afdo_count_scale
- / param_hot_bb_count_fraction));
+ (int64_t)afdo_hot_bb_threshod);
afdo_profile_info->sum_max *= afdo_count_scale;
- g->get_dumps ()->dump_finish (profile_pass_num);
return true;
}
@@ -1967,30 +2560,9 @@ autofdo_source_profile::get_function_instance_by_inline_stack (
function_instance *s = iter->second;
for (unsigned i = stack.length () - 1; i > 0; i--)
{
- function_instance *os = s;
s = s->get_function_instance_by_decl (stack[i].afdo_loc,
stack[i - 1].decl,
stack[i].location);
- /* Try lost discriminator. */
- if (!s)
- {
- s = os->get_function_instance_by_decl (stack[i].afdo_loc & ~65535,
- stack[i - 1].decl,
- stack[i].location);
- if (s && dump_enabled_p ())
- {
- dump_printf_loc (MSG_NOTE | MSG_PRIORITY_INTERNALS,
- dump_user_location_t::from_location_t
- (stack[i].location),
- "auto-profile apparently has a missing "
- "discriminator for inlined call "
- "of %s at relative loc %i:%i\n",
- IDENTIFIER_POINTER
- (DECL_ASSEMBLER_NAME (stack[i - 1].decl)),
- stack[i].afdo_loc >> 16,
- stack[i].afdo_loc & 65535);
- }
- }
if (s == NULL)
{
/* afdo inliner extends the stack by last entry with unknown
@@ -2002,7 +2574,8 @@ autofdo_source_profile::get_function_instance_by_inline_stack (
dump_user_location_t::from_location_t
(stack[i].location),
"auto-profile has no inlined function instance "
- "for inlined call of %s at relative loc %i:%i\n",
+ "for inlined call of %s at relative "
+ " locaction +%i, discriminator %i\n",
IDENTIFIER_POINTER
(DECL_ASSEMBLER_NAME (stack[i - 1].decl)),
stack[i].afdo_loc >> 16,
@@ -2278,7 +2851,7 @@ afdo_set_bb_count (basic_block bb, hash_set <basic_block> &zero_bbs)
{
count_info info;
gimple *stmt = gsi_stmt (gsi);
- if (gimple_clobber_p (stmt) || is_gimple_debug (stmt))
+ if (gimple_clobber_p (stmt))
continue;
if (afdo_source_profile->get_count_info (stmt, &info))
{
@@ -3083,6 +3656,16 @@ afdo_annotate_cfg (void)
if (dump_file)
fprintf (dump_file, "No afdo profile for %s\n",
cgraph_node::get (current_function_decl)->dump_name ());
+ /* create_gcov only dumps symbols with some samples in them.
+ This means that we get nonempty zero_bbs only if some
+ nonzero counts in profile were not matched with statements. */
+ if (!flag_profile_partial_training)
+ {
+ FOR_ALL_BB_FN (bb, cfun)
+ if (bb->count.quality () == GUESSED_LOCAL)
+ bb->count = bb->count.global0afdo ();
+ update_max_bb_count ();
+ }
return;
}
@@ -3153,9 +3736,13 @@ afdo_annotate_cfg (void)
if (dump_file)
fprintf (dump_file, "Setting global count to afdo0\n");
}
- FOR_ALL_BB_FN (bb, cfun)
- if (bb->count.quality () == GUESSED_LOCAL)
- bb->count = bb->count.global0afdo ();
+ if (!flag_profile_partial_training)
+ {
+ FOR_ALL_BB_FN (bb, cfun)
+ if (bb->count.quality () == GUESSED_LOCAL)
+ bb->count = bb->count.global0afdo ();
+ update_max_bb_count ();
+ }
loop_optimizer_finalize ();
free_dominance_info (CDI_DOMINATORS);
@@ -3236,7 +3823,7 @@ auto_profile (void)
{
struct cgraph_node *node;
- if (symtab->state == FINISHED)
+ if (symtab->state == FINISHED || !afdo_source_profile)
return 0;
init_node_map (true);
@@ -3305,11 +3892,7 @@ afdo_callsite_hot_enough_for_early_inline (struct cgraph_edge *edge)
{
bool is_hot;
profile_count pcount = profile_count::from_gcov_type (count).afdo ();
- gcov_summary *saved_profile_info = profile_info;
- /* At early inline stage, profile_info is not set yet. We need to
- temporarily set it to afdo_profile_info to calculate hotness. */
- profile_info = autofdo::afdo_profile_info;
- is_hot = maybe_hot_count_p (NULL, pcount);
+ is_hot = maybe_hot_afdo_count_p (pcount);
if (dump_file)
{
fprintf (dump_file, "Call %s -> %s has %s afdo profile count ",
@@ -3318,7 +3901,6 @@ afdo_callsite_hot_enough_for_early_inline (struct cgraph_edge *edge)
pcount.dump (dump_file);
fprintf (dump_file, "\n");
}
- profile_info = saved_profile_info;
return is_hot;
}
@@ -3471,6 +4053,7 @@ public:
unsigned int
execute (function *) final override
{
+ read_autofdo_file ();
if (autofdo::afdo_source_profile)
autofdo::afdo_source_profile->offline_external_functions ();
return 0;
diff --git a/gcc/auto-profile.h b/gcc/auto-profile.h
index d31a208..639e263 100644
--- a/gcc/auto-profile.h
+++ b/gcc/auto-profile.h
@@ -35,4 +35,11 @@ extern bool afdo_vpt_for_early_inline (cgraph_node *node);
do not repeat it later. */
extern void remove_afdo_speculative_target (cgraph_edge *);
+/* profile counts determined by AFDO smaller than afdo_hot_bb_threshold are
+ considered cols. */
+extern gcov_type afdo_hot_bb_threshold;
+
+/* Return ture if COUNT is possiby hot. */
+extern bool maybe_hot_afdo_count_p (profile_count count);
+
#endif /* AUTO_PROFILE_H */
diff --git a/gcc/common.opt b/gcc/common.opt
index b4845d2..8163e03 100644
--- a/gcc/common.opt
+++ b/gcc/common.opt
@@ -545,6 +545,10 @@ Warray-bounds=
Common Joined RejectNegative UInteger Var(warn_array_bounds) Warning IntegerRange(0, 2)
Warn if an array is accessed out of bounds.
+Wauto-profile
+Common Var(warn_auto_profile) Warning
+Warn about problems with auto-profile data
+
Wuse-after-free
Common Var(warn_use_after_free) Warning
Warn for uses of pointers to deallocated storage.
diff --git a/gcc/config/aarch64/aarch64-sve.md b/gcc/config/aarch64/aarch64-sve.md
index 450975d..4aecb3a 100644
--- a/gcc/config/aarch64/aarch64-sve.md
+++ b/gcc/config/aarch64/aarch64-sve.md
@@ -1344,7 +1344,7 @@
"TARGET_SVE"
{
operands[2] = aarch64_ptrue_reg (<VPRED>mode);
- operands[3] = CONST0_RTX (<MODE>mode);
+ operands[3] = CONST0_RTX (<VSINGLE>mode);
}
)
@@ -1354,7 +1354,7 @@
(unspec:SVE_STRUCT
[(match_operand:<VPRED> 2 "register_operand" "Upl")
(match_operand:SVE_STRUCT 1 "memory_operand" "m")
- (match_operand 3 "aarch64_maskload_else_operand")]
+ (match_operand:<VSINGLE> 3 "aarch64_maskload_else_operand")]
UNSPEC_LDN))]
"TARGET_SVE"
"ld<vector_count><Vesize>\t%0, %2/z, %1"
diff --git a/gcc/config/aarch64/predicates.md b/gcc/config/aarch64/predicates.md
index d8e9725..32056da 100644
--- a/gcc/config/aarch64/predicates.md
+++ b/gcc/config/aarch64/predicates.md
@@ -1076,5 +1076,5 @@
&& !(INTVAL (op) & 0xf)")))
(define_predicate "aarch64_maskload_else_operand"
- (and (match_code "const_int,const_vector")
+ (and (match_code "const_vector")
(match_test "op == CONST0_RTX (GET_MODE (op))")))
diff --git a/gcc/config/i386/driver-i386.cc b/gcc/config/i386/driver-i386.cc
index 63c7d79..fe71f55 100644
--- a/gcc/config/i386/driver-i386.cc
+++ b/gcc/config/i386/driver-i386.cc
@@ -600,7 +600,7 @@ const char *host_detect_local_cpu (int argc, const char **argv)
if (has_feature (FEATURE_AVX512F))
{
/* Assume Diamond Rapids. */
- if (has_feature (FEATURE_AMX_TRANSPOSE))
+ if (has_feature (FEATURE_AMX_FP8))
cpu = "diamondrapids";
/* Assume Granite Rapids D. */
else if (has_feature (FEATURE_AMX_COMPLEX))
diff --git a/gcc/config/i386/i386.cc b/gcc/config/i386/i386.cc
index 44763c8..b64175d 100644
--- a/gcc/config/i386/i386.cc
+++ b/gcc/config/i386/i386.cc
@@ -12562,11 +12562,12 @@ legitimize_tls_address (rtx x, enum tls_model model, bool for_mov)
if (TARGET_64BIT)
{
rtx rax = gen_rtx_REG (Pmode, AX_REG);
+ rtx rdi = gen_rtx_REG (Pmode, DI_REG);
rtx_insn *insns;
start_sequence ();
emit_call_insn
- (gen_tls_global_dynamic_64 (Pmode, rax, x, caddr));
+ (gen_tls_global_dynamic_64 (Pmode, rax, x, caddr, rdi));
insns = end_sequence ();
if (GET_MODE (x) != Pmode)
@@ -12615,12 +12616,13 @@ legitimize_tls_address (rtx x, enum tls_model model, bool for_mov)
if (TARGET_64BIT)
{
rtx rax = gen_rtx_REG (Pmode, AX_REG);
+ rtx rdi = gen_rtx_REG (Pmode, DI_REG);
rtx_insn *insns;
rtx eqv;
start_sequence ();
emit_call_insn
- (gen_tls_local_dynamic_base_64 (Pmode, rax, caddr));
+ (gen_tls_local_dynamic_base_64 (Pmode, rax, caddr, rdi));
insns = end_sequence ();
/* Attach a unique REG_EQUAL, to allow the RTL optimizers to
@@ -23684,19 +23686,21 @@ x86_field_alignment (tree type, int computed)
/* Print call to TARGET to FILE. */
static void
-x86_print_call_or_nop (FILE *file, const char *target)
+x86_print_call_or_nop (FILE *file, const char *target,
+ const char *label)
{
if (flag_nop_mcount || !strcmp (target, "nop"))
/* 5 byte nop: nopl 0(%[re]ax,%[re]ax,1) */
- fprintf (file, "1:" ASM_BYTE "0x0f, 0x1f, 0x44, 0x00, 0x00\n");
+ fprintf (file, "%s" ASM_BYTE "0x0f, 0x1f, 0x44, 0x00, 0x00\n",
+ label);
else if (!TARGET_PECOFF && flag_pic)
{
gcc_assert (flag_plt);
- fprintf (file, "1:\tcall\t%s@PLT\n", target);
+ fprintf (file, "%s\tcall\t%s@PLT\n", label, target);
}
else
- fprintf (file, "1:\tcall\t%s\n", target);
+ fprintf (file, "%s\tcall\t%s\n", label, target);
}
static bool
@@ -23781,6 +23785,13 @@ x86_function_profiler (FILE *file, int labelno ATTRIBUTE_UNUSED)
const char *mcount_name = MCOUNT_NAME;
+ bool fentry_section_p
+ = (flag_record_mcount
+ || lookup_attribute ("fentry_section",
+ DECL_ATTRIBUTES (current_function_decl)));
+
+ const char *label = fentry_section_p ? "1:" : "";
+
if (current_fentry_name (&mcount_name))
;
else if (fentry_name)
@@ -23816,11 +23827,12 @@ x86_function_profiler (FILE *file, int labelno ATTRIBUTE_UNUSED)
reg = legacy_reg;
}
if (ASSEMBLER_DIALECT == ASM_INTEL)
- fprintf (file, "1:\tmovabs\t%s, OFFSET FLAT:%s\n"
- "\tcall\t%s\n", reg, mcount_name, reg);
+ fprintf (file, "%s\tmovabs\t%s, OFFSET FLAT:%s\n"
+ "\tcall\t%s\n", label, reg, mcount_name,
+ reg);
else
- fprintf (file, "1:\tmovabsq\t$%s, %%%s\n\tcall\t*%%%s\n",
- mcount_name, reg, reg);
+ fprintf (file, "%s\tmovabsq\t$%s, %%%s\n\tcall\t*%%%s\n",
+ label, mcount_name, reg, reg);
break;
case CM_LARGE_PIC:
#ifdef NO_PROFILE_COUNTERS
@@ -23861,21 +23873,21 @@ x86_function_profiler (FILE *file, int labelno ATTRIBUTE_UNUSED)
if (!flag_plt)
{
if (ASSEMBLER_DIALECT == ASM_INTEL)
- fprintf (file, "1:\tcall\t[QWORD PTR %s@GOTPCREL[rip]]\n",
- mcount_name);
+ fprintf (file, "%s\tcall\t[QWORD PTR %s@GOTPCREL[rip]]\n",
+ label, mcount_name);
else
- fprintf (file, "1:\tcall\t*%s@GOTPCREL(%%rip)\n",
- mcount_name);
+ fprintf (file, "%s\tcall\t*%s@GOTPCREL(%%rip)\n",
+ label, mcount_name);
break;
}
/* fall through */
default:
- x86_print_call_or_nop (file, mcount_name);
+ x86_print_call_or_nop (file, mcount_name, label);
break;
}
}
else
- x86_print_call_or_nop (file, mcount_name);
+ x86_print_call_or_nop (file, mcount_name, label);
}
else if (flag_pic)
{
@@ -23890,11 +23902,13 @@ x86_function_profiler (FILE *file, int labelno ATTRIBUTE_UNUSED)
LPREFIX, labelno);
#endif
if (flag_plt)
- x86_print_call_or_nop (file, mcount_name);
+ x86_print_call_or_nop (file, mcount_name, label);
else if (ASSEMBLER_DIALECT == ASM_INTEL)
- fprintf (file, "1:\tcall\t[DWORD PTR %s@GOT[ebx]]\n", mcount_name);
+ fprintf (file, "%s\tcall\t[DWORD PTR %s@GOT[ebx]]\n",
+ label, mcount_name);
else
- fprintf (file, "1:\tcall\t*%s@GOT(%%ebx)\n", mcount_name);
+ fprintf (file, "%s\tcall\t*%s@GOT(%%ebx)\n",
+ label, mcount_name);
}
else
{
@@ -23907,12 +23921,10 @@ x86_function_profiler (FILE *file, int labelno ATTRIBUTE_UNUSED)
fprintf (file, "\tmovl\t$%sP%d, %%" PROFILE_COUNT_REGISTER "\n",
LPREFIX, labelno);
#endif
- x86_print_call_or_nop (file, mcount_name);
+ x86_print_call_or_nop (file, mcount_name, label);
}
- if (flag_record_mcount
- || lookup_attribute ("fentry_section",
- DECL_ATTRIBUTES (current_function_decl)))
+ if (fentry_section_p)
{
const char *sname = "__mcount_loc";
diff --git a/gcc/config/i386/i386.md b/gcc/config/i386/i386.md
index adff2af..21b9f5c 100644
--- a/gcc/config/i386/i386.md
+++ b/gcc/config/i386/i386.md
@@ -23201,7 +23201,8 @@
(match_operand 3)))
(unspec:P [(match_operand 1 "tls_symbolic_operand")
(reg:P SP_REG)]
- UNSPEC_TLS_GD)]
+ UNSPEC_TLS_GD)
+ (clobber (match_operand:P 4 "register_operand" "=D"))]
"TARGET_64BIT"
{
if (!TARGET_X32)
@@ -23218,7 +23219,7 @@
Use data16 prefix instead, which doesn't have this problem. */
fputs ("\tdata16", asm_out_file);
output_asm_insn
- ("lea{q}\t{%E1@tlsgd(%%rip), %%rdi|rdi, %E1@tlsgd[rip]}", operands);
+ ("lea{q}\t{%E1@tlsgd(%%rip), %q4|%q4, %E1@tlsgd[rip]}", operands);
if (TARGET_SUN_TLS || flag_plt || !HAVE_AS_IX86_TLS_GET_ADDR_GOT)
fputs (ASM_SHORT "0x6666\n", asm_out_file);
else
@@ -23242,14 +23243,15 @@
(match_operand 4)))
(unspec:DI [(match_operand 1 "tls_symbolic_operand")
(reg:DI SP_REG)]
- UNSPEC_TLS_GD)]
+ UNSPEC_TLS_GD)
+ (clobber (match_operand:DI 5 "register_operand" "=D"))]
"TARGET_64BIT && ix86_cmodel == CM_LARGE_PIC && !TARGET_PECOFF
&& GET_CODE (operands[3]) == CONST
&& GET_CODE (XEXP (operands[3], 0)) == UNSPEC
&& XINT (XEXP (operands[3], 0), 1) == UNSPEC_PLTOFF"
{
output_asm_insn
- ("lea{q}\t{%E1@tlsgd(%%rip), %%rdi|rdi, %E1@tlsgd[rip]}", operands);
+ ("lea{q}\t{%E1@tlsgd(%%rip), %5|%5, %E1@tlsgd[rip]}", operands);
output_asm_insn ("movabs{q}\t{%3, %%rax|rax, %3}", operands);
output_asm_insn ("add{q}\t{%2, %%rax|rax, %2}", operands);
return "call\t{*%%rax|rax}";
@@ -23265,7 +23267,8 @@
(const_int 0)))
(unspec:P [(match_operand 1 "tls_symbolic_operand")
(reg:P SP_REG)]
- UNSPEC_TLS_GD)])]
+ UNSPEC_TLS_GD)
+ (clobber (match_operand:P 3 "register_operand"))])]
"TARGET_64BIT"
"ix86_tls_descriptor_calls_expanded_in_cfun = true;")
@@ -23316,11 +23319,12 @@
(call:P
(mem:QI (match_operand 1 "constant_call_address_operand" "Bz"))
(match_operand 2)))
- (unspec:P [(reg:P SP_REG)] UNSPEC_TLS_LD_BASE)]
+ (unspec:P [(reg:P SP_REG)] UNSPEC_TLS_LD_BASE)
+ (clobber (match_operand:P 3 "register_operand" "=D"))]
"TARGET_64BIT"
{
output_asm_insn
- ("lea{q}\t{%&@tlsld(%%rip), %%rdi|rdi, %&@tlsld[rip]}", operands);
+ ("lea{q}\t{%&@tlsld(%%rip), %q3|%q3, %&@tlsld[rip]}", operands);
if (TARGET_SUN_TLS)
return "call\t%p1@plt";
if (flag_plt || !HAVE_AS_IX86_TLS_GET_ADDR_GOT)
@@ -23336,14 +23340,15 @@
(mem:QI (plus:DI (match_operand:DI 1 "register_operand" "b")
(match_operand:DI 2 "immediate_operand" "i")))
(match_operand 3)))
- (unspec:DI [(reg:DI SP_REG)] UNSPEC_TLS_LD_BASE)]
+ (unspec:DI [(reg:DI SP_REG)] UNSPEC_TLS_LD_BASE)
+ (clobber (match_operand:DI 4 "register_operand" "=D"))]
"TARGET_64BIT && ix86_cmodel == CM_LARGE_PIC && !TARGET_PECOFF
&& GET_CODE (operands[2]) == CONST
&& GET_CODE (XEXP (operands[2], 0)) == UNSPEC
&& XINT (XEXP (operands[2], 0), 1) == UNSPEC_PLTOFF"
{
output_asm_insn
- ("lea{q}\t{%&@tlsld(%%rip), %%rdi|rdi, %&@tlsld[rip]}", operands);
+ ("lea{q}\t{%&@tlsld(%%rip), %4|%4, %&@tlsld[rip]}", operands);
output_asm_insn ("movabs{q}\t{%2, %%rax|rax, %2}", operands);
output_asm_insn ("add{q}\t{%1, %%rax|rax, %1}", operands);
return "call\t{*%%rax|rax}";
@@ -23357,7 +23362,8 @@
(call:P
(mem:QI (match_operand 1))
(const_int 0)))
- (unspec:P [(reg:P SP_REG)] UNSPEC_TLS_LD_BASE)])]
+ (unspec:P [(reg:P SP_REG)] UNSPEC_TLS_LD_BASE)
+ (clobber (match_operand:P 2 "register_operand"))])]
"TARGET_64BIT"
"ix86_tls_descriptor_calls_expanded_in_cfun = true;")
diff --git a/gcc/config/riscv/riscv-v.cc b/gcc/config/riscv/riscv-v.cc
index 69f2a1ec..ce1633c 100644
--- a/gcc/config/riscv/riscv-v.cc
+++ b/gcc/config/riscv/riscv-v.cc
@@ -1598,7 +1598,7 @@ expand_const_vector_interleaved_stepped_npatterns (rtx target, rtx src,
shifted_vid = gen_reg_rtx (mode);
rtx shift = gen_int_mode (1, Xmode);
rtx shift_ops[] = {shifted_vid, vid, shift};
- emit_vlmax_insn (code_for_pred_scalar (ASHIFT, mode), BINARY_OP,
+ emit_vlmax_insn (code_for_pred_scalar (LSHIFTRT, mode), BINARY_OP,
shift_ops);
}
else
diff --git a/gcc/coverage.cc b/gcc/coverage.cc
index c0ae76a4..dd3ed2e 100644
--- a/gcc/coverage.cc
+++ b/gcc/coverage.cc
@@ -235,7 +235,7 @@ read_counts_file (void)
}
else if (tag == GCOV_TAG_OBJECT_SUMMARY)
{
- profile_info = XCNEW (gcov_summary);
+ gcov_profile_info = profile_info = XCNEW (gcov_summary);
profile_info->runs = gcov_read_unsigned ();
profile_info->sum_max = gcov_read_unsigned ();
}
@@ -1315,9 +1315,7 @@ coverage_init (const char *filename)
strcpy (da_file_name + prefix_len + len, GCOV_DATA_SUFFIX);
bbg_file_stamp = local_tick;
- if (flag_auto_profile)
- read_autofdo_file ();
- else if (flag_branch_probabilities)
+ if (flag_branch_probabilities)
read_counts_file ();
/* Name of bbg file. */
diff --git a/gcc/cp/constexpr.cc b/gcc/cp/constexpr.cc
index 704d936..f9066bc 100644
--- a/gcc/cp/constexpr.cc
+++ b/gcc/cp/constexpr.cc
@@ -8114,14 +8114,20 @@ cxx_eval_constant_expression (const constexpr_ctx *ctx, tree t,
ctx->global->put_value (new_ctx.object, new_ctx.ctor);
ctx = &new_ctx;
}
+
+ /* If the initializer is complex, evaluate it to initialize slot. */
+ bool is_complex = target_expr_needs_replace (t);
+ if (is_complex)
+ /* In case no initialization actually happens, clear out any
+ void_node from a previous evaluation. */
+ ctx->global->put_value (slot, NULL_TREE);
+
/* Pass vc_prvalue because this indicates
initialization of a temporary. */
r = cxx_eval_constant_expression (ctx, TREE_OPERAND (t, 1), vc_prvalue,
non_constant_p, overflow_p);
if (*non_constant_p)
break;
- /* If the initializer is complex, evaluate it to initialize slot. */
- bool is_complex = target_expr_needs_replace (t);
if (!is_complex)
{
r = unshare_constructor (r);
diff --git a/gcc/doc/invoke.texi b/gcc/doc/invoke.texi
index 8163c3a..ad11874c 100644
--- a/gcc/doc/invoke.texi
+++ b/gcc/doc/invoke.texi
@@ -340,7 +340,7 @@ Objective-C and Objective-C++ Dialects}.
-w -Wextra -Wall -Wabi=@var{n}
-Waddress -Wno-address-of-packed-member -Waggregate-return
-Walloc-size -Walloc-size-larger-than=@var{byte-size} -Walloc-zero
--Walloca -Walloca-larger-than=@var{byte-size}
+-Walloca -Walloca-larger-than=@var{byte-size} -Wauto-profile
-Wno-aggressive-loop-optimizations
-Warith-conversion
-Warray-bounds -Warray-bounds=@var{n} -Warray-compare
@@ -8715,6 +8715,11 @@ larger.
@item -Walloca
This option warns on all uses of @code{alloca} in the source.
+@opindex Wno-auto-profile
+@opindex Wauto-profile
+@item -Wauto-profile
+Output warnings about auto-profile inconsistencies.
+
@opindex Walloca-larger-than=
@opindex Wno-alloca-larger-than
@item -Walloca-larger-than=@var{byte-size}
diff --git a/gcc/doc/md.texi b/gcc/doc/md.texi
index 2a1f991..28159b2 100644
--- a/gcc/doc/md.texi
+++ b/gcc/doc/md.texi
@@ -4997,8 +4997,8 @@ This pattern is not allowed to @code{FAIL}.
Like @samp{vec_load_lanes@var{m}@var{n}}, but takes an additional
mask operand (operand 2) that specifies which elements of the destination
vectors should be loaded. Other elements of the destination vectors are
-taken from operand 3, which is an else operand similar to the one in
-@code{maskload}.
+taken from operand 3, which is an else operand in the subvector mode
+@var{n}, similar to the one in @code{maskload}.
The operation is equivalent to:
@smallexample
diff --git a/gcc/fortran/resolve.cc b/gcc/fortran/resolve.cc
index 50a6fe7..4a6e951 100644
--- a/gcc/fortran/resolve.cc
+++ b/gcc/fortran/resolve.cc
@@ -4807,35 +4807,6 @@ resolve_operator (gfc_expr *e)
return false;
}
}
-
- /* coranks have to be equal or one has to be zero to be combinable. */
- if (op1->corank == op2->corank || (op1->corank != 0 && op2->corank == 0))
- {
- e->corank = op1->corank;
- /* Only do this, when regular array has not set a shape yet. */
- if (e->shape == NULL)
- {
- if (op1->corank != 0)
- {
- e->shape = gfc_copy_shape (op1->shape, op1->corank);
- }
- }
- }
- else if (op1->corank == 0 && op2->corank != 0)
- {
- e->corank = op2->corank;
- /* Only do this, when regular array has not set a shape yet. */
- if (e->shape == NULL)
- e->shape = gfc_copy_shape (op2->shape, op2->corank);
- }
- else if ((op1->ref && !gfc_ref_this_image (op1->ref))
- || (op2->ref && !gfc_ref_this_image (op2->ref)))
- {
- gfc_error ("Inconsistent coranks for operator at %L and %L",
- &op1->where, &op2->where);
- return false;
- }
-
break;
case INTRINSIC_PARENTHESES:
diff --git a/gcc/ipa-cp.cc b/gcc/ipa-cp.cc
index 3e073af..480cf48 100644
--- a/gcc/ipa-cp.cc
+++ b/gcc/ipa-cp.cc
@@ -554,6 +554,7 @@ cs_interesting_for_ipcp_p (cgraph_edge *e)
/* If we have zero IPA profile, still consider edge for cloning
in case we do partial training. */
if (e->count.ipa ().initialized_p ()
+ && e->count.ipa ().quality () != AFDO
&& !opt_for_fn (e->callee->decl,flag_profile_partial_training))
return false;
return true;
@@ -617,7 +618,9 @@ ipcp_cloning_candidate_p (struct cgraph_node *node)
return false;
}
- if (node->optimize_for_size_p ())
+ /* Do not use profile here since cold wrapper wrap
+ hot function. */
+ if (opt_for_fn (node->decl, optimize_size))
{
if (dump_file)
fprintf (dump_file, "Not considering %s for cloning; "
@@ -3341,10 +3344,10 @@ devirtualization_time_bonus (struct cgraph_node *node,
/* Return time bonus incurred because of hints stored in ESTIMATES. */
-static int
+static sreal
hint_time_bonus (cgraph_node *node, const ipa_call_estimates &estimates)
{
- int result = 0;
+ sreal result = 0;
ipa_hints hints = estimates.hints;
if (hints & (INLINE_HINT_loop_iterations | INLINE_HINT_loop_stride))
result += opt_for_fn (node->decl, param_ipa_cp_loop_hint_bonus);
@@ -3352,10 +3355,10 @@ hint_time_bonus (cgraph_node *node, const ipa_call_estimates &estimates)
sreal bonus_for_one = opt_for_fn (node->decl, param_ipa_cp_loop_hint_bonus);
if (hints & INLINE_HINT_loop_iterations)
- result += (estimates.loops_with_known_iterations * bonus_for_one).to_int ();
+ result += estimates.loops_with_known_iterations * bonus_for_one;
if (hints & INLINE_HINT_loop_stride)
- result += (estimates.loops_with_known_strides * bonus_for_one).to_int ();
+ result += estimates.loops_with_known_strides * bonus_for_one;
return result;
}
@@ -3391,9 +3394,10 @@ good_cloning_opportunity_p (struct cgraph_node *node, sreal time_benefit,
int size_cost, bool called_without_ipa_profile)
{
gcc_assert (count_sum.ipa () == count_sum);
+ if (count_sum.quality () == AFDO)
+ count_sum = count_sum.force_nonzero ();
if (time_benefit == 0
|| !opt_for_fn (node->decl, flag_ipa_cp_clone)
- || node->optimize_for_size_p ()
/* If there is no call which was executed in profiling or where
profile is missing, we do not want to clone. */
|| (!called_without_ipa_profile && !count_sum.nonzero_p ()))
@@ -3436,7 +3440,7 @@ good_cloning_opportunity_p (struct cgraph_node *node, sreal time_benefit,
introduced. This is likely almost always going to be true, since we
already checked that time saved is large enough to be considered
hot. */
- else if (evaluation.to_int () >= eval_threshold)
+ else if (evaluation >= (sreal)eval_threshold)
return true;
/* If all call sites have profile known; we know we do not want t clone.
If there are calls with unknown profile; try local heuristics. */
@@ -3457,7 +3461,7 @@ good_cloning_opportunity_p (struct cgraph_node *node, sreal time_benefit,
info->node_calling_single_call ? ", single_call" : "",
evaluation.to_double (), eval_threshold);
- return evaluation.to_int () >= eval_threshold;
+ return evaluation >= eval_threshold;
}
/* Grow vectors in AVALS and fill them with information about values of
@@ -3543,8 +3547,8 @@ perform_estimation_of_a_value (cgraph_node *node,
time_benefit = 0;
else
time_benefit = (estimates.nonspecialized_time - estimates.time)
+ + hint_time_bonus (node, estimates)
+ (devirtualization_time_bonus (node, avals)
- + hint_time_bonus (node, estimates)
+ removable_params_cost + est_move_cost);
int size = estimates.size;
@@ -4834,11 +4838,12 @@ update_profiling_info (struct cgraph_node *orig_node,
profile_count unexp = orig_node_count - new_sum - orig_nonrec_call_count;
int limit_den = 2 * (orig_nonrec_calls + new_nonrec_calls);
- profile_count new_part
- = MAX(MIN (unexp.apply_scale (new_sum,
- new_sum + orig_nonrec_call_count),
- unexp.apply_scale (limit_den - 1, limit_den)),
- unexp.apply_scale (new_nonrec_calls, limit_den));
+ profile_count new_part = unexp.apply_scale (limit_den - 1, limit_den);
+ profile_count den = new_sum + orig_nonrec_call_count;
+ if (den.nonzero_p ())
+ new_part = MIN (unexp.apply_scale (new_sum, den), new_part);
+ new_part = MAX (new_part,
+ unexp.apply_scale (new_nonrec_calls, limit_den));
if (dump_file)
{
fprintf (dump_file, " Claiming ");
diff --git a/gcc/ipa-fnsummary.cc b/gcc/ipa-fnsummary.cc
index 4c062fe..48343a7 100644
--- a/gcc/ipa-fnsummary.cc
+++ b/gcc/ipa-fnsummary.cc
@@ -3236,8 +3236,8 @@ analyze_function_body (struct cgraph_node *node, bool early)
if (!loop->header->aux)
continue;
- profile_count phdr_count = loop_preheader_edge (loop)->count ();
- sreal phdr_freq = phdr_count.to_sreal_scale (entry_count);
+ profile_count hdr_count = loop->header->count;
+ sreal hdr_freq = hdr_count.to_sreal_scale (entry_count);
bb_predicate = *(ipa_predicate *)loop->header->aux;
auto_vec<edge> exits = get_loop_exit_edges (loop);
@@ -3257,7 +3257,7 @@ analyze_function_body (struct cgraph_node *node, bool early)
loop_iterations &= will_be_nonconstant;
}
add_freqcounting_predicate (&s->loop_iterations, loop_iterations,
- phdr_freq, max_loop_predicates);
+ hdr_freq, max_loop_predicates);
}
/* To avoid quadratic behavior we analyze stride predicates only
@@ -3268,8 +3268,8 @@ analyze_function_body (struct cgraph_node *node, bool early)
{
ipa_predicate loop_stride = true;
basic_block *body = get_loop_body (loop);
- profile_count phdr_count = loop_preheader_edge (loop)->count ();
- sreal phdr_freq = phdr_count.to_sreal_scale (entry_count);
+ profile_count hdr_count = loop->header->count;
+ sreal hdr_freq = hdr_count.to_sreal_scale (entry_count);
for (unsigned i = 0; i < loop->num_nodes; i++)
{
gimple_stmt_iterator gsi;
@@ -3309,7 +3309,7 @@ analyze_function_body (struct cgraph_node *node, bool early)
}
}
add_freqcounting_predicate (&s->loop_strides, loop_stride,
- phdr_freq, max_loop_predicates);
+ hdr_freq, max_loop_predicates);
free (body);
}
scev_finalize ();
diff --git a/gcc/opts.cc b/gcc/opts.cc
index 4e39b95..6ca1ec7 100644
--- a/gcc/opts.cc
+++ b/gcc/opts.cc
@@ -2080,10 +2080,13 @@ print_specific_help (unsigned int include_flags,
static void
enable_fdo_optimizations (struct gcc_options *opts,
struct gcc_options *opts_set,
- int value)
+ int value, bool autofdo)
{
- SET_OPTION_IF_UNSET (opts, opts_set, flag_branch_probabilities, value);
- SET_OPTION_IF_UNSET (opts, opts_set, flag_profile_values, value);
+ if (!autofdo)
+ {
+ SET_OPTION_IF_UNSET (opts, opts_set, flag_branch_probabilities, value);
+ SET_OPTION_IF_UNSET (opts, opts_set, flag_profile_values, value);
+ }
SET_OPTION_IF_UNSET (opts, opts_set, flag_unroll_loops, value);
SET_OPTION_IF_UNSET (opts, opts_set, flag_peel_loops, value);
SET_OPTION_IF_UNSET (opts, opts_set, flag_tracer, value);
@@ -3124,7 +3127,7 @@ common_handle_option (struct gcc_options *opts,
/* No break here - do -fprofile-use processing. */
/* FALLTHRU */
case OPT_fprofile_use:
- enable_fdo_optimizations (opts, opts_set, value);
+ enable_fdo_optimizations (opts, opts_set, value, false);
SET_OPTION_IF_UNSET (opts, opts_set, flag_profile_reorder_functions,
value);
/* Indirect call profiling should do all useful transformations
@@ -3141,7 +3144,7 @@ common_handle_option (struct gcc_options *opts,
/* No break here - do -fauto-profile processing. */
/* FALLTHRU */
case OPT_fauto_profile:
- enable_fdo_optimizations (opts, opts_set, value);
+ enable_fdo_optimizations (opts, opts_set, value, true);
SET_OPTION_IF_UNSET (opts, opts_set, flag_profile_correction, value);
break;
diff --git a/gcc/passes.cc b/gcc/passes.cc
index 6c67ffe..a33c8d9 100644
--- a/gcc/passes.cc
+++ b/gcc/passes.cc
@@ -355,13 +355,6 @@ finish_optimization_passes (void)
gcc::dump_manager *dumps = m_ctxt->get_dumps ();
timevar_push (TV_DUMP);
- if (coverage_instrumentation_p () || flag_test_coverage
- || flag_branch_probabilities)
- {
- dumps->dump_start (m_pass_profile_1->static_pass_number, NULL);
- end_branch_prob ();
- dumps->dump_finish (m_pass_profile_1->static_pass_number);
- }
/* Do whatever is necessary to finish printing the graphs. */
for (i = TDI_end; (dfi = dumps->get_dump_file_info (i)) != NULL; ++i)
@@ -2036,6 +2029,7 @@ pass_manager::dump_profile_report () const
fprintf (dump_file, "| %12.0f", profile_record[i].time);
/* Time units changes with profile estimate and feedback. */
if (i == m_pass_profile_1->static_pass_number
+ || i == m_pass_ipa_auto_profile_1->static_pass_number
|| i == m_pass_ipa_tree_profile_1->static_pass_number)
fprintf (dump_file, "-------------");
else if (rel_time_change)
diff --git a/gcc/profile.cc b/gcc/profile.cc
index 6234dd2..5d581e7 100644
--- a/gcc/profile.cc
+++ b/gcc/profile.cc
@@ -68,6 +68,7 @@ along with GCC; see the file COPYING3. If not see
#include "file-prefix-map.h"
#include "profile.h"
+#include "auto-profile.h"
struct condcov;
struct condcov *find_conditions (struct function*);
@@ -97,7 +98,7 @@ struct bb_profile_info {
/* Counter summary from the last set of coverage counts read. */
-gcov_summary *profile_info;
+gcov_summary *profile_info, *gcov_profile_info;
/* Collect statistics on the performance of this pass for the entire source
file. */
@@ -113,6 +114,27 @@ static int total_hist_br_prob[20];
static int total_num_branches;
static int total_num_conds;
+/* Map between auto-fdo and fdo counts used to compare quality
+ of the profiles. */
+struct afdo_fdo_record
+{
+ cgraph_node *node;
+ struct bb_record
+ {
+ /* Index of the basic block. */
+ int index;
+ profile_count afdo;
+ profile_count fdo;
+
+ /* Successors and predecessors in CFG. */
+ vec <int> preds;
+ vec <int> succs;
+ };
+ vec <bb_record> bbs;
+};
+
+static vec <afdo_fdo_record> afdo_fdo_records;
+
/* Forward declarations. */
static void find_spanning_tree (struct edge_list *);
@@ -472,6 +494,22 @@ compute_branch_probabilities (unsigned cfg_checksum, unsigned lineno_checksum)
BB_INFO (EXIT_BLOCK_PTR_FOR_FN (cfun))->succ_count = 2;
BB_INFO (ENTRY_BLOCK_PTR_FOR_FN (cfun))->pred_count = 2;
+ afdo_fdo_record record = {cgraph_node::get (current_function_decl), vNULL};;
+ if (dump_file && flag_auto_profile)
+ {
+ FOR_ALL_BB_FN (bb, cfun)
+ {
+ record.bbs.safe_push ({bb->index, bb->count.ipa (),
+ profile_count::uninitialized (), vNULL, vNULL});
+ record.bbs.last ().preds.reserve (EDGE_COUNT (bb->preds));
+ for (auto &e : bb->preds)
+ record.bbs.last ().preds.safe_push (e->src->index);
+ record.bbs.last ().succs.reserve (EDGE_COUNT (bb->succs));
+ for (auto &e : bb->succs)
+ record.bbs.last ().succs.safe_push (e->dest->index);
+ }
+ }
+
num_edges = read_profile_edge_counts (exec_counts);
if (dump_file)
@@ -812,6 +850,18 @@ compute_branch_probabilities (unsigned cfg_checksum, unsigned lineno_checksum)
delete edge_gcov_counts;
edge_gcov_counts = NULL;
+ if (dump_file && flag_auto_profile)
+ {
+ int i = 0;
+ FOR_ALL_BB_FN (bb, cfun)
+ {
+ gcc_checking_assert (record.bbs[i].index == bb->index);
+ record.bbs[i].fdo = bb->count.ipa ();
+ i++;
+ }
+ afdo_fdo_records.safe_push (record);
+ }
+
update_max_bb_count ();
if (dump_file)
@@ -1804,6 +1854,65 @@ end_branch_prob (void)
}
fprintf (dump_file, "Total number of conditions: %d\n",
total_num_conds);
+ if (afdo_fdo_records.length ())
+ {
+ profile_count fdo_sum = profile_count::zero ();
+ profile_count afdo_sum = profile_count::zero ();
+ for (const auto &r : afdo_fdo_records)
+ for (const auto &b : r.bbs)
+ if (b.fdo.initialized_p () && b.afdo.initialized_p ())
+ {
+ fdo_sum += b.fdo;
+ afdo_sum += b.afdo;
+ }
+ for (auto &r : afdo_fdo_records)
+ {
+ for (auto &b : r.bbs)
+ if (b.fdo.initialized_p () && b.afdo.initialized_p ())
+ {
+ fprintf (dump_file, "%s bb %i fdo %" PRIu64 " (%s) afdo ",
+ r.node->dump_name (), b.index,
+ (int64_t)b.fdo.to_gcov_type (),
+ maybe_hot_count_p
+ (NULL, b.fdo.apply_scale (1, 1000))
+ ? "very hot"
+ : maybe_hot_count_p (NULL, b.fdo)
+ ? "hot" : "cold");
+ b.afdo.dump (dump_file);
+ fprintf (dump_file, " (%s) ",
+ maybe_hot_afdo_count_p
+ (b.afdo.apply_scale (1, 1000))
+ ? "very hot"
+ : maybe_hot_afdo_count_p (b.afdo)
+ ? "hot" : "cold");
+ if (afdo_sum.nonzero_p ())
+ {
+ profile_count scaled
+ = b.afdo.apply_scale (fdo_sum, afdo_sum);
+ fprintf (dump_file, "scaled %" PRIu64,
+ scaled.to_gcov_type ());
+ if (b.fdo.to_gcov_type ())
+ fprintf (dump_file, " diff %" PRId64 ", %+2.2f%%",
+ scaled.to_gcov_type ()
+ - b.fdo.to_gcov_type (),
+ (scaled.to_gcov_type ()
+ - b.fdo.to_gcov_type ()) * 100.0
+ / b.fdo.to_gcov_type ());
+ }
+ fprintf (dump_file, "\n preds");
+ for (int val : b.preds)
+ fprintf (dump_file, " %i", val);
+ b.preds.release ();
+ fprintf (dump_file, "\n succs");
+ for (int val : b.succs)
+ fprintf (dump_file, " %i", val);
+ b.succs.release ();
+ fprintf (dump_file, "\n");
+ }
+ r.bbs.release ();
+ }
+ }
+ afdo_fdo_records.release ();
}
}
diff --git a/gcc/profile.h b/gcc/profile.h
index a97445b..8ccdfc4 100644
--- a/gcc/profile.h
+++ b/gcc/profile.h
@@ -75,7 +75,7 @@ extern void get_working_sets (void);
/* Counter summary from the last set of coverage counts read by
profile.cc. */
-extern struct gcov_summary *profile_info;
+extern struct gcov_summary *profile_info, *gcov_profile_info;
/* Return true if any cfg coverage/profiling is enabled; -fprofile-arcs
-fcondition-coverage -fpath-coverage. */
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index eaa08db..ab15e88 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,21 @@
+2025-07-02 Dimitar Dimitrov <dimitar@dinux.eu>
+
+ * gcc.target/riscv/mcpu-xt-c908.c: Disable for E ABI variants.
+ * gcc.target/riscv/mcpu-xt-c908v.c: Ditto.
+ * gcc.target/riscv/mcpu-xt-c910.c: Ditto.
+ * gcc.target/riscv/mcpu-xt-c910v2.c: Ditto.
+ * gcc.target/riscv/mcpu-xt-c920.c: Ditto.
+ * gcc.target/riscv/mcpu-xt-c920v2.c: Ditto.
+ * gcc.target/riscv/pr118241.c: Ditto.
+ * gcc.target/riscv/pr120223.c: Ditto.
+ * gcc.target/riscv/rvv/base/pr119164.c: Disable for E ABI variants
+ and for 32-bit ISA.
+
+2025-07-02 Alexey Merzlyakov <alexey.merzlyakov@samsung.com>
+
+ PR target/120356
+ * gcc.target/riscv/rvv/autovec/pr120356.c: New test.
+
2025-07-01 Qing Zhao <qing.zhao@oracle.com>
* gcc.dg/ubsan/pointer-counted-by-bounds-2.c: New test.
diff --git a/gcc/testsuite/g++.dg/cpp23/range-for10.C b/gcc/testsuite/g++.dg/cpp23/range-for10.C
new file mode 100644
index 0000000..96eab00
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp23/range-for10.C
@@ -0,0 +1,23 @@
+// PR c++/120684
+// { dg-do compile { target c++20 } }
+
+struct basic_string {
+ constexpr ~basic_string() {}
+};
+template <typename _Vp> struct lazy_split_view {
+ _Vp _M_base;
+ constexpr int* begin() { return nullptr; }
+ constexpr int* end() { return nullptr; }
+};
+constexpr void test_with_piping() {
+ basic_string input;
+ for (auto e : lazy_split_view(input))
+ ;
+}
+constexpr bool main_test() {
+ test_with_piping();
+ test_with_piping();
+ return true;
+}
+//int main() { main_test(); }
+static_assert(main_test());
diff --git a/gcc/testsuite/gcc.target/i386/pr120908.c b/gcc/testsuite/gcc.target/i386/pr120908.c
new file mode 100644
index 0000000..10e5a46
--- /dev/null
+++ b/gcc/testsuite/gcc.target/i386/pr120908.c
@@ -0,0 +1,16 @@
+/* { dg-do compile { target { lp64 && fpic } } } */
+/* { dg-options "-O2 -fpic -mtls-dialect=gnu -mcmodel=large" } */
+
+extern __thread long bar1;
+long *
+foo1 (void)
+{
+ return &bar1;
+}
+
+static __thread long bar2;
+long *
+foo2 (void)
+{
+ return &bar2;
+}
diff --git a/gcc/testsuite/gcc.target/i386/pr120936-1.c b/gcc/testsuite/gcc.target/i386/pr120936-1.c
new file mode 100644
index 0000000..a20680d
--- /dev/null
+++ b/gcc/testsuite/gcc.target/i386/pr120936-1.c
@@ -0,0 +1,18 @@
+/* { dg-do compile { target fpic } } */
+/* { dg-options "-O2 -pg -mno-fentry -fno-pic -fno-shrink-wrap" } */
+/* Keep labels and directives ('.cfi_startproc', '.cfi_endproc'). */
+/* { dg-final { check-function-bodies "**" "" "" { target "*-*-*" } {^\t?\.} } } */
+
+/*
+**foo:
+**.LFB[0-9]+:
+**...
+** .cfi_.*
+** call mcount
+**...
+*/
+
+void
+foo (void)
+{
+}
diff --git a/gcc/testsuite/gcc.target/i386/pr120936-10.c b/gcc/testsuite/gcc.target/i386/pr120936-10.c
new file mode 100644
index 0000000..ab95b08
--- /dev/null
+++ b/gcc/testsuite/gcc.target/i386/pr120936-10.c
@@ -0,0 +1,23 @@
+/* { dg-do compile { target { fpic && lp64 } } } */
+/* { dg-options "-O2 -mcmodel=large -pg -mno-fentry -fpic -fno-shrink-wrap" } */
+/* Keep labels and directives ('.cfi_startproc', '.cfi_endproc'). */
+/* { dg-final { check-function-bodies "**" "" "" { target "*-*-*" } {^(1|\t?\.)} } } */
+
+/*
+**foo:
+**.LFB[0-9]+:
+**...
+** .cfi_.*
+**1: movabsq \$_GLOBAL_OFFSET_TABLE_-1b, %r11
+** leaq 1b\(%rip\), %r10
+** addq %r11, %r10
+** movabsq \$mcount@PLTOFF, %r11
+** addq %r11, %r10
+** call \*%r10
+**...
+*/
+
+void
+foo (void)
+{
+}
diff --git a/gcc/testsuite/gcc.target/i386/pr120936-11.c b/gcc/testsuite/gcc.target/i386/pr120936-11.c
new file mode 100644
index 0000000..3e39dfe
--- /dev/null
+++ b/gcc/testsuite/gcc.target/i386/pr120936-11.c
@@ -0,0 +1,19 @@
+/* { dg-do compile { target { fpic && lp64 } } } */
+/* { dg-options "-O2 -mrecord-mcount -mcmodel=large -pg -mno-fentry -fno-pic -fno-shrink-wrap" } */
+/* Keep labels and directives ('.cfi_startproc', '.cfi_endproc'). */
+/* { dg-final { check-function-bodies "**" "" "" { target "*-*-*" } {^(1|\t?\.)} } } */
+
+/*
+**foo:
+**.LFB[0-9]+:
+**...
+** .cfi_.*
+**1: movabsq \$mcount, %r10
+** call \*%r10
+**...
+*/
+
+void
+foo (void)
+{
+}
diff --git a/gcc/testsuite/gcc.target/i386/pr120936-12.c b/gcc/testsuite/gcc.target/i386/pr120936-12.c
new file mode 100644
index 0000000..b5a2aac
--- /dev/null
+++ b/gcc/testsuite/gcc.target/i386/pr120936-12.c
@@ -0,0 +1,23 @@
+/* { dg-do compile { target { fpic && lp64 } } } */
+/* { dg-options "-O2 -mcmodel=large -mrecord-mcount -pg -mno-fentry -fpic -fno-shrink-wrap" } */
+/* Keep labels and directives ('.cfi_startproc', '.cfi_endproc'). */
+/* { dg-final { check-function-bodies "**" "" "" { target "*-*-*" } {^(1|\t?\.)} } } */
+
+/*
+**foo:
+**.LFB[0-9]+:
+**...
+** .cfi_.*
+**1: movabsq \$_GLOBAL_OFFSET_TABLE_-1b, %r11
+** leaq 1b\(%rip\), %r10
+** addq %r11, %r10
+** movabsq \$mcount@PLTOFF, %r11
+** addq %r11, %r10
+** call \*%r10
+**...
+*/
+
+void
+foo (void)
+{
+}
diff --git a/gcc/testsuite/gcc.target/i386/pr120936-2.c b/gcc/testsuite/gcc.target/i386/pr120936-2.c
new file mode 100644
index 0000000..0835658
--- /dev/null
+++ b/gcc/testsuite/gcc.target/i386/pr120936-2.c
@@ -0,0 +1,18 @@
+/* { dg-do compile { target fpic } } */
+/* { dg-options "-O2 -pg -mno-fentry -fpic -fno-shrink-wrap" } */
+/* Keep labels and directives ('.cfi_startproc', '.cfi_endproc'). */
+/* { dg-final { check-function-bodies "**" "" "" { target "*-*-*" } {^\t?\.} } } */
+
+/*
+**foo:
+**.LFB[0-9]+:
+**...
+** .cfi_.*
+** call mcount@PLT
+**...
+*/
+
+void
+foo (void)
+{
+}
diff --git a/gcc/testsuite/gcc.target/i386/pr120936-3.c b/gcc/testsuite/gcc.target/i386/pr120936-3.c
new file mode 100644
index 0000000..dc0a8f1
--- /dev/null
+++ b/gcc/testsuite/gcc.target/i386/pr120936-3.c
@@ -0,0 +1,18 @@
+/* { dg-do compile { target fpic } } */
+/* { dg-options "-O2 -mnop-mcount -pg -mno-fentry -fno-pic -fno-shrink-wrap" } */
+/* Keep labels and directives ('.cfi_startproc', '.cfi_endproc'). */
+/* { dg-final { check-function-bodies "**" "" "" { target "*-*-*" } {^\t?\.} } } */
+
+/*
+**foo:
+**.LFB[0-9]+:
+**...
+** .cfi_.*
+** .byte 0x0f, 0x1f, 0x44, 0x00, 0x00
+**...
+*/
+
+void
+foo (void)
+{
+}
diff --git a/gcc/testsuite/gcc.target/i386/pr120936-4.c b/gcc/testsuite/gcc.target/i386/pr120936-4.c
new file mode 100644
index 0000000..2420f0b
--- /dev/null
+++ b/gcc/testsuite/gcc.target/i386/pr120936-4.c
@@ -0,0 +1,18 @@
+/* { dg-do compile { target fpic } } */
+/* { dg-options "-O2 -pg -mno-fentry -mrecord-mcount -fno-pic -fno-shrink-wrap" } */
+/* Keep labels and directives ('.cfi_startproc', '.cfi_endproc'). */
+/* { dg-final { check-function-bodies "**" "" "" { target "*-*-*" } {^(1|\t?\.)} } } */
+
+/*
+**foo:
+**.LFB[0-9]+:
+**...
+** .cfi_.*
+**1: call mcount
+**...
+*/
+
+void
+foo (void)
+{
+}
diff --git a/gcc/testsuite/gcc.target/i386/pr120936-5.c b/gcc/testsuite/gcc.target/i386/pr120936-5.c
new file mode 100644
index 0000000..20ecd37
--- /dev/null
+++ b/gcc/testsuite/gcc.target/i386/pr120936-5.c
@@ -0,0 +1,18 @@
+/* { dg-do compile { target fpic } } */
+/* { dg-options "-O2 -pg -mrecord-mcount -mno-fentry -fpic -fno-shrink-wrap" } */
+/* Keep labels and directives ('.cfi_startproc', '.cfi_endproc'). */
+/* { dg-final { check-function-bodies "**" "" "" { target "*-*-*" } {^(1|\t?\.)} } } */
+
+/*
+**foo:
+**.LFB[0-9]+:
+**...
+** .cfi_.*
+**1: call mcount@PLT
+**...
+*/
+
+void
+foo (void)
+{
+}
diff --git a/gcc/testsuite/gcc.target/i386/pr120936-6.c b/gcc/testsuite/gcc.target/i386/pr120936-6.c
new file mode 100644
index 0000000..6e2290f
--- /dev/null
+++ b/gcc/testsuite/gcc.target/i386/pr120936-6.c
@@ -0,0 +1,18 @@
+/* { dg-do compile { target fpic } } */
+/* { dg-options "-O2 -mrecord-mcount -mnop-mcount -pg -mno-fentry -fno-pic -fno-shrink-wrap" } */
+/* Keep labels and directives ('.cfi_startproc', '.cfi_endproc'). */
+/* { dg-final { check-function-bodies "**" "" "" { target "*-*-*" } {^(1|\t?\.)} } } */
+
+/*
+**foo:
+**.LFB[0-9]+:
+**...
+** .cfi_.*
+**1: .byte 0x0f, 0x1f, 0x44, 0x00, 0x00
+**...
+*/
+
+void
+foo (void)
+{
+}
diff --git a/gcc/testsuite/gcc.target/i386/pr120936-7.c b/gcc/testsuite/gcc.target/i386/pr120936-7.c
new file mode 100644
index 0000000..0c86467
--- /dev/null
+++ b/gcc/testsuite/gcc.target/i386/pr120936-7.c
@@ -0,0 +1,18 @@
+/* { dg-do compile { target { *-*-linux* && { ! ia32 } } } } */
+/* { dg-options "-O2 -pg -mno-fentry -fpic -fno-plt -fno-shrink-wrap" } */
+/* Keep labels and directives ('.cfi_startproc', '.cfi_endproc'). */
+/* { dg-final { check-function-bodies "**" "" "" { target "*-*-*" } {^\t?\.} } } */
+
+/*
+**foo:
+**.LFB[0-9]+:
+**...
+** .cfi_.*
+** call \*mcount@GOTPCREL\(%rip\)
+**...
+*/
+
+void
+foo (void)
+{
+}
diff --git a/gcc/testsuite/gcc.target/i386/pr120936-8.c b/gcc/testsuite/gcc.target/i386/pr120936-8.c
new file mode 100644
index 0000000..3f86781
--- /dev/null
+++ b/gcc/testsuite/gcc.target/i386/pr120936-8.c
@@ -0,0 +1,18 @@
+/* { dg-do compile { target { *-*-linux* && { ! ia32 } } } } */
+/* { dg-options "-O2 -pg -mrecord-mcount -mno-fentry -fpic -fno-plt -fno-shrink-wrap" } */
+/* Keep labels and directives ('.cfi_startproc', '.cfi_endproc'). */
+/* { dg-final { check-function-bodies "**" "" "" { target "*-*-*" } {^(1|\t?\.)} } } */
+
+/*
+**foo:
+**.LFB[0-9]+:
+**...
+** .cfi_.*
+**1: call \*mcount@GOTPCREL\(%rip\)
+**...
+*/
+
+void
+foo (void)
+{
+}
diff --git a/gcc/testsuite/gcc.target/i386/pr120936-9.c b/gcc/testsuite/gcc.target/i386/pr120936-9.c
new file mode 100644
index 0000000..3f4b387
--- /dev/null
+++ b/gcc/testsuite/gcc.target/i386/pr120936-9.c
@@ -0,0 +1,19 @@
+/* { dg-do compile { target { fpic && lp64 } } } */
+/* { dg-options "-O2 -mcmodel=large -pg -mno-fentry -fno-pic -fno-shrink-wrap" } */
+/* Keep labels and directives ('.cfi_startproc', '.cfi_endproc'). */
+/* { dg-final { check-function-bodies "**" "" "" { target "*-*-*" } {^\t?\.} } } */
+
+/*
+**foo:
+**.LFB[0-9]+:
+**...
+** .cfi_.*
+** movabsq \$mcount, %r10
+** call \*%r10
+**...
+*/
+
+void
+foo (void)
+{
+}
diff --git a/gcc/testsuite/gcc.target/i386/pr93492-3.c b/gcc/testsuite/gcc.target/i386/pr93492-3.c
index b68da30..cdca595 100644
--- a/gcc/testsuite/gcc.target/i386/pr93492-3.c
+++ b/gcc/testsuite/gcc.target/i386/pr93492-3.c
@@ -10,4 +10,4 @@ f10_endbr (void)
{
}
-/* { dg-final { scan-assembler "\t\.cfi_startproc\n\tendbr(32|64)\n.*\.LPFE0:\n\tnop\n1:\tcall\t\[^\n\]*__fentry__\[^\n\]*\n\tret\n" } } */
+/* { dg-final { scan-assembler "\t\.cfi_startproc\n\tendbr(32|64)\n.*\.LPFE0:\n\tnop\n\tcall\t\[^\n\]*__fentry__\[^\n\]*\n\tret\n" } } */
diff --git a/gcc/testsuite/gcc.target/i386/pr93492-5.c b/gcc/testsuite/gcc.target/i386/pr93492-5.c
index ee9849a..cc71f67 100644
--- a/gcc/testsuite/gcc.target/i386/pr93492-5.c
+++ b/gcc/testsuite/gcc.target/i386/pr93492-5.c
@@ -9,4 +9,4 @@ foo (void)
{
}
-/* { dg-final { scan-assembler "\t\.cfi_startproc\n.*\.LPFE0:\n\tnop\n1:\tcall\t\[^\n\]*__fentry__\[^\n\]*\n\tret\n" } } */
+/* { dg-final { scan-assembler "\t\.cfi_startproc\n.*\.LPFE0:\n\tnop\n\tcall\t\[^\n\]*__fentry__\[^\n\]*\n\tret\n" } } */
diff --git a/gcc/testsuite/gcc.target/riscv/mcpu-xt-c908.c b/gcc/testsuite/gcc.target/riscv/mcpu-xt-c908.c
index cb28baf..4ad82a8 100644
--- a/gcc/testsuite/gcc.target/riscv/mcpu-xt-c908.c
+++ b/gcc/testsuite/gcc.target/riscv/mcpu-xt-c908.c
@@ -1,4 +1,4 @@
-/* { dg-do compile } */
+/* { dg-do compile { target { ! riscv_abi_e } } } */
/* { dg-skip-if "-march given" { *-*-* } { "-march=*" } } */
/* { dg-options "-mcpu=xt-c908" { target { rv64 } } } */
/* XuanTie C908 => rv64imafdc_zicbom_zicbop_zicboz_zicntr_zicsr_zifencei_
diff --git a/gcc/testsuite/gcc.target/riscv/mcpu-xt-c908v.c b/gcc/testsuite/gcc.target/riscv/mcpu-xt-c908v.c
index 1b1ee18..bb9e310 100644
--- a/gcc/testsuite/gcc.target/riscv/mcpu-xt-c908v.c
+++ b/gcc/testsuite/gcc.target/riscv/mcpu-xt-c908v.c
@@ -1,4 +1,4 @@
-/* { dg-do compile } */
+/* { dg-do compile { target { ! riscv_abi_e } } } */
/* { dg-skip-if "-march given" { *-*-* } { "-march=*" } } */
/* { dg-options "-mcpu=xt-c908v" { target { rv64 } } } */
/* XuanTie C908v => rv64imafdcv_zicbom_zicbop_zicboz_zicntr_zicsr_zifencei_
diff --git a/gcc/testsuite/gcc.target/riscv/mcpu-xt-c910.c b/gcc/testsuite/gcc.target/riscv/mcpu-xt-c910.c
index 1e27665..397e7b1 100644
--- a/gcc/testsuite/gcc.target/riscv/mcpu-xt-c910.c
+++ b/gcc/testsuite/gcc.target/riscv/mcpu-xt-c910.c
@@ -1,4 +1,4 @@
-/* { dg-do compile } */
+/* { dg-do compile { target { ! riscv_abi_e } } } */
/* { dg-skip-if "-march given" { *-*-* } { "-march=*" } } */
/* { dg-options "-mcpu=xt-c910" { target { rv64 } } } */
/* XuanTie C910 => rv64imafdc_zicntr_zicsr_zifencei_zihpm_zfh_xtheadba_
diff --git a/gcc/testsuite/gcc.target/riscv/mcpu-xt-c910v2.c b/gcc/testsuite/gcc.target/riscv/mcpu-xt-c910v2.c
index 6a54f09..9e39c9f 100644
--- a/gcc/testsuite/gcc.target/riscv/mcpu-xt-c910v2.c
+++ b/gcc/testsuite/gcc.target/riscv/mcpu-xt-c910v2.c
@@ -1,4 +1,4 @@
-/* { dg-do compile } */
+/* { dg-do compile { target { ! riscv_abi_e } } } */
/* { dg-skip-if "-march given" { *-*-* } { "-march=*" } } */
/* { dg-options "-mcpu=xt-c910v2" { target { rv64 } } } */
/* XuanTie C910v2 => rv64imafdc_zicbom_zicbop_zicboz_zicntr_zicond_zicsr_
diff --git a/gcc/testsuite/gcc.target/riscv/mcpu-xt-c920.c b/gcc/testsuite/gcc.target/riscv/mcpu-xt-c920.c
index 6bcd687..4cce90a 100644
--- a/gcc/testsuite/gcc.target/riscv/mcpu-xt-c920.c
+++ b/gcc/testsuite/gcc.target/riscv/mcpu-xt-c920.c
@@ -1,4 +1,4 @@
-/* { dg-do compile } */
+/* { dg-do compile { target { ! riscv_abi_e } } } */
/* { dg-skip-if "-march given" { *-*-* } { "-march=*" } } */
/* { dg-options "-mcpu=xt-c920" { target { rv64 } } } */
/* XuanTie c920 => rv64imafdc_zicntr_zicsr_zifencei_zihpm_zfh_"xtheadba_xtheadbb_xtheadbs_xtheadcmo_xtheadcondmov_xtheadfmemidx_xtheadmac_xtheadmemidx_xtheadmempair_xtheadsync_xtheadvector */
diff --git a/gcc/testsuite/gcc.target/riscv/mcpu-xt-c920v2.c b/gcc/testsuite/gcc.target/riscv/mcpu-xt-c920v2.c
index 36a6267..1f21d07 100644
--- a/gcc/testsuite/gcc.target/riscv/mcpu-xt-c920v2.c
+++ b/gcc/testsuite/gcc.target/riscv/mcpu-xt-c920v2.c
@@ -1,4 +1,4 @@
-/* { dg-do compile } */
+/* { dg-do compile { target { ! riscv_abi_e } } } */
/* { dg-skip-if "-march given" { *-*-* } { "-march=*" } } */
/* { dg-options "-mcpu=xt-c920v2" { target { rv64 } } } */
/* XuanTie C920v2 => rv64imafdcv_zicbom_zicbop_zicboz_zicntr_zicond_zicsr_zifencei _zihintntl_zihintpause_zihpm_zawrs_zfa_zfbfmin_zfh_zca_zcb_zcd_zba_zbb_zbc_zbs_zvfbfmin_zvfbfwma_zvfh_sscofpmf_sstc_svinval_svnapot_svpbmt_xtheadba_xtheadbb_xtheadbs_xtheadcmo_xtheadcondmov_xtheadfmemidx_xtheadsync_xtheadvdot */
diff --git a/gcc/testsuite/gcc.target/riscv/pr118241.c b/gcc/testsuite/gcc.target/riscv/pr118241.c
index f1dc44b..768ea05 100644
--- a/gcc/testsuite/gcc.target/riscv/pr118241.c
+++ b/gcc/testsuite/gcc.target/riscv/pr118241.c
@@ -1,4 +1,4 @@
-/* { dg-do compile } */
+/* { dg-do compile { target { ! riscv_abi_e } } } */
/* { dg-options "-march=rv64gc_zicbop" { target { rv64 } } } */
/* { dg-options "-march=rv32gc_zicbop" { target { rv32 } } } */
/* { dg-skip-if "" { *-*-* } { "-O0" } } */
diff --git a/gcc/testsuite/gcc.target/riscv/pr120223.c b/gcc/testsuite/gcc.target/riscv/pr120223.c
index fae21b6..d6afd86 100644
--- a/gcc/testsuite/gcc.target/riscv/pr120223.c
+++ b/gcc/testsuite/gcc.target/riscv/pr120223.c
@@ -1,4 +1,4 @@
-/* { dg-do compile } */
+/* { dg-do compile { target { ! riscv_abi_e } } } */
/* { dg-options "-mcpu=thead-c906" } */
long foo(long x) { return x ^ 0x80000000; }
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/pr120356.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/pr120356.c
new file mode 100644
index 0000000..2913f04
--- /dev/null
+++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/pr120356.c
@@ -0,0 +1,26 @@
+/* { dg-do run } */
+/* { dg-require-effective-target rvv_zvl256b_ok } */
+/* { dg-options "-march=rv64gcv_zvl256b -mabi=lp64d -mrvv-vector-bits=zvl -O2" } */
+
+unsigned char a = 5;
+long long c[18];
+
+static void d ()
+{
+ for (short i = 0; i < 60; i += 65413)
+ for (char j = 0; j < 18; j++)
+ {
+ for (char k = 0; k < 18; k++)
+ a *= 143;
+ for (char k = 0; k < 6; k++)
+ for (char l = 0; l < 18; l++)
+ c[l] = 0;
+ }
+}
+
+int main ()
+{
+ d ();
+ if (a + c[0] != 69)
+ __builtin_abort ();
+}
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/pr119164.c b/gcc/testsuite/gcc.target/riscv/rvv/base/pr119164.c
index a39a7f1..266e948 100644
--- a/gcc/testsuite/gcc.target/riscv/rvv/base/pr119164.c
+++ b/gcc/testsuite/gcc.target/riscv/rvv/base/pr119164.c
@@ -1,7 +1,7 @@
/* Reduced from SPEC2017 blender: node_texture_util.c.
The conditional function call was tripping mode switching state machine */
-/* { dg-do compile } */
+/* { dg-do compile { target { rv64 && { ! riscv_abi_e } } } } */
/* { dg-options " -Ofast -march=rv64gcv_zvl256b -ftree-vectorize -mrvv-vector-bits=zvl" } */
void *a;
diff --git a/gcc/testsuite/gfortran.dg/coarray/coindexed_6.f90 b/gcc/testsuite/gfortran.dg/coarray/coindexed_6.f90
index 8f5dcab..d566c504 100644
--- a/gcc/testsuite/gfortran.dg/coarray/coindexed_6.f90
+++ b/gcc/testsuite/gfortran.dg/coarray/coindexed_6.f90
@@ -5,13 +5,20 @@
program p
implicit none
- integer, allocatable :: arr(:,:) [:,:]
+ type T
+ integer, allocatable :: arr(:,:) [:,:]
+ end type
+
+ type(T) :: o
+ integer, allocatable :: vec(:)[:,:]
integer :: c[*]
c = 7
- allocate(arr(4,3)[2,*], source=6)
+ allocate(o%arr(4,3)[2,*], source=6)
+ allocate(vec(10)[1,*], source=7)
- if (arr(2,2)* c /= 42) stop 1
+ if (vec(3) * c /= 49) stop 1
+ if (o%arr(2,2)* c /= 42) stop 2
end program p
diff --git a/gcc/tree-profile.cc b/gcc/tree-profile.cc
index fed218e..fe20e84 100644
--- a/gcc/tree-profile.cc
+++ b/gcc/tree-profile.cc
@@ -2031,6 +2031,7 @@ tree_profiling (void)
handle_missing_profiles ();
del_node_map ();
+ end_branch_prob ();
return 0;
}
@@ -2065,10 +2066,8 @@ public:
bool
pass_ipa_tree_profile::gate (function *)
{
- /* When profile instrumentation, use or test coverage shall be performed.
- But for AutoFDO, this there is no instrumentation, thus this pass is
- disabled. */
- return (!in_lto_p && !flag_auto_profile
+ /* When profile instrumentation, use or test coverage shall be performed. */
+ return (!in_lto_p
&& (flag_branch_probabilities || flag_test_coverage
|| coverage_instrumentation_p ())
&& !seen_error ());
diff --git a/gcc/tree-vect-loop.cc b/gcc/tree-vect-loop.cc
index 575987e..2782d61 100644
--- a/gcc/tree-vect-loop.cc
+++ b/gcc/tree-vect-loop.cc
@@ -3792,6 +3792,7 @@ vect_analyze_loop (class loop *loop, gimple *loop_vectorized_call,
/* When we selected a first vectorized epilogue, see if the target
suggests to have another one. */
if (!unlimited_cost_model (loop)
+ && !LOOP_VINFO_USING_PARTIAL_VECTORS_P (orig_loop_vinfo)
&& (orig_loop_vinfo->vector_costs->suggested_epilogue_mode ()
!= VOIDmode))
{
diff --git a/gcc/tree-vect-stmts.cc b/gcc/tree-vect-stmts.cc
index 69f5f67..95406b4 100644
--- a/gcc/tree-vect-stmts.cc
+++ b/gcc/tree-vect-stmts.cc
@@ -9626,7 +9626,8 @@ vectorizable_store (vec_info *vinfo,
data_ref = fold_build2 (MEM_REF, vectype, dataref_ptr,
dataref_offset ? dataref_offset
: build_int_cst (ref_type, 0));
- if (alignment_support_scheme == dr_aligned)
+ if (alignment_support_scheme == dr_aligned
+ && align >= TYPE_ALIGN_UNIT (vectype))
;
else
TREE_TYPE (data_ref)
@@ -11659,7 +11660,8 @@ vectorizable_load (vec_info *vinfo,
{
data_ref = fold_build2 (MEM_REF, ltype,
dataref_ptr, offset);
- if (alignment_support_scheme == dr_aligned)
+ if (alignment_support_scheme == dr_aligned
+ && align >= TYPE_ALIGN_UNIT (ltype))
;
else
TREE_TYPE (data_ref)